Exemplo n.º 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());
        }
Exemplo n.º 2
0
        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());
        }