Xcode与C++之游戏开发:向量与物理基础

由于代码渐渐多了起来,现在参考实现已经上传到 Github 了。 github仓库地址

上一篇:Xcode与C++之游戏开发:精灵(Sprite)

既然没有用游戏引擎,再往下就一定要遇到遇到怎么处理子弹反弹,更高级一点诸如渲染阴影。这些游戏必备的数学主要和线性代数中向量有关。再广义一点,游戏还涉及音频的播放之类,如果是联网游戏有游戏玩家间的交流,可能还有处理音频的过程(比如,适当压缩)来减少网络负担,降低延迟。

向量运算

二维向量需要由两个坐标轴来刻画 ( x , y ) (x,y) (x,y),三维向量(空间向量)需要由三个坐标轴来刻画 ( x , y , z ) (x,y,z) (x,y,z)。依此类推,四维向量需要四个,例如在相对论中,除了空间意义上的 ( x , y , z ) (x,y,z) (x,y,z),加上了时间意义的上的 t t t,构成了爱因斯坦描述的四维空间。但是,处于三维空间的我们是无法画出这玩意的。换句话说,可视化只能最多是三维的。

向量的运算和算术运算有一些差异。有一些简单的概念可以稍微复习一下:

  • 向量的加(减)法:对应坐标维度相加(减): ( x 1 , y 1 ) + ( x 2 , y 2 ) = ( x 1 + x 2 , y 1 + y 2 ) (x_1,y_1)+(x_2,y_2)=(x_1+x_2,y_1+y_2) (x1,y1)+(x2,y2)=(x1+x2,y1+y2) ( x 1 , y 1 ) − ( x 2 , y 2 ) = ( x 1 − x 2 , y 1 − y 2 ) (x_1,y_1)-(x_2,y_2)=(x_1-x_2,y_1-y_2) (x1,y1)(x2,y2)=(x1x2,y1y2)

注意,向量的加减法几何意义上遵循的是三角形法则。

三角形法则

减法的原则可以简单记为:起点相同,指向被减。(起点不同?那就平移到相同~)
在乒乓球游戏那篇,就已经给出了二维向量的简单实现:

// Vector2 结构体仅存储 x 和 y 坐标
struct Vector2
{
   
  float x;
  float y;
};
  • 向量的数乘,几何意义上是放缩向量的长度: λ ⋅ ( x , y ) = ( λ x , λ y ) \lambda \cdot (x,y)=(\lambda x, \lambda y) λ(x,y)=(λx,λy)
  • 向量的长度(模),这里用到的其实就是勾股定理: ∣ ∣ x ∣ ∣ = a x 2 + a y 2 ||x||=\sqrt{a_x^2+a_y^2} x=ax2+ay2
  • 向量的标准化(归一化?)(通常用于确定向量方向): a ⃗ = ( a ⃗ x ∣ ∣ a ⃗ x ∣ ∣ , a ⃗ y ∣ ∣ a ⃗ y ∣ ∣ ) \vec a = (\frac{\vec a_x}{||\vec a_x||}, \frac{\vec a_y}{||\vec a_y||}) a =(a xa x,a y
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值