private void btn_pathInit_Click(object sender, RoutedEventArgs e) { int t_int; double t_double; blocker_cnt = int.TryParse(txt_blockers.Text, out t_int) ? t_int : blocker_cnt; blocker_segs = int.TryParse(txt_segs.Text, out t_int) ? t_int : blocker_segs; attempts = int.TryParse(txt_attempts.Text, out t_int) ? t_int : attempts; tau = double.TryParse(txt_tau.Text, out t_double) ? t_double : tau; tauM = double.TryParse(txt_tauM.Text, out t_double) ? t_double : tauM; mu = double.TryParse(txt_mu.Text, out t_double) ? t_double : mu; ceil = double.TryParse(txt_ceil.Text, out t_double) ? t_double : ceil; ceilby = int.TryParse(txt_ceilby.Text, out t_int) ? t_int : ceilby; seed = int.TryParse(txt_seed.Text, out t_int) ? t_int : seed; btn_pathStep.IsEnabled = true; blocker_cntrs = new Point[blocker_cnt]; blocker_rads = new double[blocker_cnt]; mainCanvas.ClearCanvas(); ExUtility.SetSeed(seed); double width = mainCanvas.Width; for (int i = 0; i < blocker_rads.Length; i++) { blocker_rads[i] = ExUtility.RandRange(width / 10, width / 6); blocker_cntrs[i] = new Point(ExUtility.RandRange(blocker_rads[i], width - blocker_rads[i]), ExUtility.RandRange(blocker_rads[i], width - blocker_rads[i])); mainCanvas.DrawCircle(Colors.LightSalmon, Colors.LightSalmon, 0, blocker_cntrs[i], blocker_rads[i]); } }
private void btn_circInit_Click(object sender, RoutedEventArgs e) { int t_int; double t_double; circ_cnt = int.TryParse(txt_circleCnt.Text, out t_int) ? t_int : circ_cnt; attempts = int.TryParse(txt_attempts.Text, out t_int) ? t_int : attempts; tau = double.TryParse(txt_tau.Text, out t_double) ? t_double : tau; tauM = double.TryParse(txt_tauM.Text, out t_double) ? t_double : tauM; mu = double.TryParse(txt_mu.Text, out t_double) ? t_double : mu; ceil = double.TryParse(txt_ceil.Text, out t_double) ? t_double : ceil; ceilby = int.TryParse(txt_ceilby.Text, out t_int) ? t_int : ceilby; seed = int.TryParse(txt_seed.Text, out t_int) ? t_int : seed; circ_cntrs = new Point[circ_cnt]; circ_rads = new double[circ_cnt]; btn_circStep.IsEnabled = true; mainCanvas.ClearCanvas(); ExUtility.SetSeed(seed); double width = mainCanvas.Width; for (int i = 0; i < circ_rads.Length; i++) { circ_rads[i] = ExUtility.RandRange(width / 20, width / 6); circ_cntrs[i] = new Point(ExUtility.RandRange(circ_rads[i], width - circ_rads[i]), ExUtility.RandRange(circ_rads[i], width - circ_rads[i])); mainCanvas.DrawCircle(Colors.LightSalmon.Fade(127), Colors.Gray, 2, circ_cntrs[i], circ_rads[i]); } }
private void btn_collideInit_Click(object sender, RoutedEventArgs e) { SetParameters(); btn_collidePreStep.IsEnabled = true; btn_collideStep.IsEnabled = true; double width = mainCanvas.Width; mainCanvas.ClearCanvas(); ExUtility.SetSeed(col_seed); startPos = new Point[col_cnt]; endPos = new Point[col_cnt]; startVel = new Point[col_cnt]; endVel = new Point[col_cnt]; List <Vector> disks = ExUtility.PoissonDiskSample(width * 0.8, col_dmin + 2, 30); disks.Shuffle(); if (disks.Count < 2 * col_cnt) { return; } int cnt = 0; // x [obj] [time] [x,y,vx,vy] for (int i = 0; i < col_cnt; i++) { startPos[i] = new Point(width * 0.1 + disks[cnt].X, width * 0.1 + disks[cnt].Y); cnt++; endPos[i] = new Point(width * 0.1 + disks[cnt].X, width * 0.1 + disks[cnt].Y); cnt++; startVel[i] = new Point(ExUtility.RandRange(-col_velrng, col_velrng), ExUtility.RandRange(-col_velrng, col_velrng)); endVel[i] = new Point(ExUtility.RandRange(-col_velrng, col_velrng), ExUtility.RandRange(-col_velrng, col_velrng)); Point s1 = startPos[i]; Point e1 = new Point(s1.X + startVel[i].X, s1.Y + startVel[i].Y); Point s2 = endPos[i]; Point e2 = new Point(s2.X + endVel[i].X, s2.Y + endVel[i].Y); mainCanvas.DrawEdges(Colors.ForestGreen, 2, new Tuple <Point, Point>(s1, e1)); mainCanvas.DrawEdges(Colors.Orange, 2, new Tuple <Point, Point>(s2, e2)); mainCanvas.DrawPoints(Colors.ForestGreen, 8, startPos[i]); mainCanvas.DrawPoints(Colors.Orange, 8, endPos[i]); } }
private void btn_polyInit_Click(object sender, RoutedEventArgs e) { mainCanvas.ClearCanvas(); int t_int; double t_double; poly_cnt = int.TryParse(txt_polyCnt.Text, out t_int) ? t_int : poly_cnt; poly_tri_cnt = int.TryParse(txt_polyTriCnt.Text, out t_int) ? t_int : poly_tri_cnt; attempts = int.TryParse(txt_attempts.Text, out t_int) ? t_int : attempts; tau = double.TryParse(txt_tau.Text, out t_double) ? t_double : tau; tauM = double.TryParse(txt_tauM.Text, out t_double) ? t_double : tauM; mu = double.TryParse(txt_mu.Text, out t_double) ? t_double : mu; ceil = double.TryParse(txt_ceil.Text, out t_double) ? t_double : ceil; ceilby = int.TryParse(txt_ceilby.Text, out t_int) ? t_int : ceilby; seed = int.TryParse(txt_seed.Text, out t_int) ? t_int : seed; btn_polyStep.IsEnabled = true; double width = mainCanvas.Width; polys = new Mesh[poly_cnt]; ExUtility.SetSeed(seed); for (int i = 0; i < poly_cnt; i++) { Triangle[] ts = new Triangle[poly_tri_cnt]; ts[0] = new Triangle(new Point(ExUtility.RandRange(0, width), ExUtility.RandRange(0, width)), new Point(ExUtility.RandRange(0, width), ExUtility.RandRange(0, width)), new Point(ExUtility.RandRange(0, width), ExUtility.RandRange(0, width))); for (int j = 1; j < ts.Length; j++) { ts[j] = new Triangle(new Point(ts[j - 1].points[1].X, ts[j - 1].points[1].Y), new Point(ts[j - 1].points[2].X, ts[j - 1].points[2].Y), new Point(ExUtility.RandRange(0, width), ExUtility.RandRange(0, width))); } polys[i] = new Mesh(ts); } ExUtility.SetSeed(245); for (int i = 0; i < polys.Length; i++) { int[] cs = ExUtility.RandomInts(0, 255, 3); DrawMeshes(mainCanvas, Color.FromRgb((byte)cs[0], (byte)cs[1], (byte)cs[2]), Color.FromRgb((byte)cs[0], (byte)cs[1], (byte)cs[2]), 1, polys[i]); } }
private void btn_phaseInit_Click(object sender, RoutedEventArgs e) { int t_int; double t_double; phase_length = int.TryParse(txt_len.Text, out t_int) ? t_int : phase_length; phase_obsmult = double.TryParse(txt_fact.Text, out t_double) ? t_double : phase_obsmult; attempts = int.TryParse(txt_attempts.Text, out t_int) ? t_int : attempts; tau = double.TryParse(txt_tau.Text, out t_double) ? t_double : tau; tauM = double.TryParse(txt_tauM.Text, out t_double) ? t_double : tauM; mu = double.TryParse(txt_mu.Text, out t_double) ? t_double : mu; ceil = double.TryParse(txt_ceil.Text, out t_double) ? t_double : ceil; ceilby = int.TryParse(txt_ceilby.Text, out t_int) ? t_int : ceilby; seed = int.TryParse(txt_seed.Text, out t_int) ? t_int : seed; btn_phaseStep.IsEnabled = true; mainCanvas.ClearCanvas(); double width = mainCanvas.Width; ExUtility.SetSeed(seed); phase_signal = new Point[phase_length]; for (int i = 0; i < phase_length; i++) { phase_signal[i] = new Point(ExUtility.RandRange(-1, 1), ExUtility.RandRange(-1, 1)); } double maxN = phase_signal.Max(p => ExUtility.NormComplex(p.X, p.Y)); Point[] pts = new Point[phase_length]; for (int i = 0; i < phase_length; i++) { pts[i] = new Point(i / (double)(phase_length - 1) * width, (ExUtility.NormComplex(phase_signal[i].X, phase_signal[i].Y) - maxN / 2) * width * 0.25 + width / 2); } mainCanvas.DrawPath(Colors.DarkSlateBlue, Colors.LightSteelBlue, 5, 2, pts); }