正文

游戏数学(12)

精通C#游戏编程 作者:(英)斯库勒


 

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所示。


上一章目录下一章

Copyright © 读书网 www.dushu.com 2005-2020, All Rights Reserved.
鄂ICP备15019699号 鄂公网安备 42010302001612号