凸包计算模块ConvexHull的使用方法

本文介绍了一个用于计算平面点集凸包的模块ConvexHull.dll。该模块可通过Visual Studio等IDE进行集成,并提供了简单易用的API。通过实例化ConvexHull类并调用GetConvexHull()方法即可获取点集的凸包。文中还提供了绘制凸包顶点的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发了一个模块,可用来计算平面一些点所构成的凸包。模块名为ConvexHull.dll。

 

使用方法是这样的,新建一个WinForm工程(控制台工程也行,只是输出结果不大直观),引用ConvexHull.dll,然后在Form1代码中引用模块的命名空间:

 

<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->using Hiquotion.ComputingGeometry;

 

 

模块中包含一个类ConvexHull,用这个类声明一个对象,然后用平面点的集合类(Points)实例化:

 

实例化
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->        private ConvexHull ch;

        
private Points p = new Points();

            p.Add(
new CGPoint(1010));
            p.Add(
new CGPoint(3050));
            p.Add(
new CGPoint(1030));
            p.Add(
new CGPoint(2070));
            p.Add(
new CGPoint(3020));
            p.Add(
new CGPoint(5020));
            p.Add(
new CGPoint(5030));
            p.Add(
new CGPoint(2055));
            p.Add(
new CGPoint(6010));

            ch 
= new ConvexHull(p);

 

然后就可以调用ConvexHull的方法GetConvexHull()来获取凸包了。这个方法返回一个Points对象,表示凸包顶点的集合。下面的代码可以获取凸包顶点。

 

<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->        private Points l = new List<CGPoint>();
            l 
= ch.GetConvexHull();

 

为了测试结果是否正确,我们在窗体上绘制点集中所有的点,然后把凸包顶点用闭合的直线段连接起来。绘制的实现是在Form1的OnPaint方法中,可以参考《C#高级编程(第六版)》

 

测试
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->        private PointF[] pointf;

            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.5F55));
            }
            Pen bluePen 
= new Pen(Color.Blue, 2);
            dc.DrawPolygon(bluePen, pointf);

 

测试结果如下图所示。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值