跳到主要内容

数学相关知识及其应用

前言

游戏开发实际上不需要精通这些数学原理,引擎的实现中已经提供了很多数学函数。

尤其是角度相关的操作,初学者容易弄不清该使用什么工具、函数,只能上网搜索;

但搜索出来的内容大多是些数学知识介绍,这种情况容易让新手误以为需要自己写函数做计算。

如果你也正在经理这个阶段,我推荐你直接看下一节内容:操作变换

向量加法、减法

Math-1

代码

var c = a + b;  // (2, 5) + (3, 1) = (5, 6)

用于

  • 加法-物体移动
  • 减法-物体指向

Math-2 Math-3

单位向量

大小为 1 的向量称为单位向量,有时也被称为方向向量或法线。当你需要记录方向时就可以使用单位向量。

代码

归一化

a = a.Normalized();

用于

  • 记录方向

向量点乘

代码

点乘(又名点积、数量积),满足交换律 与单位向量一起使用时,点积是最有用的,可以得到两个向量之间夹角的一些信息:

float c = a.Dot(b);
float d = b.Dot(a); // 这是相等的

使用单位向量时,结果总是会在 -1(180°)和 1(0°)之间。

用于

  • 朝向检测、判断

Math-4

var AP = A.DirectionTo(P);
if (AP.Dot(fA) > 0)
{
GD.Print("A sees P!");
}
  • 到平面的距离 单位向量和任何空间点之间的点积(是的,这次我们在向量和位置之间进行点乘),将返回从该点到平面的距离
var distance = normal.Dot(point);

但返回的不止是距离的绝对值,如果点位于负半空间,那么这个距离也是负的,这样我们就能够知道点位于平面的哪一侧。 Math-5