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


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

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

    using Hiquotion.ComputingGeometry;

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

    实例化
            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对象,表示凸包顶点的集合。下面的代码可以获取凸包顶点。

            private Points l = new List<CGPoint>();
                l 
    = ch.GetConvexHull();

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

    测试
            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);

    测试结果如下图所示。

     


    作者:海阔天

    欢迎转载!转载请注明出处:

    www.cnblogs.com/yxsylyh

  • 相关阅读:
    jQuery CVE-2019-11358原型污染漏洞分析和修复建议
    IIS中配置访问HTTPS
    如何把网址配置为http和https可以同时访问
    C#获取一周的工作日显示(星期几)
    Oracle查询数据库中所有表的记录数
    发布WebApi项目时,提示未包含binyourDocumentationFile.xml文档文件
    IntelliJ Idea 配置Tomcat提示Port is not specified
    C# 属性(Property)和字段(Field)的区别
    IDEA 出现错误:找不到或无法加载主类
    C# Enum 类型遍历
  • 原文地址:https://www.cnblogs.com/yxsylyh/p/UsingConvexHull.html
Copyright © 2020-2023  润新知