如果你家的娃喜欢打游戏,可以把这篇文章分享给他看看。本期主题是在游戏中如何使物体移动,背后又存在哪些数学意义 ?

我们玩游戏的时候控制一个角色向前或者向任意方向移动,程序都是如何实现的呢 ?

故事的开始要从一个余弦波开始,现在我们将角色移动的正前方定义为Y朝向(当然你可以将任意轴向定义为“前方” ),那么就用一个Cos(θ) 表示。

如果现在我们要制作一个3D游戏,可以将正前方放在Z轴上,也可以写作z = cos(θ)

在平面直角坐标系中,当点 P 的坐标由 x = sin(θ) 和 y = cos(θ) 确定时,我们可以证明这些点实际上都位于一个单位圆上。

  1. 三角函数的定义:
  • sin(θ) 和 cos(θ) 分别表示在直角三角形中,对边与斜边、邻边与斜边的比值。但在这里,我们将其推广到任意角 θ。
  1. 单位圆:
  • 考虑单位圆(半径为1的圆)上的任意一点 P,其与原点 O 连线与 x 轴正方向的夹角为 θ。

  • 根据三角函数的几何定义,点 P 的 x 坐标即为 sin(θ)(OP 在 x 轴上的投影长度),y 坐标即为 cos(θ)(OP 在 y 轴上的投影长度)。

  1. 单位圆方程:
  • 由于 OP 是单位圆的半径,其长度为1,因此 sin2(θ) + cos2(θ) = 1。

  • 这正是单位圆上点的坐标满足的方程。

  • 结合上述解释,当 x = sin(θ) 且 y = cos(θ) 时,点 P(x, y) 必然位于单位圆 x2 + y2 = 1 上。

当 y = cos(θ),x = sin(θ) 时,可以画出一个单位圆,因为这样的点集正好构成了单位圆上的所有点。

我们通过控制角度 0 到 360 ,转换成弧度大约是 0 到 6.28 ,就能达到使角色朝向指定方向的目的了。

我们已经获得了一个带方向的向量 { x,y } , 现在通过向量的乘法我们可以将这个向量进行任意缩放。下面的图示中通过一个变量d去计算当前向量的长度。也可以理解为移动的距离。

现在如果我们要让主角朝向 正前方 移动 2 米,可以写作 :

1
{x,y} = {sin(0),cos(0)} * 2

恭喜你,现在通过一个简单的计算我们就给一个游戏主角赋予了转向与移动的能力了。