非规范化矢量

use*_*614 2 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]
Run Code Online (Sandbox Code Playgroud)

收益率:

vec_length = 1.11803
vec_normalized = [-0.447214,-0.894427,0]
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

TWi*_*Rob 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];
Run Code Online (Sandbox Code Playgroud)

结果:

scale = 6.70819787
vec2 = [-3, -6, 0]
Run Code Online (Sandbox Code Playgroud)

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