# 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$$

Canvas support required

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);
}