8.2.5 法向量
法向量是长度为1的向量,也称为单位向量。单位向量是在不考虑大小时表示方向的绝佳方式。归一化(normalize)操作保持向量的方向不变,但是使其大小变为1。如果把一个单位向量与一个标量相乘,得到的向量的长度会与标量值相同。如果向量的长度未知,而想使其长度为6,就可以归一化该向量,然后乘以6。
public Vector Normalize(Vector v)
{
double r = v.Length();
if (r != 0.0) // guard against divide by zero
{
return new Vector(v.X / r, v.Y / r, v.Z / r); // normalize and return
}
else
{
return new Vector(0, 0, 0);
}
}
从技术上来说,这段代码并不正确,这是因为0向量是无法归一化的,而这段代码在归一化0向量时没有采取任何操作。通过计算向量的长度,然后把每个元素除以该长度,可以归一化向量。归一化向量的效果如图8-10所示。