/// <summary>
        /// Konstruktor okna warunków początkowych
        /// </summary>
        internal InitialCondition(int _mode=SPDAssets.MAX,InitialConditions condition=null)
        {
            _tooltip = -1;
            InitializeComponent();

            Mode = _mode;
            _selectedOperation = Operation.None;
            ComboBox.ItemsSource = SPDAssets.GetBrushRectangles(Mode,InitialConditions.GetTransformation(Mode));
            ComboBox.SelectedIndex = 0;
            DataContext = this;
            _conditionNames = new List<Tuple<string,Tuple<string,bool> > >();
            _conditions = new Dictionary<Tuple<string, bool>, Func<bool, int, int, bool, InitialConditions>>();
            foreach (var T in new[] {false, true})
            {
                _conditions.Add(new Tuple<string, bool>("Donut", T), InitialConditions.DonutFactory);
                _conditions.Add(new Tuple<string, bool>("Circle", T), InitialConditions.CircleFactory);
                _conditions.Add(new Tuple<string,bool>("Diagonal",T),InitialConditions.DiagonalFactory);
                _conditions.Add(new Tuple<string, bool>("NowakMay", T), InitialConditions.NowakMayFactory);
            }
            _conditionNames.AddRange(
                _conditions.Select(
                    k =>
                        new Tuple<string, Tuple<string, bool>>(k.Value(k.Key.Item2, 1,10,false).Name,
                            new Tuple<string, bool>(k.Key.Item1, k.Key.Item2))));
            ComboBoxCopy.ItemsSource = _conditionNames.Select(s=>s.Item1);
            var D = SPDAssets.GenerateLegend(Legend.Height, Mode, InitialConditions.GetTransformation(Mode));
            D.Stretch = Stretch.Fill;

            Legend.Children.Add(D);
            if (condition != null) Condition = condition;
        }
        public StabilityDerivSimulationGUI(EditorSimManager simManager)
        {
            this.simManager = simManager;

            lonConditions = new InitialConditions(new string[] { "0", "0", "0", "0" }, new string[] { "w", "u", "q", "θ" }, new double[]{1, 1, Math.PI/180, Math.PI/180}, "0.01", "10");
            latConditions = new InitialConditions(new string[] { "0", "0", "0", "0" }, new string[] { "β", "p", "r", "φ" }, new double[]{Math.PI/180, Math.PI/180, Math.PI/180, Math.PI/180}, "0.01", "10");

            _graph.SetBoundaries(0, 10, 0, 2);
            _graph.SetGridScaleUsingValues(1, 0.25);
            _graph.horizontalLabel = "time";
            _graph.verticalLabel = "params";
            _graph.Update();
        }
Exemple #3
0
 public static PointMatrixPick CreatePickFromIC(InitialConditions IC,PointMatrixPick _pick)
 {
     PointMatrixPick Condition=new PointMatrixPick();
     Condition.Matrices = _pick.Matrices.ToList();
     Condition.Indices = new int[IC.Grid.CellGrid.GetLength(0), IC.Grid.CellGrid.GetLength(1)];
     for (int i = 0; i < IC.Grid.CellGrid.GetLength(0); i++)
     {
         for (int j = 0; j < IC.Grid.CellGrid.GetLength(1); j++)
         {
             Condition.Indices[i, j] = IC.Grid.CellGrid[i, j].Value >= Condition.Matrices.Count ? Condition.Matrices.Count - 1 : IC.Grid.CellGrid[i, j].Value;
         }
     }
     return Condition;
 }
