0

我正在尝试实现用于计算 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

任何帮助将非常感激。

4

1 回答 1

1

第一步是确定平面的法线。这可以通过叉积来实现。例如:

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

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

compare = point - e1

并且两个向量的点积描述,如果两个向量都指向同一法线方向:

side = dot(normal, compare)

如果 side > 0,则该点位于法线指向的平面的一侧。如果它<0,它在对面。如果它= 0,它正好在平面上。

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

于 2012-07-11T09:44:56.733 回答