确定与给定3D表面相关的点的位置

时间:2012-07-11 07:54:54

标签: algorithm vector 3d convex

我正在尝试实现快速船体算法来计算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

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

第一步是确定飞机的法线。这可以通过交叉产品实现。 E.g:

normal = cross(e2 - e1, e3 - e1);

然后你需要一个向量来比较法线:

compare = point - e1

如果两个向量指向与法线相同的方向,则两个向量的点积描述:

side = dot(normal, compare)

如果边&gt; 0,然后该点位于法线指向的平面一侧。如果是&lt; 0,它在另一边。如果它是= 0,它就在飞机上。

重要的一步是定义法线,使其指向正确的描述。只有多边形,您可以按角点的顺序定义法线。例如。上侧是点顺时针方向的一侧。如果您需要不同的东西,您必须提供更多信息。