Exemple #4
0
 public static InitialConditions CreateICFromPick(PointMatrixPick Condition)
 {
     var IC = new InitialConditions();
     var IG = new InitialConditionsGrid();
     IG.CellGrid = new InitialConditionCell[Condition.Indices.GetLength(0), Condition.Indices.GetLength(1)];
     for (int i = 0; i < Condition.Indices.GetLength(0); i++)
     {
         for (int j = 0; j < Condition.Indices.GetLength(1); j++)
         {
             IG.CellGrid[i, j] = new InitialConditionCell(i, j, Condition.Indices[i, j], Condition.Indices[i, j]);
         }
     }
     IC.Grid = IG;
     return IC;
 }
        private void DataInput(InitialConditions inits, StabilityDerivOutput vehicleData, bool longitudinal)
        {
            GUILayout.BeginHorizontal();
            for (int i = 0; i < inits.inits.Length; i++)
            {
                GUILayout.Label(Localizer.Format("FAREditorSimInit") + inits.names[i] + ": ");
                inits.inits[i] = GUILayout.TextField(inits.inits[i], GUILayout.ExpandWidth(true));
            }
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label(Localizer.Format("FAREditorSimEndTime"));
            inits.maxTime = GUILayout.TextField(inits.maxTime, GUILayout.ExpandWidth(true));
            GUILayout.Label(Localizer.Format("FAREditorSimTimestep"));
            inits.dt = GUILayout.TextField(inits.dt, GUILayout.ExpandWidth(true));
            if (GUILayout.Button(Localizer.Format("FAREditorSimRunButton"), GUILayout.Width(150.0F), GUILayout.Height(25.0F)))
            {
                for (int i = 0; i < inits.inits.Length; i++)
                {
                    inits.inits[i] = Regex.Replace(inits.inits[i], @"[^-?[0-9]*(\.[0-9]*)?]", "");
                }
                inits.maxTime = Regex.Replace(inits.maxTime, @"[^-?[0-9]*(\.[0-9]*)?]", "");
                inits.dt      = Regex.Replace(inits.dt, @"[^-?[0-9]*(\.[0-9]*)?]", "");

                double[] initCond = new double[inits.inits.Length];
                for (int i = 0; i < initCond.Length; i++)
                {
                    initCond[i] = Convert.ToDouble(inits.inits[i]) * inits.scaling[i];
                }


                GraphData data;
                if (longitudinal)
                {
                    data = simManager.StabDerivLinearSim.RunTransientSimLongitudinal(vehicleData, Convert.ToDouble(inits.maxTime), Convert.ToDouble(inits.dt), initCond);
                }
                else
                {
                    data = simManager.StabDerivLinearSim.RunTransientSimLateral(vehicleData, Convert.ToDouble(inits.maxTime), Convert.ToDouble(inits.dt), initCond);
                }

                UpdateGraph(data, Localizer.Format("FAREditorSimGraphTime"), Localizer.Format("FAREditorSimGraphParams"), 0, Convert.ToDouble(inits.maxTime), 50);
            }
            GUILayout.EndHorizontal();
        }
        public StabilityDerivSimulationGUI(EditorSimManager simManager)
        {
            this.simManager = simManager;

            lonConditions = new InitialConditions(new[] { "0", "0", "0", "0" },
                                                  new[] { "w", "u", "q", "θ" },
                                                  new[] { 1, 1, Math.PI / 180, Math.PI / 180 },
                                                  "0.01",
                                                  "10");
            latConditions = new InitialConditions(new[] { "0", "0", "0", "0" },
                                                  new[] { "β", "p", "r", "φ" },
                                                  new[] { Math.PI / 180, Math.PI / 180, Math.PI / 180, Math.PI / 180 },
                                                  "0.01",
                                                  "10");

            _graph.SetBoundaries(0, 10, 0, 2);
            _graph.SetGridScaleUsingValues(1, 0.25);
            _graph.horizontalLabel = Localizer.Format("FAREditorSimGraphTime");
            _graph.verticalLabel   = Localizer.Format("FAREditorSimGraphParams");
            _graph.Update();
        }
        void ReCreateCondition()
        {
            ResetScale();

            if (ComboBoxCopy.SelectedIndex < 0)
            {
                Condition = InitialConditions.GenerateRandom((int)RandomSize.Value, Mode, IsTwoState);
                return;
            }
            Condition =
                          _conditions[_conditionNames[ComboBoxCopy.SelectedIndex].Item2](
                          _conditionNames[ComboBoxCopy.SelectedIndex].Item2.Item2, (int)RandomSize.Value, Mode, IsTwoState);
        }
        private void Canvas_OnMouseWheel(object sender, MouseWheelEventArgs e)
        {
            if (Condition == null) return;
            var ic = Condition;
            var p = e.GetPosition(Canvas);
            var X = _x + _scale * p.X / (Canvas.Width / (ic.Grid.CellGrid.GetLength(0)));
            if (X >= ic.Grid.CellGrid.GetLength(0)) return;
            var Y = _y + _scale * p.Y / (Canvas.Height / (ic.Grid.CellGrid.GetLength(1)));
            if (Y >= ic.Grid.CellGrid.GetLength(1)) return;
            _scale += Math.Sign(-e.Delta)*0.1;
            if (_scale < 0.1) _scale = 0.1;
            if (_scale > 1) _scale = 1;

            var width = Condition.Grid.CellGrid.GetLength(0);
            var height = Condition.Grid.CellGrid.GetLength(1);
            var nwidth = (int) (width*_scale);
            var nheight = (int) (height*_scale);
            var x = (int) X - (nwidth/2);
            var y = (int) Y
                    - (nheight/2);
            var xx = (int) X + (nwidth/2);
            var yy = (int) Y + (nheight/2);

            if (xx >= width) x -= (xx - width) + 1;
            if (yy >= height) y -= (yy - height) + 1;
            if (x < 0) x = 0;
            if (y < 0) y = 0;
            _x = x;
            _y = y;
            Condition = ic;
        }
        private void Canvas_OnMouseDown(object sender, MouseButtonEventArgs e)
        {
            if (Operation.None == _selectedOperation) return;

            if(ComboBox.SelectedIndex<0) return;
            var p = e.GetPosition(Canvas);
            var ic = Condition;
            var x =_x + _scale*p.X/(Canvas.Width/(ic.Grid.CellGrid.GetLength(0)));
            if (x >= ic.Grid.CellGrid.GetLength(0) ) return;
            var y =_y + _scale*p.Y/(Canvas.Height/(ic.Grid.CellGrid.GetLength(1)));
            if (y >= ic.Grid.CellGrid.GetLength(1) ) return;
            if (Operation.Check == _selectedOperation)
            {
                ic.Grid.CellGrid[(int) x, (int) y].Value = InitialConditions.GetTransformation(Mode)(ComboBox.SelectedIndex);
            }
            else
            {
                var k = ic.Grid.CellGrid[(int) x, (int) y].Value;
                for(var i=0;i<ic.Grid.CellGrid.GetLength(0);i++)
                    for (var j = 0; j < ic.Grid.CellGrid.GetLength(1); j++)
                    {
                        if (ic.Grid.CellGrid[i, j].Value == k) ic.Grid.CellGrid[i, j].Value = InitialConditions.GetTransformation(Mode)(ComboBox.SelectedIndex);
                    }
            }
            Condition = ic;
        }
 private void Button_Click(object sender, RoutedEventArgs e)
 {
     ResetScale();
     Condition = InitialConditions.GenerateRandom((int)RandomSize.Value,Mode,IsTwoState);
     ComboBoxCopy.SelectedIndex = -1;
 }
        private void ButtonBase_OnClick1(object sender, RoutedEventArgs e)
        {
            var bf = new BinaryFormatter();
            var ofd = new OpenFileDialog
            {
                Filter = "Initial Condition File (*.cic)|*.cic",
                Multiselect = false
            };

            var result = ofd.ShowDialog();
            if (result.HasValue && result.Value)
            {
                var fs = new FileStream(ofd.FileName,FileMode.Open);
                var obj = bf.Deserialize(fs);
                Condition = obj as InitialConditions;
                fs.Close();
            }
        }
        private void DataInput(InitialConditions inits, StabilityDerivOutput vehicleData, bool longitudinal)
        {
            GUILayout.BeginHorizontal();
            for (int i = 0; i < inits.inits.Length; i++)
            {
                GUILayout.Label("Init " + inits.names[i] +": ");
                inits.inits[i] = GUILayout.TextField(inits.inits[i], GUILayout.ExpandWidth(true));
            }
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("End Time: ");
            inits.maxTime = GUILayout.TextField(inits.maxTime, GUILayout.ExpandWidth(true));
            GUILayout.Label("dt: ");
            inits.dt = GUILayout.TextField(inits.dt, GUILayout.ExpandWidth(true));
            if (GUILayout.Button("Run Simulation", GUILayout.Width(150.0F), GUILayout.Height(25.0F)))
            {
                for (int i = 0; i < inits.inits.Length; i++)
                {
                    inits.inits[i] = Regex.Replace(inits.inits[i], @"[^-?[0-9]*(\.[0-9]*)?]", "");
                }
                inits.maxTime = Regex.Replace(inits.maxTime, @"[^-?[0-9]*(\.[0-9]*)?]", "");
                inits.dt = Regex.Replace(inits.dt, @"[^-?[0-9]*(\.[0-9]*)?]", "");

                double[] initCond = new double[inits.inits.Length];
                for (int i = 0; i < initCond.Length; i++)
                {
                    initCond[i] = Convert.ToDouble(inits.inits[i]) * inits.scaling[i];
                }


                GraphData data;
                if(longitudinal)
                    data = simManager.StabDerivLinearSim.RunTransientSimLongitudinal(vehicleData, Convert.ToDouble(inits.maxTime), Convert.ToDouble(inits.dt), initCond);
                else
                    data = simManager.StabDerivLinearSim.RunTransientSimLateral(vehicleData, Convert.ToDouble(inits.maxTime), Convert.ToDouble(inits.dt), initCond);

                UpdateGraph(data, "time", "params", 0, Convert.ToDouble(inits.maxTime), 50);
            }
            GUILayout.EndHorizontal();
        }
Exemple #13
0
 private void Slider1_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
 {
     _ic = null;
     NotifyPropertyChanged("NoError");
     UpdateColors();
 }
Exemple #14
0
 private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
 {
     _ic = null;
     NotifyPropertyChanged("NoError");
     UpdateColors();
 }
Exemple #15
0
 private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
 {
     var ic = new InitialCondition(2+GetNeighboursCount((Neighbourhoods)NeighbourBox.SelectedItem,(int)Slider1.Value),_ic);
     var b = ic.ShowDialog();
     if (!b.HasValue || !b.Value) return;
     if (pointMatrix != null && ic.Condition.Grid.CellGrid.GetLength(0) != pointMatrix.Size)
     {
         AdvancedMatrixAccepted = false;
     }
     _ic = ic.Condition;
     NotifyPropertyChanged("NoError");
     NotifyPropertyChanged("NoAdvancedError");
 }
 public BacktrackingLineSearch(double[] InitialPoint, double Precision)
 {
     Data = new InitialConditions(InitialPoint, Precision);
 }