示例#1
0
        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());
        }
示例#2
0
 public double TemperatureAt(Tuple3 position, ReferenceFrame referenceFrame)
 {
     if (ReferenceEquals(referenceFrame, null))
     {
         throw new ArgumentNullException(nameof(referenceFrame));
     }
     return(StockAerodynamics.GetTemperature(referenceFrame.PositionToWorldSpace(position.ToVector()), InternalBody));
 }
示例#3
0
 public double AltitudeAtPosition(Tuple3 position, ReferenceFrame referenceFrame)
 {
     if (ReferenceEquals(referenceFrame, null))
     {
         throw new ArgumentNullException(nameof(referenceFrame));
     }
     return(InternalBody.GetAltitude(referenceFrame.PositionToWorldSpace(position.ToVector())));
 }
示例#4
0
        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));
        }
示例#5
0
        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);
        }
示例#6
0
 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);
 }
示例#7
0
        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));
        }
示例#8
0
文件: Flight.cs 项目: lucaelin/krpc
        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());
        }
示例#9
0
 public static Tuple3 TransformPosition(Tuple3 position, ReferenceFrame from, ReferenceFrame to)
 {
     CheckReferenceFrames(from, to);
     return(to.PositionFromWorldSpace(from.PositionToWorldSpace(position.ToVector())).ToTuple());
 }