归一化向量函数 returns 意外结果

Normalized vector function returns unexpected result

我在理解向量归一化函数时遇到问题。

我有这个向量归一化函数:

function vectorNormalization(vector) {
    var magnitude = Math.sqrt((vector[0] * vector[0]) + (vector[1] * vector[1]) +
                    (vector[2] * vector[2]));

    var x = vector[0] / magnitude;
    var y = vector[1] / magnitude;
    var z = vector[2] / magnitude;

    return [x, y, z];
}

这些是两个向量之间的减少结果(在 3D 软件中使用)。

[X: -0.004805074799706634, Y: 0.19191680472036263, Z: -0.002017289400100708]

向量归一化函数returns这个:

[-0.025028054575754678,0.99963152765883,-0.010507397138519977]

Y 值太高,它应该被归一化并代表一个单位,但它会导致更大的数字。单位要小于归一化前的值。

如您所见,我正在处理一个具有小数精度的 3D 坐标系。该部门正在生产这一点。我想我需要做一些考虑小数精度的事情,但我不确定。

答案正确。归一化将向量投影到单位球体上。原始向量的幅度为 0.191987547,小于 1,因此归一化会导致幅度增加。您可以通过计算生成的归一化向量的大小来验证情况是否如此,并看到它的大小本质上是 1.0。

此外,您可以看到原始的 Y 分量比 X 或 Z 分量长得多,因此它在归一化向量中非常接近 1 也就不足为奇了。