public Länge Y(Länge x) { return(Länge.FromMeter( Wurfparabel.Y( x: x.Meter / Scale, v0: AbsprungGeschwindigkeit.MeterProSekunde, alpha: AbsprungWinkel.Rad, y0: _absprungHöhe.Meter) * Scale)); }
public static Schanze Create(Länge höhe, Winkel absprungwinkel) { var radius = höhe.Meter / (1 - Math.Cos(absprungwinkel.Rad)); var länge = radius * Math.Sin(absprungwinkel.Rad); return(new Schanze( länge: Länge.FromMeter(länge), höhe: höhe, absprungwinkel: absprungwinkel, radius: Länge.FromMeter(radius), scale: 1 )); }
public static Flugbahn Create( Schanze schanze, Geschwindigkeit absprungGeschwindigkeit) { var weite = Wurfparabel.Weite( v0: absprungGeschwindigkeit.MeterProSekunde, y0: schanze.Höhe.Meter, alpha: schanze.Absprungwinkel.Rad); var scheitelpunktX = Wurfparabel.ScheitelpunktX( v0: absprungGeschwindigkeit.MeterProSekunde, y0: schanze.Höhe.Meter, alpha: schanze.Absprungwinkel.Rad ); var höhe = Wurfparabel.ScheitelpunktY( v0: absprungGeschwindigkeit.MeterProSekunde, y0: schanze.Höhe.Meter, alpha: schanze.Absprungwinkel.Rad); var aufprallWinkel = Wurfparabel.AufprallWinkel( v0: absprungGeschwindigkeit.MeterProSekunde, y0: schanze.Höhe.Meter, alpha: schanze.Absprungwinkel.Rad ); var aufprallGeschwindigkeit = Wurfparabel.AufprallGeschwindigkeit( v0: absprungGeschwindigkeit.MeterProSekunde, y0: schanze.Höhe.Meter, alpha: schanze.Absprungwinkel.Rad ); return(new Flugbahn( absprungHöhe: schanze.Höhe, absprungWinkel: schanze.Absprungwinkel, absprungGeschwindigkeit: absprungGeschwindigkeit, sprungWeite: Länge.FromMeter(weite), scheitelpunktX: Länge.FromMeter(scheitelpunktX), scheitelpunktY: Länge.FromMeter(höhe), aufprallWinkel: Winkel.FromRad(aufprallWinkel), aufprallGeschwindigkeit: Geschwindigkeit.FromMeterProSekunde(aufprallGeschwindigkeit), scale: 1)); }
public FlugbahnViewModel(Schanze schanze, Flugbahn flugbahn) { _flugbahn = flugbahn ?? throw new ArgumentNullException(nameof(flugbahn)); var punkte = new List <Point>(); var segments = 100; var step = (int)flugbahn.SprungWeite.Meter / segments; // Horizontaler Offset, wenn Schanze vorhanden var x0 = schanze?.Länge ?? Länge.Empty; // Absprungpunkt var x = Länge.Empty; var y = flugbahn.Y(x); StartPunkt = ToPoint(x0 + x, y); punkte.Add(StartPunkt); // Bahnpunkte for (int i = 1; i <= segments; i++) { x = Länge.FromMeter(i * step); y = flugbahn.Y(x); punkte.Add(ToPoint(x0 + x, y)); } // Aufprallpunkt x = flugbahn.SprungWeite; y = flugbahn.Y(x); EndPunkt = ToPoint(x0 + x, y); punkte.Add(EndPunkt); Punkte = new PointCollection(punkte); Scheitelpunkt = ToPoint(x0 + flugbahn.ScheitelpunktX, flugbahn.ScheitelpunktY); var winkelSize = flugbahn.Scale * 0.2; var tangentenLänge = flugbahn.Scale; // Absprung var m = Matrix.Identity; m.Rotate(flugbahn.AbsprungWinkel.Deg); var v = new Vector(tangentenLänge, 0); AbsprungTangentenKontrollpunkt1 = StartPunkt + v; AbsprungTangentenKontrollpunkt2 = StartPunkt + v * m; v = new Vector(winkelSize, 0); AbsprungWinkelPunkt1 = StartPunkt + v; AbsprungWinkelPunkt2 = StartPunkt + v * m; AbsprungWinkelSize = new Size(winkelSize, winkelSize); // Aufprall m = Matrix.Identity; m.Rotate(-flugbahn.AufprallWinkel.Deg); v = new Vector(-tangentenLänge, 0); AufprallTangentenKontrollpunkt1 = EndPunkt + v; AufprallTangentenKontrollpunkt2 = EndPunkt + v * m; v = new Vector(-winkelSize, 0); AufprallWinkelPunkt1 = EndPunkt + v; AufprallWinkelPunkt2 = EndPunkt + v * m; AufprallWinkelSize = new Size(winkelSize, winkelSize); }