void M2MCH(double n, Object o) { M2M_CH MCH = new M2M_CH(); MCH.TheDensityOfBottomLevel = chc.TheDensityOfBottomLevel; MCH.ConvexHull((IPositionSet)o); }
void M2MPP(double n, Object o) { M2M_CH MCH = new M2M_CH(); MCH.TheDensityOfBottomLevel = chc.TheDensityOfBottomLevel; MCH.PreProcess((IPositionSet)o); }
private void m2MCHToolStripMenuItem_Click(object sender, EventArgs e) { //以下代码必须在UI线程中调用,即不能在另开的线程中调用 LayersExOptDlg layers = new LayersExOptDlg(); LayersPainterForm layersPainterForm = new LayersPainterForm(layers); LayersPaintedControl layersPaintedControl = layersPainterForm.LayersPaintedControl; LayersEditedControl layersEditedControl = new LayersEditedControl(); layersEditedControl.LayersPaintedControl = layersPaintedControl; layersPainterForm.Controls.Add(layersEditedControl); FlowControlerForm flowControlerForm = new FlowControlerForm(); layersPainterForm.MdiParent = this; layersPainterForm.WindowState = FormWindowState.Maximized; layersPainterForm.FormClosing += delegate { flowControlerForm.Close(); }; layersPainterForm.Show(); flowControlerForm.Show(layersPainterForm); //打开一个Worker线程来进行算法流程的演示(否则会阻塞UI线程以至于演示不能进行) IAsyncResult result = new dDemoProcess(delegate { M2M_CH m2m_CH = new M2M_CH(); //为对象的事件添加事件响应,以进行算法演示 AlgorithmDemo_M2M_CH algorithmDemo_M2M_CH = new AlgorithmDemo_M2M_CH(m2m_CH, layers, flowControlerForm, layersPaintedControl.Invalidate); m2m_CH.ConvexHull(positionSetContainer.GetPositionSet()); //结束演示(解除事件响应的绑定) algorithmDemo_M2M_CH.EndDemo(); }).BeginInvoke(null, null); }
void M2MQCH(double n, Object o) { M2M_CH MCH = new M2M_CH(); m2mch.QueryConvexHull(); }
protected void runDemo(IPositionSet set) { //以下代码必须在UI线程中调用,即不能在另开的线程中调用 LayersExOptDlg layers = new LayersExOptDlg(); LayersPainterForm layersPainterForm = new LayersPainterForm(layers); LayersPaintedControl layersPaintedControl = layersPainterForm.LayersPaintedControl; LayersEditedControl layersEditedControl = new LayersEditedControl(); layersEditedControl.Dock = DockStyle.Top; layersEditedControl.LayersPaintedControl = layersPaintedControl; layersPainterForm.Controls.Add(layersEditedControl); FlowControlerForm flowControlerForm = new FlowControlerForm(); layersPainterForm.Show(); flowControlerForm.Show(layersPainterForm); //新建或外部传入待演示对象 M2M_NN m2m_NN = new M2M_NN(); M2M_CH m2m_CH = new M2M_CH(); //打开一个Worker线程来进行算法流程的演示(否则会阻塞UI线程以至于演示不能进行) IAsyncResult result = new dDemoProcess(delegate { ////产生随机点集: //RandomPositionSet_InFixedDistribution randomPositionSet_InFixedDistribution = new RandomPositionSet_InFixedDistribution(); //randomPositionSet_InFixedDistribution.PointNum = 100000; //randomPositionSet_InFixedDistribution.DistributionStyle = distributionStyle.ClusterGaussianDistribution; //new ConfiguratedByForm(randomPositionSet_InFixedDistribution); //randomPositionSet_InFixedDistribution.Produce(); //编辑点集 Layer_PositionSet layer; if (set is IPositionSet_Connected) { layer = new Layer_PositionSet_Connected((IPositionSet_Connected)set); ((Layer_PositionSet_Connected)layer).Point.PointColor = Color.Yellow; ((Layer_PositionSet_Connected)layer).Point.PointRadius = 2; ((Layer_PositionSet_Connected)layer).Point.IsDrawPointBorder = true; } else { layer = new Layer_PositionSet_Point(set); ((Layer_PositionSet_Point)layer).Point.PointColor = Color.Yellow; ((Layer_PositionSet_Point)layer).Point.PointRadius = 2; ((Layer_PositionSet_Point)layer).Point.IsDrawPointBorder = true; } layer.EditAble = true; layers.Add(layer); layersPainterForm.Invalidate(); flowControlerForm.SuspendAndRecordWorkerThread(); //layers.Remove(layer); /////////////////////////////////////// //GetRandomPositionFromPositionSetRectangle getRandomPositionFromPositionSetRectangle //= new GetRandomPositionFromPositionSetRectangle(randomPositionSet_InFixedDistribution); ////对m2m_NN算法进行演示: ////为对象的事件添加事件响应,以进行算法演示 //AlgorithmDemo_M2M_NN algorithmDemo_M2M_NN = new AlgorithmDemo_M2M_NN(m2m_NN, layers, flowControlerForm, layersPaintedControl.Invalidate); ////以下代码与非演示状态一样。 //m2m_NN.PreProcess(randomPositionSet_InFixedDistribution); //m2m_NN.NearestNeighbor(layersPaintedControl.GetMouseDoubleChickedRealPosition()); //while (true) //{ // for (int i = layers.Count - 1; i >= 0; i--) // { // if ((layers[i].Name != "M2MStructure") && (layers[i].Name != "PositionSetOfComparedPoint")) // { // layers.Remove(layers[i]); // } // } // m2m_NN.NearestNeighbor(getRandomPositionFromPositionSetRectangle.Get()); //} ////结束演示(解除事件响应的绑定) //algorithmDemo_M2M_NN.EndDemo(); /////////////////////////////////////// //对m2m_CH算法进行演示: //为对象的事件添加事件响应,以进行算法演示 //AlgorithmDemo_M2M_CH algorithmDemo_M2M_CH = new AlgorithmDemo_M2M_CH(m2m_CH, layers, flowControlerForm, layersPaintedControl.Invalidate); //while (true) //{ // layers.Clear(); // //以下代码与非演示状态一样。 // m2m_CH.ConvexHull(randomPositionSet_InFixedDistribution.Produce()); //} ////结束演示(解除事件响应的绑定) //algorithmDemo_M2M_CH.EndDemo(); }).BeginInvoke(null, null); }
public AlgorithmDemo_M2M_CH(M2M_CH m2m_CH, Layers layers, FlowControlerForm flowControlerForm, dUpdate update) { this.m2m_CH = m2m_CH; this.layers = layers; this.flowControlerForm = flowControlerForm; this.Update = update; m2m_CH.GetM2MStructure += delegate(IM2MStructure m2mStructure) { this.m2mStructure = m2mStructure; }; m2m_CH.GetChildPositionSetInSpecificLevelOfConvexHull += delegate { if (representativeHullLayer != null) { representativeHullLayer.Visible = false; } if (convexHullLayer != null) { lock (layers) { convexHullLayer.Visible = false; } flowControlerForm.BeginInvoke(Update); flowControlerForm.SuspendAndRecordWorkerThread(); } }; m2m_CH.GetConvexHullPositionSetInSpecificLevel += delegate { if (linePartSetLayer != null) { lock (layers) { linePartSetLayer.Visible = false; BottonLevelPositionSetLayer.Visible = false; } flowControlerForm.BeginInvoke(Update); flowControlerForm.SuspendAndRecordWorkerThread(); } }; m2m_CH.GetRealConvexHull += delegate { if (representativeHullLayer != null) { lock (layers) { representativeHullLayer.Visible = false; } } if (convexHullLayer != null) { lock (layers) { convexHullLayer.Visible = false; } flowControlerForm.BeginInvoke(Update); flowControlerForm.SuspendAndRecordWorkerThread(); } }; IsGetM2MStructure = true; IsGetPositionSetToGetConvexHull = true; IsGetConvexHullPositionSetInSpecificLevel = true; IsGetRepresentativeHullInSpecificLevel = true; IsGetLinePositionSetInSpecificLevel = true; IsGetChildPositionSetInSpecificLevelOfConvexHull = true; IsGetRealConvexHull = true; m2m_CH.GetConvexHullPositionSetInSpecificLevel += delegate { if (childPositionSetOfConvexHullLayer != null) { lock (layers) { childPositionSetOfConvexHullLayer.Visible = false; } flowControlerForm.BeginInvoke(Update); flowControlerForm.SuspendAndRecordWorkerThread(); } }; m2m_CH.GetConvexHullPositionSetInSpecificLevel += delegate { if (convexHullLayer != null) { lock (layers) { convexHullLayer.ConvexHull.Visible = false; } flowControlerForm.BeginInvoke(Update); flowControlerForm.SuspendAndRecordWorkerThread(); } }; m2m_CH.GetRealConvexHull += delegate { if (linePartSetLayer != null) { lock (layers) { linePartSetLayer.Visible = false; BottonLevelPositionSetLayer.Visible = false; } flowControlerForm.BeginInvoke(Update); flowControlerForm.SuspendAndRecordWorkerThread(); } }; flowControlerForm.SelectConfiguratoinObject(this); flowControlerForm.SuspendAndRecordWorkerThread(); }
private void button1_Click(object sender, EventArgs e) { IConvexHullEngine convexhull; int n; switch (comboBox1.SelectedIndex) { case 0: convexhull = new GrahamScan(); break; case 1: //convexhull = new QuickHull(); convexhull = new M2M_CH(); break; default: return; } try { n = Int32.Parse(textBox1.Text); } catch (Exception) { return; } //Point[] ps = new Point[n]; PositionSetEdit_ImplementByICollectionTemplate ps = new PositionSetEdit_ImplementByICollectionTemplate(); Random r = new Random(DateTime.Now.Millisecond); //if (true) { int minx = (int)(pb.Width * 0.05); int miny = (int)(pb.Height * 0.05); for (int i = 0; i < n; i++) { int x = r.Next(minx, pb.Width - minx); int y = r.Next(miny, pb.Height - miny); //ps[i] = new Point(x, y); ps.AddPosition(new Position_Point(x, y)); System.Console.Write(x); System.Console.Write(","); System.Console.Write(y); System.Console.WriteLine(","); } System.Console.WriteLine(); } //else //{ // ps = testData(); //} IPositionSet convexPoints = convexhull.ConvexHull(ps); pb.Image = new Bitmap(pb.Width, pb.Height); Graphics g = Graphics.FromImage(pb.Image); convexPoints.InitToTraverseSet(); g.Clear(Color.White); /* * for (int i = 0; i < ps.Length; i++) * { * g.FillEllipse(Brushes.Black, ps[i].X - 2, pb.Height - ps[i].Y - 2, 4, 4); * g.DrawString("(" + ps[i].X + "," + ps[i].Y + ")", Font, Brushes.Blue, ps[i].X, pb.Height - ps[i].Y); * } * for (int i = 0; i < convexPoints.Length; i++) * { * if (i != convexPoints.Length - 1) * g.DrawLine(new Pen(Color.Green), new PointF(convexPoints[i].X, pb.Height - convexPoints[i].Y), new PointF(convexPoints[i + 1].X, pb.Height - convexPoints[i + 1].Y)); * else * { * g.DrawLine(new Pen(Color.Green), new PointF(convexPoints[i].X, pb.Height - convexPoints[i].Y), new PointF(convexPoints[0].X, pb.Height - convexPoints[0].Y)); * } * } * */ ps.InitToTraverseSet(); IPosition p = ps.GetPosition(); while (p != null) { g.FillEllipse(Brushes.Black, p.GetX() - 2, pb.Height - p.GetY() - 2, 4, 4); g.DrawString("(" + p.GetX() + "," + p.GetY() + ")", Font, Brushes.Blue, p.GetX(), pb.Height - p.GetY()); p = ps.GetPosition(); } IPosition p1 = convexPoints.GetPosition(); IPosition p2 = convexPoints.GetPosition(); while (p2 != null) { g.DrawLine(new Pen(Color.Green), new PointF(p1.GetX(), pb.Height - p1.GetY()), new PointF(p2.GetX(), pb.Height - p2.GetY())); p1 = p2; p2 = convexPoints.GetPosition(); } convexPoints.InitToTraverseSet(); p2 = convexPoints.GetPosition(); g.DrawLine(new Pen(Color.Green), new PointF(p1.GetX(), pb.Height - p1.GetY()), new PointF(p2.GetX(), pb.Height - p2.GetY())); }