Exemple #1
0
        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]);
            }
        }
Exemple #4
0
        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]);
            }
        }
Exemple #5
0
        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);
        }