protected override Vector3d PrecomputeCenterOfLift(Vector3d velocity, double MachNumber, FARCenterQuery center) { Vector3d force = RunDragCalculation(velocity, MachNumber, 1); Vector3d pos = GetCoD(); center.AddForce(pos, force); return(force); }
protected override Vector3d PrecomputeCenterOfLift(Vector3d velocity, double MachNumber, FARCenterQuery center) { try { Vector3d force = RunDragCalculation(velocity, MachNumber, 1); Vector3d pos = GetCoD(); center.AddForce(pos, force); return(force); } catch //FIX ME!!! { //Yell at KSP devs so that I don't have to engage in bad code practice //Debug.Log("The expected exception from the symmetry counterpart part transform internals was caught and suppressed"); return(Vector3.zero); } }
public void ApplyForce(PartData pd, Vector3 localVel, Vector3 forceVector, Vector3 torqueVector) { var tmp = 0.0005 * Vector3.SqrMagnitude(localVel); var dynamicPressurekPa = tmp * atmDensity; var dragFactor = dynamicPressurekPa * Mathf.Max(PhysicsGlobals.DragCurvePseudoReynolds.Evaluate(atmDensity * Vector3.Magnitude(localVel)), 1.0f); var liftFactor = dynamicPressurekPa; var localVelNorm = Vector3.Normalize(localVel); Vector3 localForceTemp = Vector3.Dot(localVelNorm, forceVector) * localVelNorm; var partLocalForce = (localForceTemp * (float)dragFactor + (forceVector - localForceTemp) * (float)liftFactor); forceVector = pd.aeroModule.part.transform.TransformDirection(partLocalForce); torqueVector = pd.aeroModule.part.transform.TransformDirection(torqueVector * (float)dynamicPressurekPa); if (!float.IsNaN(forceVector.x) && !float.IsNaN(torqueVector.x)) { Vector3 centroid = pd.aeroModule.part.transform.TransformPoint(pd.centroidPartSpace - pd.aeroModule.part.CoMOffset); center.AddForce(centroid, forceVector); center.AddTorque(torqueVector); } }
protected override Vector3d PrecomputeCenterOfLift(Vector3d velocity, double MachNumber, FARCenterQuery center) { double AoA = CalculateAoA(velocity); Vector3d force = CalculateForces(velocity, MachNumber, AoA); center.AddForce(AerodynamicCenter, force); return force; }
protected override Vector3d PrecomputeCenterOfLift(Vector3d velocity, double MachNumber, FARCenterQuery center) { Vector3d force = RunDragCalculation(velocity, MachNumber, 1); Vector3d pos = GetCoD(); center.AddForce(pos, force); return force; }