小编Aar*_*ely的帖子

多边形分解 - 去除凹点以形成凸多边形

我想解析以蓝色显示的以下多边形,从多边形中删除导致凹陷的所有点.

替代文字

目前,我一直试图做的是:

  • 从多边形中取出每个点
  • 测试该点以查看它是否属于由该组的其余部分创建的多边形
  • 如果为true则删除该点
  • 如果错误保持重点

这在大多数情况下都有效,但在前一种情况下,(2,3)和(2,4)处的点都不会被删除.在这两种情况下,其中一个点将被删除,但另一个点将不依赖于传入数组的顺序.

我想知道的是:

  1. 有没有办法测试,看看我正在处理的多边形是否恰好有这些情况之一(IE:连续3个故障点?)
  2. 有没有更简单的方法来创建凸多边形?

谢谢.

geometry convex-optimization convex-polygon computational-geometry

3
推荐指数
1
解决办法
1521
查看次数

引用二维数组的一个维度

我有一些很好的C代码,但我不明白代码的一部分.在这一部分中,它传递一个方法,指向二维数组,只指定了一个维度.

这里是:

if (cmppt(pts[i*3], pts[hull*3])) 
      hull = i; 
Run Code Online (Sandbox Code Playgroud)

方法cmppt看起来像这样:

inline bool cmppt(const float* a, const float* b) { 
      if (a[0] < b[0]) return true;
      if (a[0] > b[0]) return false; 
      if (a[2] < b[2]) return true; 
      if (a[2] > b[2]) return false; 
      return false; 
} 
Run Code Online (Sandbox Code Playgroud)

数组pts是二维数组.我的问题是,当方法传递给两个数组时,例如pts [3]和pts [0]我怎么知道它看到的数组的哪个部分?似乎pts [0]查看数组第一维的第一个元素,而pts [3]查看数组第一维的第二个元素,但这没有意义.

谢谢

c

1
推荐指数
1
解决办法
1201
查看次数