public static Tuple3 TransformVelocity(Tuple3 position, Tuple3 velocity, ReferenceFrame from, ReferenceFrame to) { var worldPosition = from.PositionToWorldSpace(position.ToVector()); var worldVelocity = from.VelocityToWorldSpace(position.ToVector(), velocity.ToVector()); return(to.VelocityFromWorldSpace(worldPosition, worldVelocity).ToTuple()); }
public double TemperatureAt(Tuple3 position, ReferenceFrame referenceFrame) { if (ReferenceEquals(referenceFrame, null)) { throw new ArgumentNullException(nameof(referenceFrame)); } return(StockAerodynamics.GetTemperature(referenceFrame.PositionToWorldSpace(position.ToVector()), InternalBody)); }
public double AltitudeAtPosition(Tuple3 position, ReferenceFrame referenceFrame) { if (ReferenceEquals(referenceFrame, null)) { throw new ArgumentNullException(nameof(referenceFrame)); } return(InternalBody.GetAltitude(referenceFrame.PositionToWorldSpace(position.ToVector()))); }
public double LongitudeAtPosition(Tuple3 Position, ReferenceFrame referenceFrame) { if (ReferenceEquals(referenceFrame, null)) { throw new ArgumentNullException(nameof(referenceFrame)); } var adjustedPosition = referenceFrame.PositionToWorldSpace(Position.ToVector()); return(InternalBody.GetLongitude(adjustedPosition)); }
public static double RaycastDistance(Tuple3 position, Tuple3 direction, ReferenceFrame referenceFrame) { if (ReferenceEquals(referenceFrame, null)) { throw new ArgumentNullException(nameof(referenceFrame)); } var worldPosition = referenceFrame.PositionToWorldSpace(position.ToVector()); var worldDirection = referenceFrame.DirectionToWorldSpace(direction.ToVector()); RaycastHit hitInfo; bool hit = Physics.Raycast(worldPosition, worldDirection, out hitInfo); return(hit ? hitInfo.distance : Double.PositiveInfinity); }
public double AtmosphericDensityAtPosition(Tuple3 position, ReferenceFrame referenceFrame) { if (ReferenceEquals(referenceFrame, null)) throw new ArgumentNullException(nameof(referenceFrame)); var worldPosition = referenceFrame.PositionToWorldSpace(position.ToVector()); var body = InternalBody; var altitude = (float) body.GetAltitude(worldPosition); var latitude = (float) body.GetLatitude(worldPosition); var pressure = FlightGlobals.getStaticPressure(worldPosition); var temperature = FlightGlobals.getExternalTemperature(altitude, body) + body.atmosphereTemperatureSunMultCurve.Evaluate(altitude) * (body.latitudeTemperatureBiasCurve.Evaluate(latitude) + body.latitudeTemperatureSunMultCurve.Evaluate(latitude) // fix that 0 into latitude + body.axialTemperatureSunMultCurve.Evaluate(1)); return FlightGlobals.getAtmDensity(pressure, temperature); }
public static Parts.Part RaycastPart(Tuple3 position, Tuple3 direction, ReferenceFrame referenceFrame) { if (ReferenceEquals(referenceFrame, null)) { throw new ArgumentNullException(nameof(referenceFrame)); } var worldPosition = referenceFrame.PositionToWorldSpace(position.ToVector()); var worldDirection = referenceFrame.DirectionToWorldSpace(direction.ToVector()); RaycastHit hitInfo; bool hit = Physics.Raycast(worldPosition, worldDirection, out hitInfo); if (!hit) { return(null); } var part = hitInfo.collider.gameObject.GetComponentInParent <global::Part>(); return(part == null ? null : new Parts.Part(part)); }
public Tuple3 SimulateAerodynamicForceAt(CelestialBody body, Tuple3 position, Tuple3 velocity) { if (ReferenceEquals(body, null)) { throw new ArgumentNullException(nameof(body)); } var vessel = InternalVessel; var worldVelocity = referenceFrame.VelocityToWorldSpace(position.ToVector(), velocity.ToVector()); var worldPosition = referenceFrame.PositionToWorldSpace(position.ToVector()); Vector3 worldForce; if (!FAR.IsAvailable) { worldForce = StockAerodynamics.SimAeroForce(body.InternalBody, vessel, worldVelocity, worldPosition); } else { Vector3 torque; var altitude = (worldPosition - body.InternalBody.position).magnitude - body.InternalBody.Radius; FAR.CalculateVesselAeroForces(vessel, out worldForce, out torque, worldVelocity - body.InternalBody.getRFrmVel(worldPosition), altitude); } return(referenceFrame.DirectionFromWorldSpace(worldForce).ToTuple()); }
public static Tuple3 TransformPosition(Tuple3 position, ReferenceFrame from, ReferenceFrame to) { CheckReferenceFrames(from, to); return(to.PositionFromWorldSpace(from.PositionToWorldSpace(position.ToVector())).ToTuple()); }