Пример #1
0
        //public IPositionSet GetRamSet(int wRank, int hRank)
        //{
        //    List<IPosition> lst = new List<IPosition>();
        //    Position_Point ipos = null;
        //    for (int i = 0; i < 100; i++)
        //    {
        //        ipos = new Position_Point();
        //        ipos.SetX(RandomMakerAlgorithm.RandomMaker.RapidBetween(0, wRank));
        //        ipos.SetY(RandomMakerAlgorithm.RandomMaker.RapidBetween(0, hRank));
        //        lst.Add(ipos);
        //    }
        //    PositionSetEdit_ImplementByICollectionTemplate pSet = new PositionSetEdit_ImplementByICollectionTemplate(lst);
        //    return pSet;
        //}

        //public IPositionSet GetRamSet2()
        //{
        //    List<IPosition> lst = new List<IPosition>();
        //    Position_Point ipos = null;
        //    ipos = new Position_Point();
        //    ipos.SetX(10);
        //    ipos.SetY(20);
        //    lst.Add(ipos);
        //    ipos = new Position_Point();
        //    ipos.SetX(50);
        //    ipos.SetY(70);
        //    lst.Add(ipos);
        //    ipos = new Position_Point();
        //    ipos.SetX(50);
        //    ipos.SetY(90);
        //    lst.Add(ipos);
        //    ipos = new Position_Point();
        //    ipos.SetX(25);
        //    ipos.SetY(30);
        //    lst.Add(ipos);
        //    PositionSetEdit_ImplementByICollectionTemplate pSet = new PositionSetEdit_ImplementByICollectionTemplate(lst);
        //    return pSet;
        //}

        private void button1_Click(object sender, EventArgs e)
        {
            //painterDialog.Reset();
            painterDialog.HoldOnMode();

            //        RandomPositionSet_InFixedDistribution randomPositionSet1 = new RandomPositionSet_InFixedDistribution
            //(10000, distributionStyle.GaussianDistribution);
            //        new ConfiguratedByForm(randomPositionSet1);
            //        randomPositionSet1.Produce();

            //        RandomPositionSet_InFixedDistribution randomPositionSet2 = new RandomPositionSet_InFixedDistribution
            //            (10000, distributionStyle.LaplaceDistribution);
            //        new ConfiguratedByForm(randomPositionSet2);
            //        randomPositionSet2.Produce();

            //        M2MSCreater_ForGeneralM2MStruture m2m_Creater_ForGeneralM2MStruture = new M2MSCreater_ForGeneralM2MStruture();
            //        IM2MStructure m2mStructure = m2m_Creater_ForGeneralM2MStruture.Create(randomPositionSet2);
            //        m2mStructure.Preprocessing(randomPositionSet2);

            painterDialog.Clear();
            //painterDialog.DrawPositionSet(randomPositionSet1);
            //painterDialog.DrawPositionSet(randomPositionSet2);
            //painterDialog.DrawM2MLevel(m2mStructure.GetLevel(m2mStructure.GetLevelNum() - 1));
            //painterDialog.DrawM2MStructure(m2mStructure);
            //Layer_PositionSet layer = new Layer_PositionSet_Point(GetRamSet2());
            //layer.SetPositionSetTransformByM2MLevel(m2mStructure.GetLevel(m2mStructure.GetLevelNum() - 1));

            PositionSet_Connected_Config config = new PositionSet_Connected_Config();

            new ConfiguratedByForm(config);
            List <IPosition_Connected_Edit> list = RandomPositionList.generateRandomFloatPositions(config);
            IPositionSet_Connected          pSet = new PositionSet_Connected(list);

            painterDialog.DrawPositionSet_Connected(pSet);

            painterDialog.Show();

            //painterDialog.Clear();
            //painterDialog.DrawPath(GetRamSet(1000, 800));
            //painterDialog.DrawPositionSet(GetRamSet(500, 400));
            //painterDialog.DrawConvexHull(GetRamSet2());
            //painterDialog.DrawSquareFrame(GetRamSet(500, 400));
            //painterDialog.Show();

            //painterDialog.Reset();
        }
