非规范化矢量

时间:2014-11-13 15:30:22

标签: math vector maxscript

如何在规范化之前对已经规范化的矢量进行非规范化以获得原始值?

例如:

vec = [-0.5, -1.0, 0.0]
vec_length = sqrt(vec.x^2 + vec.y^2 + vec.z^2)
vec_normalized = [vec.x/vec_length, vec.y/vec_length, vec.z/vec_length]

的产率:

vec_length = 1.11803
vec_normalized = [-0.447214,-0.894427,0]

如何从标准化向量[-0.447214,-0.894427,0]中获取原始向量[-0.5,-1.0,0.0]?

谢谢!

2 个答案:

答案 0 :(得分:5)

你不能。
有无限数量的向量,其归一化形式为[-0.447214, -0.894427, 0]

如果你想要一个“更好”的形式,你可以尝试向上扩展到任意数字,随机例子:

我希望x成为-3

scale = -3 / vec_normalized.x;
vec2 = [vec_normalized.x * scale, vec_normalized.y * scale, vec_normalized.z * scale];

结果:

scale = 6.70819787
vec2 = [-3, -6, 0]

但请注意不要选择0的组件,因为这会产生scale = infinity

答案 1 :(得分:1)

恢复: 除法的倒数是乘法。因此:

vec = [vec_normalized.x*vec_length,
       vec_normalized.y*vec_length,
       vec_normalized.z*vec_length]

如果vec_length未知,则无法恢复原始矢量。归一化可以看作是方向+幅度方向的有损压缩。有无数个向量映射到单个标准化向量。

数学上,将多个不同输入值映射到单个输出值的函数是不可逆的。

关于规范化向量的一个很好的属性是,如果你想要一个具有该方向的特定幅度 f ,你可以将你的向量 f 相乘,并知道它有长度˚F

<强> 精度: 但请注意,这并不一定能为您提供 原始向量,而是在一般情况下为其近似值。这是因为在存储器中表示浮点数的有限精度。因此,计算中的归一化向量实际上可能不是精确的归一化向量数学

真正的解决方案: 考虑到你正在努力解决这个简单的数学问题,你肯定应该得到一些关于数学的好的介绍性材料,例如一些好书。 *


*:是的,这是答案的一部分。教钓鱼。