Ejemplo n.º 1
0
        /// <summary>
        /// Für eine gegebene Masse und einen Beschleunigungsvektor wird der Hubweg als Vektor berechnet,
        /// welche der gegebenen potentiellen Energie entspricht.
        /// </summary>
        /// <param name="Epot"></param>
        /// <param name="g"></param>
        /// <param name="m"></param>
        /// <returns></returns>
        public static LengthInMeter <Mag.One> LiftUpVectorInMeter(Energy Epot, Acceleration g, Mass m)
        {
            var    gInMeterPerSec = Acceleration.MeterPerSec2(g).Vector;
            double gAbs           = gInMeterPerSec.Length;

            gAbs *= gAbs;
            double fact = Energy.Nm(Epot).Value / (Mass.Kilogram(m).Value *gAbs);

            return(Length.Meter((fact * gInMeterPerSec).coordinates));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Berechnet die Flugbahn eines Flugkörpers nach Newton
        /// </summary>
        /// <param name="v0">Startgeschwindigkeit</param>
        /// <param name="Auftrieb">Auftriebskraft senkrecht zur Flugrichtung</param>
        /// <param name="Widerstand">Widerstandskraft entgegen der Flugrichtung, bedingt durch den Luftwiderstand</param>
        /// <param name="Fallbeschleunigung">Fallbeschleunigung</param>
        /// <param name="dt">Zeitdifferenz zwischen den Einzelmessungen</param>
        /// <param name="Flugzeit">gesamte betrachtete Flugzeit</param>
        /// <returns></returns>
        public static List <Length> Flugbahn2D(
            Velocity v0,
            Mass MasseFlugkörper,
            Func <Velocity, Force> Auftrieb,
            Func <Velocity, Force> Widerstand,
            Acceleration Fallbeschleunigung,
            Time dt,
            Time Flugzeit)
        {
            Debug.Assert(v0.Dimension == 2, "Die Funktion Flugbahn2D ist auf zweidimensionale Vektoren beschränkt. Parameter v0 weicht davon ab !");
            Debug.Assert(Fallbeschleunigung.Dimension == 2, "Die Funktion Flugbahn2D ist auf zweidimensionale Vektoren beschränkt. Parameter fallbeschleunigung weicht davon ab !");

            var vi = Velocity.MeterPerSec(v0);

            int stepCount = (int)Math.Ceiling((Flugzeit.ValueInBaseUnit / dt.ValueInBaseUnit));

            var pi = Length.Meter(0, 0);

            var bahn = new List <Length>(stepCount);

            // Newtonsches Näherungsverfahren für die Flugbahn
            for (int i = 0; i < stepCount; i++)
            {
                // nach F = m*a bestimmt sich aAuftrieb = Fauftrieb/mFlugkörper. vAuftrieb wird durch integration über t ermittelt
                var vAuftrieb   = Velocity.MeterPerSec(Acceleration.MeterPerSec2(Auftrieb(vi), MasseFlugkörper), dt);
                var vWiderstand = Velocity.MeterPerSec(Acceleration.MeterPerSec2(Widerstand(vi), MasseFlugkörper), dt);

                vi = vi + Velocity.MeterPerSec(Fallbeschleunigung, Time.SCALE(i, dt));

                vi = vi + Velocity.MeterPerSec(vAuftrieb);
                vi = vi + vWiderstand;

                // Integration der Wege
                pi = pi + Length.Meter(vi, dt);

                // Bahn aufzeichnen
                bahn.Add(pi);
            }

            return(bahn);
        }
Ejemplo n.º 3
0
 public static EnergyInNm <Mag.One> Nm(Force F, Length s)
 {
     return(Nm(Force.N(F).Vector *Length.Meter(s).Vector));
 }
Ejemplo n.º 4
0
 public static EnergyInNm <Mag.One> EpotInNm(Mass m, Acceleration g, Length height)
 {
     return(Energy.Nm(Force.N(g, m).Vector *Length.Meter(height).Vector));
 }
Ejemplo n.º 5
0
 public EnergyInNm(Force F, Length s) : base((new ForceInNewton <TOrderOfMagnitude>(F)).Vector * Length.Meter(s).Vector)
 {
 }
Ejemplo n.º 6
0
 // m/min
 public static VelocityInMeterPerMinute <Mag.One> MeterPerMinute(Length s, Time t)
 {
     return(MeterPerMinute(Length.Meter(s).Vector / Time.Minutes(t).Value));
 }
Ejemplo n.º 7
0
 // m/s
 public static VelocityInMeterPerSec <Mag.One> MeterPerSec(Length s, Time t)
 {
     return(MeterPerSec(Length.Meter(s).Vector / Time.Sec(t).Value));
 }