开发了一个模块,可用来计算平面一些点所构成的凸包。模块名为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(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对象,表示凸包顶点的集合。下面的代码可以获取凸包顶点。
<!--<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.5F, 5, 5));
}
Pen bluePen = new Pen(Color.Blue, 2);
dc.DrawPolygon(bluePen, pointf);
测试结果如下图所示。
分享到:
相关推荐
凸面船体 该模块提供了确定一组地理坐标(纬度和经度)的凸包的功能。 单位应以度为单位。 返回值是经度和纬度坐标的数组。...var convexHull = calculateConvexHull ( points ) ; 归因 从这里进行最小的修改: :
在这个例子中,我们生成了一个随机的二维点集,然后使用`ConvexHull`函数计算了这些点的凸包。`vertices`属性则包含了构成凸包的所有顶点索引。 接下来,我们将讨论如何将这个计算过程可视化。在Python中,...
资源中提供的详细说明文档应该涵盖了如何安装和配置CGAL库,如何导入和使用相关模块,以及如何编写C++代码进行凸包计算的实例。通过阅读和理解这份文档,你可以学习到如何将CGAL库集成到自己的项目中,以及如何根据...
该模块是各种凸包模块的包装器,它公开了一个简单的接口,用于计算任何维度的点集的凸包。 例子 var ch = require ( 'convex-hull' ) var points = [ [ 0 , 0 ] , [ 1 , 0 ] , [ 0 , 1 ] , [ 0.15 , 0.15 ] , ...
处理这些退化更昂贵,因此如果您不需要这种行为,您应该使用常规convex-hull模块。 例子 var convexHull = require ( 'full-convex-hull' ) var points = [ [ 1 , 0 , 0 ] , [ 0 , 1 , 0 ] , [ 1 , 1 , 0 ] , [ 5 ...
5. 凸包计算模块:计算物体的凸包并确定中心。 6. 显著性检测模块:结合凸包中心先验优化显著区域,输出最终的显著性地图。 在实际应用中,GR算法不仅可以用于图像分析,还可以扩展到视频处理、人机交互、广告设计...
凸包(Convex Hull)是指在一个二维平面上,由给定的一组点构成的最小多边形,该多边形包含了所有的点且具有凸性,即任意两点间的线段均在多边形内部或边界上。常见的凸包算法有 Graham's Scan、 Jarvis March( ...
3. **运算模块**:实现凸包计算的核心算法——Graham扫描法。 4. **输出模块**:将计算结果输出到控制台或图形界面。 **2.2 数据及数据类定义** 为了实现上述功能,报告中提到了以下几个关键的数据结构定义: 1. *...
在这里,“NX8_hull”可能是指使用C#实现的与Siemens' NX 8相关的凸包计算模块,可能用于分析和处理从NX导出的几何数据。 在源代码中,我们可能会看到以下关键部分: 1. 数据结构:用于存储点集的类或结构体,通常...
- 在作业23中,我们使用`scipy.spatial.ConvexHull`来计算三维点集的凸包。这个函数接受一个3D数组,返回一个包含凸包顶点的结构。然后,我们可以用`tvtk`库来生成可视化: ```python from scipy.spatial import ...
Scipy的spatial模块提供了ConvexHull类,可以快速计算一组点的凸包。我们可以使用matplotlib库将这个凸包描绘出来。对于三维空间,凸包会形成一个凸多面体,每个面都是一个三角形。同样,Scipy能计算出这些面,并且...
函数的输入参数可能包括点的坐标矩阵以及一些可选参数,如是否使用凸包计算等。 6. **错误处理**:一个完整的函数应该考虑到可能的错误情况,例如输入数据是否为正确的维度,点的数量是否小于 2 等,并提供相应的...
- **计算凸包**:使用 `convexHull()` 函数。 - **应用实例**:手指计数、手势识别等。 ##### 3.22 创建轮廓的边界框和圆 - **边界框**:使用 `boundingRect()` 函数计算轮廓的外接矩形。 - **边界圆**:使用 `...
- **实现方法:** 使用`fitEllipse`进行椭圆拟合,使用`convexHull`进行凸包检测。 #### 总结 本文档提供了OpenCV中一系列实用的例程,涵盖从基本的图像和视频处理到高级的目标检测和追踪等功能。通过对这些例程的...
2. **凸包算法**: 凸包(Convex Hull)是几何学中的一个重要概念,它是指一个多边形内包含所有点的最小多边形边界。在cgkotlin项目中,可能使用了Graham扫描、Jarvis步进法或Andrew算法等常见的凸包算法。这些算法在...
接着,使用`Polygon`类将这些坐标转换为Python四边形对象,并通过`.convex_hull`属性获取每个四边形的凸包,确保四边形顺序正确。 计算IoU的步骤如下: 1. 首先,我们需要确定两个四边形是否相交。这可以通过调用`...
5. **聚类**:通过EuclideanClusterExtraction(欧氏聚类)或ConvexHull(凸包)等方法,可以将点云分割成不同的对象或区域。 6. **估计法线**:PCL提供了估计点云法线的算法,如NormalEstimation,这对于表面分析...
- **凸包计算**:如 `ConvexHull` 类。 这些功能在地理信息系统、计算机视觉等领域中非常有用。 #### 十三、统计 (scipy.stats) `scipy.stats` 提供了广泛的统计工具,包括: - **连续分布**:如正态分布 (`norm`)...
- **3.3.10 ConvexHull**:绘制图像中物体的凸包。 - **3.3.11 Skeleton**:提取图像的骨架,即图像的主要结构。 - **3.3.12 Separation**:分离相互接触的对象。 - **3.3.13 ParticleFilter2**:过滤特定形状和大小...