Пример #2
0
        private void TestForViewer(object sender, EventArgs e)
        {
            painterDialog.Show();

            painterDialog.Reset();
            painterDialog.HoldOnMode();

            RandomPositionSet_InFixedDistribution randomPositionSet1 = new RandomPositionSet_InFixedDistribution
                                                                           (10000, distributionStyle.GaussianDistribution);

            new ConfiguratedByForm(randomPositionSet1);
            randomPositionSet1.Produce();

            RandomPositionSet_InFixedDistribution randomPositionSet2 = new RandomPositionSet_InFixedDistribution
                                                                           (10000, distributionStyle.LaplaceDistribution);

            new ConfiguratedByForm(randomPositionSet2);
            randomPositionSet2.Produce();

            M2MSCreater_ForGeneralM2MStruture m2m_Creater_ForGeneralM2MStruture = new M2MSCreater_ForGeneralM2MStruture();
            IM2MStructure m2mStructure = m2m_Creater_ForGeneralM2MStruture.CreateAutomatically(randomPositionSet2);

            m2mStructure.Preprocessing(randomPositionSet2);

            painterDialog.Clear();
            painterDialog.DrawPositionSet(randomPositionSet1);
            painterDialog.DrawPositionSet(randomPositionSet2);
            painterDialog.DrawM2MLevel(m2mStructure.GetLevel(m2mStructure.GetLevelNum() - 1));
            painterDialog.DrawM2MStructure(m2mStructure);
            Layer_PositionSet layer = new Layer_PositionSet_Point(GetRamSet2());

            layer.SetPositionSetTransformByM2MLevel(m2mStructure.GetLevel(m2mStructure.GetLevelNum() - 1));
            //painterDialog.Painter.Layers.Add(layer);
            painterDialog.Show();

            painterDialog.Clear();
            painterDialog.DrawPath(GetRamSet(1000, 800));
            painterDialog.DrawPositionSet(GetRamSet(500, 400));
            painterDialog.DrawConvexHull(GetRamSet2());
            painterDialog.DrawSquareFrame(GetRamSet(500, 400));
            painterDialog.Show();

            painterDialog.Reset();
        }
Пример #3
0
        private void button1_Click(object sender, EventArgs e)
        {
            PainterDialog painterDialog = new PainterDialog();

            distributionStyle dStyle = distributionStyle.Uniform;
            int pointNum             = 10000;

            RandomPositionSet_InFixedDistribution randomPositionSet = new RandomPositionSet_InFixedDistribution(pointNum, dStyle);

            //new ConfiguratedByForm(randomPositionSet);
            randomPositionSet.ConfiguratedByGUI();
            randomPositionSet.Produce();

            painterDialog.Clear();
            painterDialog.DrawPositionSet(randomPositionSet);
        }
Пример #4
0
        public static void lanch(IConvexHullEngine chEngine, IPositionSet ps)
        {
            PainterDialog painterDialog = new PainterDialog();

            //求解凸包并作图
            IPositionSet cps = chEngine.ConvexHull(ps);

            painterDialog.FillPolygon = true;
            painterDialog.Clear();
            painterDialog.DrawPositionSet(ps);
            painterDialog.DrawConvexHull(cps);
            painterDialog.Show();

            //测试凸包正确性
            report = new CHTestAndReport();
            ConvexHullCompare CHCompare = new ConvexHullCompare(ps, cps, (new QuickHull()).ConvexHull(ps));

            CHCompare.Compare();
            report.content = CHCompare.GetReport();
            report.Show();
        }
Пример #5
0
        private void button1_Click(object sender, EventArgs e)
        {
            PainterDialog painterDialog = new PainterDialog();

            RandomPositionSet_InFixedDistribution randomPositionSet = new RandomPositionSet_InFixedDistribution();

            new ConfiguratedByForm(randomPositionSet);
            randomPositionSet.Produce();

            QuickHull    quickHull  = new QuickHull();
            IPositionSet convexHull = quickHull.ConvexHull(randomPositionSet);

            painterDialog.Clear();
            painterDialog.DrawConvexHull(convexHull);

            IPosition        p  = PositionSetAttribute.GetGravityCenter(convexHull);
            List <IPosition> pl = new List <IPosition>();

            pl.Add(p);
            painterDialog.DrawPath(new PositionSet_ImplementByIEnumerableTemplate(pl));
        }
