n 维空间中有一组 S 点。我想测试给定点 P 位于 S 区域内。
由于这是 n 维空间,因此点应形成多面体。然后问题是确定给定点是否在凸多面体内。
我发现3-D多面体的this但是C ++库没有意义,我找不到它们的定义。此外,它不检查边界条件。
Another algorithm我发现是2D多边形。我无法修改它,因为它写得不清楚。我当然可以扩展它,但我不是这个领域的专家,所以最好先问一下。
最后我找到了一个algorithm for triangulation的凹多边形,但我不认为它适合我的情况。
答案 0 :(得分:1)
不确定你究竟在问什么,似乎你有几个问题。首先计算点集的凸壳。在2d你可以使用BOOST或CGAL。对于3d CGAL。不确定它们是否处理更高的尺寸。对于内部检查,一种方法是(作为您发布状态的链接)检查从查询点到已知外部点的光线交叉点。光线的交点(对于内部点)应位于一个平面上,该平面指向与光线相同的方向。意思是你要退出音量。更有效的方法是使用二进制空间分区树(BSP)之类的东西。有很多关于如何工作的教程的链接。
答案 1 :(得分:1)
根据您的描述,您已确定S是凸的。如果是这种情况,则应用超平面分离定理(http://en.wikipedia.org/wiki/Hyperplane_separation_theorem)