Recovery: The inverse of division is multiplication. Hence:
vec = [vec_normalized.x*vec_length,
vec_normalized.y*vec_length,
vec_normalized.z*vec_length]
If vec_length
is unknown, you can not restore the original vector. Normalization can be seen as a lossy compression of direction+magnitude to just direction. There is an infinite number of vectors that map to a single normalized vector.
Mathematically, a function that maps multiple different input values to a single output value, is not invertible.
A nice property about normalized vectors is that if you want a specific magnitude f with that direction, you can just multiply your vector f, and know that it has length f.
Precision:
However, note that this does not necessarily give you the original vector, but rather, in the general case, an approximation thereof. This is because of the finite precision with which floating point numbers are represented in memory. Consequently, the normalized vector in computing might not actually be the the exact normalized vector mathematically.
[-0.5, -1.0, 0.0]
without knowingvec_length
, but only knowing ONLY[-0.447214,-0.894427,0]
... – Blest