Vector scaling
Scaling a vector by a real number changes the magnitude (length) of the vector, but not the direction. A vector can be negated if scaled by \(-1\). A negative vector \((-\vec{A})\) has the same magnitude as the original vector \((\vec{A})\), but points in the opposing direction.To scale a vector by a scalar, multiply every component of the vector by the scalar:
$$ \vec{A}s = (A_0 s, A_1 s ... A_n s) $$
In the example below, vector \( \vec{A} \) is shown as a blue arrow. The scalar \(s\) can be set with the green slider. The orange arrow is the result of scaling \(\vec{A}\) by \(s\)
Implementing scaling in code is trivial:
vec2 Scale(vec2 a, float s) { return vec2(a.x * s, a.y * s); } vec3 Scale(vec3 a, float s) { return vec3(a.x * s, a.y * s, a.z * s); } vec4 Scale(vec4 a, float s) { return vec4(a.x * s, a.y * s, a.z * s, a.w * s); }
Vector multiply (Non uniform scale)
Multiplying two vectors together results in a non-uniform scale operation. When multiplying two vectors, just multiply like components. For example, when multiplying \(\vec{A} * \vec{B}\) each component of \(\vec{A}\) is scaled by the coresponding component of \(\vec{B}\).
$$ \vec{A} * \vec{B} = (A_0 B_0, A_1 B_1 ... A_n B_n) $$
Again, implementing this in code should be fairly trivial:
vec2 Mul(vec2 a, vec2 b) { return vec2(a.x * b.x, a.y * b.y); } vec3 Mul(vec3 a, vec3 b) { return vec3(a.x * b.x, a.y * b.y, a.z * b.z); } vec4 Mul(vec4 a, vec4 b) { return vec4(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w); }