• 凸包计算模块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

  • 相关阅读:
    编写通用shell脚本启动java项目,适用于多数服务,只需修改服务名即可
    linux操作系统安装jdk
    搭建dubbo+zookeeper+dubboadmin分布式服务框架(windows平台下)
    二.传统服务的拆分策略
    一.把传统服务做成dubbo分布式服务架构的步骤
    Android IOS WebRTC 音视频开发总结(六)-- iOS开发之含泪经验
    Android WebRTC 音视频开发总结(五)-- webrtc开发原型
    Android WebRTC 音视频开发总结(四)-- webrtc传输模块
    Android WebRTC 音视频开发总结(三)-- 信令服务和媒体服务
    Android WebRTC 音视频开发总结(二)-- webrtcdemo介绍
  • 原文地址:https://www.cnblogs.com/yxsylyh/p/UsingConvexHull.html
Copyright © 2020-2023  润新知