【问题标题】:Determining the position of a point in relation to a given 3D surface确定点相对于给定 3D 表面的位置
【发布时间】:2012-07-11 07:54:53
【问题描述】:

我正在尝试实现用于计算 3D 凸包的 Quick hull 算法。 问题是我需要知道一个点是否可以“看到”给定的表面。

表面具有顺时针或逆时针方向。

我写了一个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

任何帮助将不胜感激。

【问题讨论】:

    标签: algorithm vector 3d convex


    【解决方案1】:

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

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

    那么你需要一个向量来比较法线:

    compare = point - e1
    

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

    side = dot(normal, compare)
    

    如果边 > 0,则该点位于法线指向的平面的一侧。如果它

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

    【讨论】:

    • 澄清一下,如果我有点表示边缘,那么 cross(e2 - e1, e3 - e1) = cross(p3 - p2 - p2 + p1, p4 - p3 - p2 + p1)?我会对其进行测试并告诉你它是如何工作的。
    • 我想我的问题是我使用所有点而不是 3 个连续点来计算人脸法线。
    猜你喜欢
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 2021-07-05
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 2015-03-23
    相关资源
    最近更新 更多