Exemple #1
0
        private void OnBerechnenClick(object sender, RoutedEventArgs e)
        {
            try {
                var winkel          = Winkel.FromDeg(double.Parse(AbsprungWinkelTextBox.Text));
                var geschwindigkeit = Geschwindigkeit.FromKilometerProStunde(double.Parse(AbsprungGeschwindigkeitTextBox.Text));
                var schanzenHöhe    = Länge.FromCentimeter(double.Parse(AbsprungHöheTextBox.Text));

                var schanze  = Schanze.Create(schanzenHöhe, winkel);
                var flugbahn = Flugbahn.Create(schanze, geschwindigkeit);
                var setting  = SettingViewModel.Create(schanze, flugbahn);

                _viewModel.Settings.Add(setting);
                _viewModel.SelectedSetting = setting;
            } catch (Exception) {
                // TODO Fehler visualisieren
            }
        }
Exemple #2
0
        public SettingViewModel(Schanze schanze = null, Flugbahn flugbahn = null)
        {
            //if (DesignerProperties.GetIsInDesignMode(new DependencyObject())) {

            //    var winkel          = Winkel.FromDeg(22);
            //    var geschwindigkeit = Geschwindigkeit.FromKilometerProStunde(20);
            //    var schanzenHöhe    = Länge.FromCentimeter(16);

            //    schanze  = Berechnung.Schanze.Create(schanzenHöhe, winkel);
            //    flugbahn = Berechnung.Flugbahn.Create(schanze, geschwindigkeit);

            //    RenderMetrics = true;
            //}

            _orgSchanze  = schanze;
            _orgFlugbahn = flugbahn;
            _renderScene = true;

            Rescale();
        }
Exemple #3
0
        public static SettingViewModel Create(Schanze schanze, Flugbahn flugbahn)
        {
            var viewModel = new SettingViewModel(schanze, flugbahn);

            return(viewModel);
        }
Exemple #4
0
        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);
        }