Exemple #1
0
class Projectile:
    def __init__(self):
        self.velocity = Vector(15.0, 15.0, 1.0)
        self.position = Vector(0.0, 0.1, 0.0)
        self.acceleration = Vector(0.0, 0.0, 0.0)
        self.windVelocity = Vector(0.0, 0.0, 0.0)
        self.radius = 0.5
        self.dragCoeff = 0.5
        self.windDragCoeff = 0.5
        self.mass = 10.0
        self.liftCoeff = 0.2
        self.velocityThreshold = 2.0
        self.spin = Vector(0.0, 0.0, 1.0)

    # Moment of Inertia
    def calcMomentInertia(self):

        return (2.0 / 5.0) * self.mass * self.radius * self.radius

    # Drag Force
    def calcForceDrag(self):

        apparentVelocity = self.velocity - self.windVelocity
        return (apparentVelocity * apparentVelocity) * 0.5 * self.calcDensity() * self.calcArea() * -self.dragCoeff

    # Gravitational Force
    def calcForceGravity(self):

        return Vector(0.0, -1.0, 0.0) * (self.mass * G)

    # Density
    def calcDensity(self):

        return self.mass / ((4.0 / 3.0) * PI * self.radius * self.radius * self.radius)

    # Magnus Force
    def calcMagnusForce(self):

        return (self.calcRotationVelocity().cross(self.velocity)) * self.spin

    # Torque
    def calcTorque(self):

        return self.calcTotalForce().cross(self.position + self.radius)

    # Rotational Velocity
    def calcRotationVelocity(self):

        rad = self.velocity.normalize() * self.radius
        return (rad).cross(velocity) / (rad.magnitude() * rad.magnitude())

    # Area
    def calcArea(self):

        return PI * self.radius * self.radius

    # Total Force
    def calcTotalForce(self):

        return self.calcForceDrag() + self.calcForceGravity() + self.calcMagnusForce()
Exemple #2
0
 def __init__(self):
     self.velocity = Vector(15.0, 15.0, 1.0)
     self.position = Vector(0.0, 0.1, 0.0)
     self.acceleration = Vector(0.0, 0.0, 0.0)
     self.windVelocity = Vector(0.0, 0.0, 0.0)
     self.radius = 0.5
     self.dragCoeff = 0.5
     self.windDragCoeff = 0.5
     self.mass = 10.0
     self.liftCoeff = 0.2
     self.velocityThreshold = 2.0
     self.spin = Vector(0.0, 0.0, 1.0)