首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >确定点相对于给定3D曲面的位置

确定点相对于给定3D曲面的位置
EN

Stack Overflow用户
提问于 2012-07-11 15:54:54
回答 1查看 870关注 0票数 0

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

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

我写了一个小的opengl程序来图形化地演示算法的操作。

我尝试了其他算法使用的各种公式(归一化叉积,点到平面的距离)

它们都导致在算法中采取了错误的步骤。这意味着他们决定从点上看某个表面是可见的(你可以从图形上看到它不是)

一个曲面或“面”的例子。

代码语言:javascript
复制
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

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2012-07-11 17:44:57

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

代码语言:javascript
复制
normal = cross(e2 - e1, e3 - e1);

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

代码语言:javascript
复制
compare = point - e1

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

代码语言:javascript
复制
side = dot(normal, compare)

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11428051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档