開發了一個模塊,可用來計算平面一些點所構成的凸包。模塊名為ConvexHull.dll。
?
使用方法是這樣的,新建一個WinForm工程(控制臺工程也行,只是輸出結果不大直觀),引用ConvexHull.dll,然后在Form1代碼中引用模塊的命名空間:
?
?
?
模塊中包含一個類ConvexHull,用這個類聲明一個對象,然后用平面點的集合類(Points)實例化:
?

???????? private ?Points?p? = ? new ?Points();
????????????p.Add( new ?CGPoint( 10 ,? 10 ));
????????????p.Add( new ?CGPoint( 30 ,? 50 ));
????????????p.Add( new ?CGPoint( 10 ,? 30 ));
????????????p.Add( new ?CGPoint( 20 ,? 70 ));
????????????p.Add( new ?CGPoint( 30 ,? 20 ));
????????????p.Add( new ?CGPoint( 50 ,? 20 ));
????????????p.Add( new ?CGPoint( 50 ,? 30 ));
????????????p.Add( new ?CGPoint( 20 ,? 55 ));
????????????p.Add( new ?CGPoint( 60 ,? 10 ));
????????????ch? = ? new ?ConvexHull(p);
?
然后就可以調用ConvexHull的方法GetConvexHull()來獲取凸包了。這個方法返回一個Points對象,表示凸包頂點的集合。下面的代碼可以獲取凸包頂點。
?
????????????l? = ?ch.GetConvexHull();
?
為了測試結果是否正確,我們在窗體上繪制點集中所有的點,然后把凸包頂點用閉合的直線段連接起來。繪制的實現是在Form1的OnPaint方法中,可以參考《C#高級編程(第六版)》
?

????????????pointf? = ? new ?PointF[l.Count];
???????????? for ?( int ?i? = ? 0 ;?i? < ?l.Count;?i ++ )
????????????{
????????????????pointf[i]? = ? new ?PointF(l[i].X,?l[i].Y);
???????????? }
????????????Graphics?dc? = ?e.Graphics;
????????????Pen?redPen? = ? new ?Pen(Color.Red,? 3 );
????????????redPen.Brush? = ? new ?SolidBrush(Color.Red);
???????????? foreach ?(CGPoint?pt? in ?p)
????????????{
????????????????dc.FillEllipse(redPen.Brush,? new ?RectangleF(pt.X? - ? 2.5F ,?pt.Y? - ? 2.5F ,? 5 ,? 5 ));
????????????}
????????????Pen?bluePen? = ? new ?Pen(Color.Blue,? 2 );
????????????dc.DrawPolygon(bluePen,?pointf);
?
測試結果如下圖所示。
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
