Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math 规格化向量函数返回意外结果_Math_Vector_Normalization - Fatal编程技术网

Math 规格化向量函数返回意外结果

Math 规格化向量函数返回意外结果,math,vector,normalization,Math,Vector,Normalization,我在理解向量规范化函数时遇到问题 我有一个向量归一化函数: 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 = vecto

我在理解向量规范化函数时遇到问题

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

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软件中使用)

vector normalization函数返回以下内容:

[-0.025028054575754678,0.99963152765883,-0.010507397138519977]
Y值太高,它应该被规范化并表示一个单位,但它会导致更高的数字。单位应小于标准化前的值


正如你所看到的,我正在处理一个十进制精度的三维坐标系。该部门正在为此做出让步。我想我需要做一些事情来考虑十进制精度,但我不确定。

答案是正确的。规格化将向量投影到单位球体上。原始向量的大小为0.191987547,小于1,因此归一化将导致大小增加。您可以通过计算得到的规范化向量的大小来验证这种情况,并查看其大小基本上为1.0


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

有没有办法获得一个不会更高的单位。我试图在一个方向上设置对象的动画,直到对象2。使用此函数,对象将在循环中添加这些值的第一次迭代中通过y轴上的第二个对象,因此它不表示该范围内的较小单位,该单位是两个向量之间整个范围的子集。有没有一个函数可以给我一个单位,它的增量代表距离的一部分。我想你需要的不是向量标准化。在上述情况下,应用1/vec_mag的比例因子,其中vec_mag是向量的大小。可以对比例因子施加下限或其他约束。不过,最终你需要做的是定义你正在寻找的行为,然后定义一个算法,根据这个愿望计算比例因子。
[-0.025028054575754678,0.99963152765883,-0.010507397138519977]