Game Development Reference
In-Depth Information
/** Gets the squared magnitude of this vector. */
real squareMagnitude() const
{
return x*x+y*y+z*z;
}
/** Turns a non-zero vector into a vector of unit length. */
void normalize()
{
real l = magnitude();
if (l > 0)
{
(*this)*=((real)1)/l;
}
}
};
Notice that I've also added a function to calculate the square of the magnitude of
a vector. This is a faster process because it avoids the call to sqrt , which can be slow
on some machines. There are many cases where we don't need the exact magnitude
and where the square of the magnitude will do. For this reason it is common to see a
squared magnitude function in a vector implementation.
2.1.3
S CALAR AND V ECTOR M ULTIPLICATION
In the normalization equations I have assumed we can multiply a scalar (1 /d )bya
vector. This is a simple process, given by the formula
x
y
z
kx
ky
kz
=
k a
=
k
In other words we multiply a vector by a scalar by multiplying all the components of
the vector by the scalar.
To divide a vector by a scalar, we make use of the fact that
1
b
a
÷
b
=
a
×
so
1
k a
which is how we arrived at the normalization equation 2.2 from equation 2.1.
a
k =