zoukankan      html  css  js  c++  java
  • 凸包计算模块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

  • 相关阅读:
    c++ stl algorithm: std::find, std::find_if
    mysql---多表关联
    使用hadoop命令rcc生成Record 一个简单的方法来实现自己的定义writable对象
    Nexon由Xsolla全球支付服务
    configure.ac:20: error: Autoconf version 2.65 or higher is required
    的无线通信网络的学习LTE的关键技术HARQ(20141217)
    JAVA 公众微信的开放源码项目管理合作伙伴招募的版本号
    【工具】JAVA 在单元读取文件并比较
    linux下如何编译python生成libpython2.5.so动态库
    将主机IDS OSSEC日志文件存入MYSQL的方法
  • 原文地址:https://www.cnblogs.com/yxsylyh/p/UsingConvexHull.html
Copyright © 2011-2022 走看看