本文整理汇总了C#中CelestialBody.GetSpeedOfSound方法的典型用法代码示例。如果您正苦于以下问题:C# CelestialBody.GetSpeedOfSound方法的具体用法?C# CelestialBody.GetSpeedOfSound怎么用?C# CelestialBody.GetSpeedOfSound使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CelestialBody
的用法示例。
在下文中一共展示了CelestialBody.GetSpeedOfSound方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: UpdatePosition
protected override Vector3 UpdatePosition()
{
if (EditorLogic.RootPart == null) {
/* DragCubes can get NaNed without this check */
return Vector3.zero;
}
if (RCSBuildAid.Mode != PluginMode.Parachutes) {
return Vector3.zero;
}
hasParachutes = RCSBuildAid.Parachutes.Count > 0;
body = Settings.selected_body;
altitude = MenuParachutes.altitude;
temperature = body.GetTemperature (altitude);
pressure = body.GetPressure (altitude);
density = body.GetDensity (pressure, temperature);
mach = (float)(speed / body.GetSpeedOfSound(pressure, density));
gravity = body.gravity(altitude);
findCenterOfDrag();
speed = Vt = calculateTerminalVelocity ();
/* unless I go at mach speeds I don't care about this
reynolds = (float)(density * speed);
reynoldsDragMult = PhysicsGlobals.DragCurvePseudoReynolds.Evaluate (reynolds);
*/
dragForce.Vector = calculateDragForce ();
return position;
}
示例2: SimAeroForce
//*******************************************************
public static Vector3 SimAeroForce(List<Part> parts, CelestialBody body, Vector3 v_wrld_vel, double altitude, double latitude = 0.0)
{
double pressure = body.GetPressure(altitude);
// Lift and drag for force accumulation.
Vector3d total_lift = Vector3d.zero;
Vector3d total_drag = Vector3d.zero;
// dynamic pressure for standard drag equation
double rho = GetDensity(altitude, body);
double dyn_pressure = 0.0005 * rho * v_wrld_vel.sqrMagnitude;
if (rho <= 0)
{
return Vector3.zero;
}
double soundSpeed = body.GetSpeedOfSound(pressure, rho);
double mach = v_wrld_vel.magnitude / soundSpeed;
if (mach > 25.0) { mach = 25.0; }
// Loop through all parts, accumulating drag and lift.
foreach(Part p in parts)
{
// need checks on shielded components
if (p.ShieldedFromAirstream || p.Rigidbody == null)
{
continue;
}
// Get Drag
Vector3 sim_dragVectorDir = v_wrld_vel.normalized;
Vector3 sim_dragVectorDirLocal = -(p.transform.InverseTransformDirection(sim_dragVectorDir));
Vector3 liftForce = new Vector3(0, 0, 0);
switch(p.dragModel)
{
case Part.DragModel.DEFAULT:
case Part.DragModel.CUBE:
SmartDragCubeList cubes = new SmartDragCubeList(p, parts);
DragCubeList.CubeData p_drag_data;
float drag;
if (cubes.None) // since 1.0.5, some parts don't have drag cubes (for example fuel lines and struts)
{
drag = p.maximum_drag;
}
else
{
p_drag_data = cubes.AddSurfaceDragDirection(-sim_dragVectorDirLocal, (float)mach);
drag = p_drag_data.areaDrag * PhysicsGlobals.DragCubeMultiplier;
liftForce = p_drag_data.liftForce;
}
double sim_dragScalar = dyn_pressure * (double)drag * PhysicsGlobals.DragMultiplier;
total_drag += -(Vector3d)sim_dragVectorDir * sim_dragScalar;
break;
case Part.DragModel.SPHERICAL:
total_drag += -(Vector3d)sim_dragVectorDir * (double)p.maximum_drag;
break;
case Part.DragModel.CYLINDRICAL:
total_drag += -(Vector3d)sim_dragVectorDir * (double)Mathf.Lerp(p.minimum_drag, p.maximum_drag, Mathf.Abs(Vector3.Dot(p.partTransform.TransformDirection(p.dragReferenceVector), sim_dragVectorDir)));
break;
case Part.DragModel.CONIC:
total_drag += -(Vector3d)sim_dragVectorDir * (double)Mathf.Lerp(p.minimum_drag, p.maximum_drag, Vector3.Angle(p.partTransform.TransformDirection(p.dragReferenceVector), sim_dragVectorDir) / 180f);
break;
default:
// no drag to apply
break;
}
// If it isn't a wing or lifter, get body lift.
if (!p.hasLiftModule)
{
float simbodyLiftScalar = p.bodyLiftMultiplier * PhysicsGlobals.BodyLiftMultiplier * (float)dyn_pressure;
simbodyLiftScalar *= PhysicsGlobals.GetLiftingSurfaceCurve("BodyLift").liftMachCurve.Evaluate((float)mach);
Vector3 bodyLift = p.transform.rotation * (simbodyLiftScalar * liftForce);
bodyLift = Vector3.ProjectOnPlane(bodyLift, sim_dragVectorDir);
// Only accumulate forces for non-LiftModules
total_lift += bodyLift;
}
// Find ModuleLifingSurface for wings and liftforce.
// Should catch control surface as it is a subclass
foreach (var m in p.Modules.OfType<ModuleLiftingSurface>())
{
float mcs_mod = 1.0f;
double liftQ = dyn_pressure * 1000;
ModuleLiftingSurface wing = (ModuleLiftingSurface)m;
Vector3 nVel = Vector3.zero;
Vector3 liftVector = Vector3.zero;
//.........这里部分代码省略.........