math - 二维空间游戏中的线性代数

标签 math 2d linear-algebra algebra

我目前正在游戏中自学线性代数,我几乎准备好在简单的 2D 空间中使用我新发现的知识了。我计划使用数学库,用向量/矩阵等来表示位置和方向,这与我的上一个游戏不同,它很简单,不需要它。

我只是想对这个问题进行一些澄清。首先,用 4x4 齐次坐标表示 2D 空间中的位置是否有效,如下所示:

[400, 300, 0, 1]

这里,为了简单起见,我假设我们正在 800 x 600 的固定分辨率(和屏幕空间)下工作,所以这应该是屏幕中间的一个点。

这有效吗?

假设这个位置代表玩家的位置,如果我使用向量,我可以代表玩家面对的方向:

[400, 400, 0, 0]

因此这个向量表示玩家面向屏幕底部(如果我们在屏幕空间中工作。

这有效吗?

最后,如果我想将玩家旋转 90 度,我知道我会将向量乘以矩阵/四元数,但这就是我感到困惑的地方。我知道四元数更有效,但我不确定如何旋转我的玩家所面对的方向。

有人可以解释一下构建四元数并将其乘以我的面部向量背后的数学原理吗?

我还听说 OpenGL 和 D3D 以不同的方式表示向量,这是如何工作的?我不太明白。

在几个月后进入 3D 空间之前,我正尝试开始掌握游戏中的基本线性代数。

最佳答案

您可以将您的位置表示为 4D 坐标,但是,我建议仅使用所需的维度(即 2D 向量)。

方向主要表示为从玩家位置开始并指向相应方向的向量。因此方向向量 (0,1) 会更容易处理。 给定该向量,您可以使用旋转矩阵。在这种情况下,四元数并不是真正必要的,因为您不想绕任意轴旋转。您只想绕 z 轴旋转。您的辅助库应该提供创建此类矩阵并用其转换向量的方法(作为正常转换)。

我不确定 OpenGL 和 D3D 的向量表示之间的差异。但我认为,这一切都与内存使用有关,这应该是您不想担心的事情。

关于math - 二维空间游戏中的线性代数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9708937/

相关文章:

ios - 快速将 Double 转换为科学记数法

r - Gram-Schmidt 正交化

c++ - 大数乘法取模

python - 基本 Pygame 程序未执行

java - 使用嵌套 For 循环初始化 2D 数组的值

我可以在 C 中返回一个二维数组吗?

java - 将android-opengl上的触摸转换为ray/vector并检查是否碰到飞机

math - 对推力从当前速度矢量到目标矢量的平滑变化进行编程

快速准确计算double的小数指数

javascript - Math.abs() 限制小数位数