【问题标题】:Determining the "inner domain" of a set of points确定一组点的“内部域”
【发布时间】:2012-06-20 20:10:25
【问题描述】:

我有一组 (x, y) 点,我想从这些点插入这组点“内部”的任何点的值。 (下图中黄色区域)。

问题是我没有找到任何好的方法:

  1. 找到作为我的插值点边界的多边形(绿线)
  2. 测试点是否在多边形内。我找到了Point in Polygon 算法,但我不确定将所有点都放在某个范围内并测试它们是否属于多边形是个好主意。我想找到一种方法,让我测试的点数比 (max(x)-min(x))*(max(y)-min(y)) 少,理想情况下是一种知道哪些点的方法做我的迭代。

编辑:在第二部分中,我将迭代图像中的所有点(像素),我想做的只是迭代黄色字段中的点。

你有线索吗?

Ps:如果有帮助的话,我正在用 C++ 编写代码。

【问题讨论】:

  • 关于问题2:是否有任何点在绿色边界之外?如果是这样,您使用什么标准来确定多边形的边界?如果不是,那么一旦您知道边界上的点,根据定义,其余点都在边界内。
  • @mbeckish 不,绿色边界之外没有任何点。我编辑了问题以澄清第二部分。
  • 那你根本不需要测试。只需跟踪边界上的哪些点 - 如果所讨论的点不是边界点之一,那么它就在多边形内。

标签: algorithm math polygon computational-geometry point


【解决方案1】:

您正在查看的绿线称为点集的convex hull,其中有many good, efficient algorithms for computing it。它们中最好的运行时间为 O(n log h),其中 h 是在船体上找到的点数,n 是点的总数。作为一个完全无耻的自我推销,我在我的个人网站上提供了 a C++ implementation of one of these algorithms

关于你的第二个问题——一旦你有了凸包,就很容易确定哪些点纯粹在多边形内部,而不是在凸包上。只需制作所有点的哈希表,然后遍历凸包并删除包中包含的所有点。哈希表中剩下的是包含在多边形内但不在边界上的点集。

希望这会有所帮助!

【讨论】:

  • 嗯,这确实有帮助。你已经回答了我所有的问题,并为我提供了一个工作代码。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-11
  • 1970-01-01
  • 2014-03-09
相关资源
最近更新 更多