Advertisement
Guest User

shotMissile ballistic calculation

a guest
May 9th, 2017
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.13 KB | None | 0 0
  1.   Vector3Val position = FutureVisualState().Position();
  2.   Vector3Val speed = FutureVisualState().ModelSpeed();
  3.   float mass = GetMass();
  4.  
  5.   Vector3 force(VZero), torque(VZero);
  6.   Vector3 friction(VZero), torqueFriction(VZero);
  7.   Vector3 pForce(VZero), pCenter(VZero);
  8.   // body air friction
  9.   pForce[0] = speed[0] * speed[0] * speed[0] * 5e-4f + speed[0] * fabs(speed[0]) * 10.0f + speed[0] * 10.0f;
  10.   pForce[1] = speed[1] * speed[1] * speed[1] * 5e-4f + speed[1] * fabs(speed[1]) * 10.0f + speed[1] * 10.0f;
  11.   pForce[2] = speed[2] * speed[2] * speed[2] * 1e-5f + speed[2] * fabs(speed[2]) * 0.01f + speed[2] * 2.0f;
  12.  
  13.   pForce[0] *= ammoType->sideAirFriction;
  14.   pForce[1] *= ammoType->sideAirFriction;
  15.   pForce[2] *= ammoType->_airFriction;
  16.  
  17.   pForce *= mass * (1.0f / 10.0f);
  18.   friction += pForce;
  19.  
  20.   // aerodynamic non-stability makes direction aligned with speed
  21.   pForce[0] *= 0.1f;
  22.   pForce[1] *= 0.1f;
  23.   pCenter = Vector3(0.0f, 0.0f, +0.3f);
  24.   torque += pCenter.CrossProduct(pForce);
  25.  
  26.   // calculate draconic force (which makes direction aligned with speed)
  27.   // note: this should be calculated for all missiles, but it is too late to add it now, as it might cause some changed behavior.
  28.   pForce[0] = speed[0] * fabs(speed[0]) * -0.00033f + speed[0] * -0.005f;
  29.   pForce[1] = speed[1] * fabs(speed[1]) * -0.00033f + speed[1] * -0.005f;
  30.   pForce[2] = 0.0f;
  31.   pForce *= mass;
  32.   force += pForce;
  33.  
  34.   // convert to world space
  35.   FutureVisualState().DirectionModelToWorld(friction, friction);
  36.   FutureVisualState().DirectionModelToWorld(force, force);
  37.   FutureVisualState().DirectionModelToWorld(torque, torque);
  38.  
  39.   torqueFriction = _angMomentum * 5.0f;
  40.  
  41.   // add gravity
  42.   pForce = Vector3(0.0f, -G_CONST, 0.0f) * mass;
  43.   force += pForce;
  44.  
  45.   // calculate new position
  46.   VisualState moveTrans = PredictPos<VisualState>(deltaT);
  47.  
  48.   ApplyRemoteStateAdjustSpeed(deltaT,moveTrans);
  49.  
  50.   Vector3Val newPos = moveTrans.Position();
  51.   Vector3 lDir = newPos - position;
  52.  
  53.   Move(moveTrans);
  54.   DirectionWorldToModel(FutureVisualState()._modelSpeed, FutureVisualState()._speed);
  55.   ApplyForces(deltaT, force, torque, friction, torqueFriction);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement