指向Polytope又称命中测试

时间:2014-03-12 13:28:55

标签: c# geometry computational-geometry hittest

n 维空间中有一组 S 点。我想测试给定点 P 位于 S 区域内。

由于这是 n 维空间,因此点应形成多面体。然后问题是确定给定点是否在凸多面体内。

我发现3-D多面体的this但是C ++库没有意义,我找不到它们的定义。此外,它不检查边界条件。

Another algorithm我发现是2D多边形。我无法修改它,因为它写得不清楚。我当然可以扩展它,但我不是这个领域的专家,所以最好先问一下。

最后我找到了一个algorithm for triangulation的凹多边形,但我不认为它适合我的情况。

2 个答案:

答案 0 :(得分:1)

不确定你究竟在问什么,似乎你有几个问题。首先计算点集的凸壳。在2d你可以使用BOOST或CGAL。对于3d CGAL。不确定它们是否处理更高的尺寸。对于内部检查,一种方法是(作为您发布状态的链接)检查从查询点到已知外部点的光线交叉点。光线的交点(对于内部点)应位于一个平面上,该平面指向与光线相同的方向。意思是你要退出音量。更有效的方法是使用二进制空间分区树(BSP)之类的东西。有很多关于如何工作的教程的链接。

答案 1 :(得分:1)

根据您的描述,您已确定S是凸的。如果是这种情况,则应用超平面分离定理(http://en.wikipedia.org/wiki/Hyperplane_separation_theorem

  1. 在S中找到最接近P的点Q。
  2. 构建一个位于Q上且与P-Q
  3. 垂直的超平面H.
  4. 测试S中H的哪一侧的所有点。
  5. 如果它们都在平面上或在H的另一侧与P相比,则P在S的上方或外部。如果某些点位于H前面,而其他点位于H之后,那么P是在里面。