使用 Newell 算法计算 3d 多边形面法线的问题
Issue with calculating 3d polygon's face normal using Newell's algorithm
我正在尝试使用 Newell 的方法计算 3D 多边形的法线。我面临的问题是,即使多边形面向 -z,z 的值始终返回正值。但是,当它面对 -z 时,它也会翻转 x 和 y 的值,因此如果 x 的实际值是 -x,它将是 +x,y 也是如此。我不明白为什么会这样。我希望有人能指出我做错了什么。这是我到目前为止写的(使用 PHP):
$verticies =
[
[57.36, 30.98, 0.0],
[52.57, 39.04, 2.76],
[58.00, 38.33, 10.50],
[59.89, 31.16, 4.77],
[62.28, 30.75, 8.01],
[64.70, 26.11, 6.46],
[64.90, 21.54, 1.21]
];
for ($i = 0; $i < count($verticies); $i++)
{
//current vertex
$pi = $verticies[$i];
//next vertex
$pj = $verticies[($i+1) % count($verticies)];
//0 = x, 1 = y, 2 = z
$nx += ((($pi[2]) + ($pj[2])) * (($pj[1]) - ($pi[1])));
$ny += ((($pi[0]) + ($pj[0])) * (($pj[2]) - ($pi[2])));
$nz += ((($pi[1]) + ($pj[1])) * (($pj[0]) - ($pi[0])));
}
echo $nx.', '.$ny.', '.$nz;
//Current Result = -192.665, -145.6139, 115.1547
//Expected Result = -192.665, -145.6139, -115.1547
如有任何帮助,我们将不胜感激。谢谢...
此代码 gives 0, 2, -2
用于矩形
[
[0, 0, 0],
[1, 0, 0],
[1, 1, 1],
[0, 1, 1],
];
和 0, -2, 2
用于顶点顺序相反的矩形,所以我认为代码是正确的
我正在尝试使用 Newell 的方法计算 3D 多边形的法线。我面临的问题是,即使多边形面向 -z,z 的值始终返回正值。但是,当它面对 -z 时,它也会翻转 x 和 y 的值,因此如果 x 的实际值是 -x,它将是 +x,y 也是如此。我不明白为什么会这样。我希望有人能指出我做错了什么。这是我到目前为止写的(使用 PHP):
$verticies =
[
[57.36, 30.98, 0.0],
[52.57, 39.04, 2.76],
[58.00, 38.33, 10.50],
[59.89, 31.16, 4.77],
[62.28, 30.75, 8.01],
[64.70, 26.11, 6.46],
[64.90, 21.54, 1.21]
];
for ($i = 0; $i < count($verticies); $i++)
{
//current vertex
$pi = $verticies[$i];
//next vertex
$pj = $verticies[($i+1) % count($verticies)];
//0 = x, 1 = y, 2 = z
$nx += ((($pi[2]) + ($pj[2])) * (($pj[1]) - ($pi[1])));
$ny += ((($pi[0]) + ($pj[0])) * (($pj[2]) - ($pi[2])));
$nz += ((($pi[1]) + ($pj[1])) * (($pj[0]) - ($pi[0])));
}
echo $nx.', '.$ny.', '.$nz;
//Current Result = -192.665, -145.6139, 115.1547
//Expected Result = -192.665, -145.6139, -115.1547
如有任何帮助,我们将不胜感激。谢谢...
此代码 gives 0, 2, -2
用于矩形
[
[0, 0, 0],
[1, 0, 0],
[1, 1, 1],
[0, 1, 1],
];
和 0, -2, 2
用于顶点顺序相反的矩形,所以我认为代码是正确的