我正在尝试实现Quick hull算法来计算3D凸包。问题是,我需要知道一个点是否可以“看到”给定的曲面。
曲面具有顺时针或逆时针方向。
我写了一个小的opengl程序来图形化地演示算法的操作。
我尝试了其他算法使用的各种公式(归一化叉积,点到平面的距离)
它们都导致在算法中采取了错误的步骤。这意味着他们决定从点上看某个表面是可见的(你可以从图形上看到它不是)
一个曲面或“面”的例子。
e1 = 0, 0, 0 to 10, 0, 0
e2 = 10, 0, 0 to 10, 10, 0
e3 = 10, 10, 0 to 0, 10, 0
e4 = 0, 10, 0 to 0, 0, 0
<---------/\
|| ||
|| ||
|| ||
\/--------->假设我有两个点,我想知道它们位于曲面的哪一边。
p1 = -1,-1,-1 p2 = 1,1,1
任何帮助都将不胜感激。
发布于 2012-07-11 17:44:57
第一步是确定平面的法线。这可以通过叉积来实现。例如:
normal = cross(e2 - e1, e3 - e1);然后你需要一个向量来比较法线:
compare = point - e1如果两个向量指向法线的相同方向,则两个向量的点积描述:
side = dot(normal, compare)如果side > 0,则该点位于法线指向的平面的一侧。如果它< 0,则它在相反的一侧。如果它= 0,则它恰好在平面上。
重要的一步是定义法线,使其指向正确的描述。如果仅使用多边形,则只能按角点的顺序定义法线。例如,上边是点的顺时针方向的边。如果你需要不同的东西,你必须提供更多的信息。
https://stackoverflow.com/questions/11428051
复制相似问题