/// <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(); }
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; }
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(); }
private void Slider1_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) { _ic = null; NotifyPropertyChanged("NoError"); UpdateColors(); }
private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { _ic = null; NotifyPropertyChanged("NoError"); UpdateColors(); }
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); }