如何检查给定的3d点是否在凸包之外

时间:2019-04-15 21:31:20

标签: convex-hull

我正在做一个科学项目。我有一个voronoi图顶点的xyz坐标列表,以及一个创建我的蛋白质的凸包(通过三角测量)的点的列表。现在有些顶点离船体很远,我想将它们过滤掉。我如何在C ++中做到这一点?现在,它不必进行超级优化,我只专注于删除那些要点。

visualization

我还想检查从voronoi顶点(红叉)到蛋白质中心(粉红色球体)的线是否在任何时候与船体面相交,但是我不确定如何实现。

我读到您可以通过计算从该点开始的无限线穿过船体的次数来检查点是否在多边形内,但这是二维的。可以采用类似的方法来满足我的需求吗?

https://www.geeksforgeeks.org/how-to-check-if-a-given-point-lies-inside-a-polygon/

1 个答案:

答案 0 :(得分:0)

让我们从二维情况开始。您可以在CS.SX上找到解决方案:

Determine whether a point lies in a convex hull of points in O(logn)

这个想法是,凸包上的每两个连续点定义一个平面的三角形切片(到包的某个内部点);您可以找到您的点所在的切片,并检查它是否比限制幻灯片的线段更靠近内部点。

对于三维情况,我想您应该可以执行类似的操作,但是搜索形成相关三角形的3个点可能会有些棘手。特别是,这还取决于凸包的表示方式-在二维情况下,凸包只是一个循环上连续点的序列。

我知道这并不能完全解决您的问题,但这是我所提供的最好的...