如何在规范化之前对已经规范化的矢量进行非规范化以获得原始值?
例如:
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]?
谢谢!
答案 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
<强> 精度: 强> 但请注意,这并不一定能为您提供 原始向量,而是在一般情况下为其近似值。这是因为在存储器中表示浮点数的有限精度。因此,计算中的归一化向量实际上可能不是精确的归一化向量数学。
真正的解决方案: 考虑到你正在努力解决这个简单的数学问题,你肯定应该得到一些关于数学的好的介绍性材料,例如一些好书。 *
*:是的,这是答案的一部分。教钓鱼。