public Tuple3 BedrockPosition(double latitude, double longitude, ReferenceFrame referenceFrame) { var altitude = BedrockHeight(latitude, longitude); var position = InternalBody.GetWorldSurfacePosition(latitude, longitude, altitude); return(referenceFrame.PositionFromWorldSpace(position).ToTuple()); }
Tuple3 PositionAt (double latitude, double longitude, double altitude, ReferenceFrame referenceFrame) { if (ReferenceEquals (referenceFrame, null)) throw new ArgumentNullException (nameof (referenceFrame)); var position = InternalBody.GetWorldSurfacePosition (latitude, longitude, altitude); return referenceFrame.PositionFromWorldSpace (position).ToTuple (); }
public Tuple3 Velocity(ReferenceFrame referenceFrame) { if (ReferenceEquals(referenceFrame, null)) { throw new ArgumentNullException(nameof(referenceFrame)); } return(referenceFrame.VelocityFromWorldSpace(InternalBody.position, InternalBody.GetWorldVelocity()).ToTuple()); }
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 Tuple4 Rotation(ReferenceFrame referenceFrame) { var up = Vector3.up; var right = InternalBody.GetRelSurfacePosition(0, 0, 1).normalized; var forward = Vector3.Cross(right, up); Vector3.OrthoNormalize(ref forward, ref up); var rotation = Quaternion.LookRotation(forward, up); return(referenceFrame.RotationFromWorldSpace(rotation).ToTuple()); }
public Tuple4 Rotation (ReferenceFrame referenceFrame) { if (ReferenceEquals (referenceFrame, null)) throw new ArgumentNullException (nameof (referenceFrame)); var up = Vector3.up; var right = InternalBody.GetRelSurfacePosition (0, 0, 1).normalized; var forward = Vector3.Cross (right, up); Vector3.OrthoNormalize (ref forward, ref up); var rotation = Quaternion.LookRotation (forward, up); return referenceFrame.RotationFromWorldSpace (rotation).ToTuple (); }
public double AtmosphericDensityAtPosition(Tuple3 Position, ReferenceFrame referenceFrame) { if (ReferenceEquals(referenceFrame, null)) { throw new ArgumentNullException(nameof(referenceFrame)); } var adjustedPosition = referenceFrame.PositionToWorldSpace(Position.ToVector()); var altitude = InternalBody.GetAltitude(adjustedPosition); var latitude = InternalBody.GetLatitude(adjustedPosition); var pressure = FlightGlobals.getStaticPressure(adjustedPosition); var temperature = FlightGlobals.getExternalTemperature(altitude, InternalBody) + InternalBody.atmosphereTemperatureSunMultCurve.Evaluate((float)altitude) * (InternalBody.latitudeTemperatureBiasCurve.Evaluate((float)latitude) + InternalBody.latitudeTemperatureSunMultCurve.Evaluate((float)latitude) // fix that 0 into latitude + InternalBody.axialTemperatureSunMultCurve.Evaluate(1)); return(FlightGlobals.getAtmDensity(pressure, temperature)); }
public double SurfaceHeight (double latitude, double longitude) { var alt = Math.Max (0, BedrockHeight (latitude, longitude)); // Using raycast to find real surface height. const double raySource = 1000; const double raySecondPoint = 500; Vector3d rayCastStart = InternalBody.GetWorldSurfacePosition(latitude, longitude, alt + raySource); Vector3d rayCastStop = InternalBody.GetWorldSurfacePosition(latitude, longitude, alt + raySecondPoint); RaycastHit hit; //Casting a ray on the surface (layer 15 in KSP). if (Physics.Raycast(rayCastStart, (rayCastStop - rayCastStart), out hit, float.MaxValue, 1 << 15)) { // Ensure hit is on the topside of planet, near the rayCastStart, not on the far side. if (Mathf.Abs(hit.distance) < 3000) { // Okay, a hit was found, use it instead of PQS alt: alt = alt + raySource - hit.distance; } } return alt; }
/// <summary> /// Hash code for the object. /// </summary> public override int GetHashCode() { return(InternalBody.GetHashCode()); }
public Tuple3 Velocity(ReferenceFrame referenceFrame) { return(referenceFrame.VelocityFromWorldSpace(InternalBody.position, InternalBody.GetWorldVelocity()).ToTuple()); }
public Tuple3 MSLPosition(double latitude, double longitude, ReferenceFrame referenceFrame) { var position = InternalBody.GetWorldSurfacePosition(latitude, longitude, 0); return(referenceFrame.PositionFromWorldSpace(position).ToTuple()); }