gpt4 book ai didi

javascript - 计算多边形的法向量 - Newells 法

转载 作者:行者123 更新时间:2023-11-29 17:01:30 27 4
gpt4 key购买 nike

我正在尝试计算二维多边形的表面法线。我正在使用 OpenGL wiki 中的 Newell 方法来计算表面法线。 https://www.opengl.org/wiki/Calculating_a_Surface_Normal根据我的理解,法线应该在 y 方向,但它总是返回 [0, 0, 0]。 y 值在第二次迭代时变为 -1,在第四次迭代时变回零。

p = [[0, 0, 0]
[1, 0, 0]
[0, 0, 1]
[1, 0, 1]]

function calcNormal(p) {
var normal = [0, 0, 0];
for(var i = 0; i < p.length; i++) {
var j = (i + 1) % (p.length);
normal[0] += (p[i][1] - p[j][1]) * (p[i][2] + p[j][2]);
normal[1] += (p[i][2] - p[j][2]) * (p[i][0] + p[j][0]);
normal[2] += (p[i][0] - p[j][0]) * (p[i][1] + p[j][1]);
}
return normal;
}

最佳答案

您正在使用退化多边形进行测试。如果你在 xz 平面上绘制它,顶点编号从 0 到 3,它看起来像这样:

2 ---- 3
\ /
\ /
\/
/\
/ \
/ \
0 ---- 1

这个多边形没有明确定义的法线,因为它在中间改变了方向,并折叠了自己。

如果交换最后两个顶点:

p = [[0, 0, 0]
[1, 0, 0]
[1, 0, 1]
[0, 0, 1]]

它看起来像这样,您应该会得到更有意义的结果:

3 ---- 2
| |
| |
| |
0 ---- 1

关于javascript - 计算多边形的法向量 - Newells 法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27326636/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com