使用Newell算法计算3d多边形的面法线的问题

问题描述 投票:0回答:1

我正在尝试使用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.70, -145.56, 115.18
//Expected Result = -192.70, -145.56, -115.18

任何帮助将不胜感激。谢谢...

php algorithm 3d geometry polygon
1个回答
0
投票

此代码gives [矩形的0, 2, -2

[
    [0, 0, 0],
    [1, 0, 0],
    [1, 1, 1],
    [0, 1, 1],
];

0, -2, 2用于具有颠倒顶点顺序的矩形,所以我认为代码是正确的

© www.soinside.com 2019 - 2024. All rights reserved.