Пример #6
0
        private void ShowLine()
        {
            IWriteLineInGridEngine writeLineInGridEngine = new Line2Block();
            //IWriteLineInGridEngine writeLineInGridEngine = new Line2Block();

            IPositionSet line = writeLineInGridEngine.WriteLineInGrid(configurationForWriteLineInGridAlgorithm.GridWidth,
                                                                      configurationForWriteLineInGridAlgorithm.GridHeight,
                                                                      configurationForWriteLineInGridAlgorithm.StartPosition,
                                                                      configurationForWriteLineInGridAlgorithm.EndPosition);

            painterDialog.Clear();
            painterDialog.Layers.Add(new Layer_Grid(10, 10, configurationForWriteLineInGridAlgorithm.GridWidth,
                                                    configurationForWriteLineInGridAlgorithm.GridHeight, 0, 0));

            IPositionSetEdit startAndEnd = new PositionSetEdit_ImplementByICollectionTemplate();

            startAndEnd.AddPosition(configurationForWriteLineInGridAlgorithm.StartPosition);
            startAndEnd.AddPosition(configurationForWriteLineInGridAlgorithm.EndPosition);

            painterDialog.HoldOnMode();
            painterDialog.SetShowModeToForm();

            if (line != null)
            {
                Layer_PositionSet_Point layer = new Layer_PositionSet_Point(line);
                layer.Point.PointRadius = 2;
                layer.Point.PointColor  = Color.Blue;
                painterDialog.Layers.Add(layer);
            }

            Layer_PositionSet_Path layer2 = new Layer_PositionSet_Path((IPositionSet)startAndEnd);

            layer2.PathLine.LineWidth = 2;
            layer2.PathLine.LineColor = Color.Red;
            painterDialog.Layers.Add(layer2);

            painterDialog.Show();
        }
Пример #7
0
        public static void lanch(IConvexHullEngine chEngine, int pointCount, float min, float max)
        {
            //求解凸包并作图
            //IPositionSet ps = testData();
            IPositionSet ps = new RandomPositionSet(pointCount, min, max);

            //System.Console.Out.WriteLine("position set:");
            //printPositionSet(ps);
            IPositionSet cps = chEngine.ConvexHull(ps);

            //System.Console.Out.WriteLine("Jarvis Match:");
            //printPositionSet(cps);
            PainterDialog.Clear();
            PainterDialog.DrawPositionSet(ps);
            PainterDialog.DrawConvexHull(cps);
            PainterDialog.Show();


            AnalyzeReport report = new AnalyzeReport();

            //测试点集引用
            cps.InitToTraverseSet();
            ps.InitToTraverseSet();
            bool correct = true;

            while (correct && cps.NextPosition())
            {
                IPosition cp   = cps.GetPosition();
                bool      find = false;
                ps.InitToTraverseSet();
                while (!find && ps.NextPosition())
                {
                    IPosition p = ps.GetPosition();
                    if (cp == p)
                    {
                        find = true;
                    }
                }
                if (!find)
                {
                    correct = false;
                }
            }
            report.content += "引用测试:" + (correct ? "正确" : "错误") + "\n";

            //测试凸包
            if (correct)
            {
                report.content += "凸包正确性测试:\n";
                IPositionSet cps_ref = (new QuickHull()).ConvexHull(ps);
                //    System.Console.Out.WriteLine("Quick Hull:");
                //    printPositionSet(cps_ref);
                IPosition[] cpa     = (IPosition[])(cps.ToArray());
                IPosition[] cpa_ref = (IPosition[])(cps_ref.ToArray());
                if (cpa.Length != cpa_ref.Length)
                {
                    report.content += "数目不等";
                    correct         = false;
                }
                if (correct)
                {
                    int n = cpa.Length;
                    int m = 0;
                    int p = 0;
                    for (; p < n; p++)
                    {
                        if (cpa[0] == cpa_ref[p])
                        {
                            break;
                        }
                    }
                    if (p == n)
                    {
                        correct         = false;
                        report.content += "发生错误!";
                    }
                    if (correct)
                    {
                        for (int i = 0; i < n; i++)
                        {
                            if (cpa[i] == cpa_ref[(p + i + n) % n])
                            {
                                m++;
                            }
                        }
                        int tm = 0;
                        for (int i = 0; i < n; i++)
                        {
                            if (cpa[i] == cpa_ref[(p - i + n) % n])
                            {
                                tm++;
                            }
                        }
                        if (tm > m)
                        {
                            m = tm;
                        }
                        report.content += "正确率:" + m.ToString() + "/" + n.ToString();
                        if (m == n)
                        {
                            report.content += "正确!";
                        }
                        else
                        {
                            report.content += "不正确!";
                        }
                    }
                }
            }
            report.Show();
        }