所以我正在用 C++ 编写游戏,目前我正在研究“指南针”,但我在 vector 数学方面遇到了一些问题..
好吧,你可以看到 A
的二维位置从 (4, 4)
开始,但是我想移动 A
沿着 45 度角直到 2D 位置到达 (16, 16)
,所以基本上 A
开始和结束的位置之间有 12 的距离。我的问题是如何计算这个?
最佳答案
2D 中最简单的方法是采用角度“ang”和距离“d”,以及起点“x”和“y”:
x1 = x + cos(ang) * distance;
y1 = y + sin(ang) * distance;
在 2D 中,任何对象的旋转都可以存储为单个值,ang。
对 x 使用 cos,对 y 使用 sin 是几乎每个人都这样做的“标准”方法。 cos(ang) 和 sin(ang) 随着 ang 的增加画出一个圆。 ang = 0 指向此处的 x 轴,随着角度的增加,它会逆时针旋转(即 90 度时,它会笔直向上)。如果你交换 x 和 y 的 cos 和 sin 项,你会得到 ang = 0 沿 y 轴向上指向并随着 ang 的增加顺时针旋转(因为它是镜像),这实际上可能更方便制作游戏,因为y 轴通常是“向前”方向,您可能喜欢向右旋转增加的角度。
x1 = x + sin(ang) * distance;
y1 = y + cos(ang) * distance;
稍后您可以学习以更灵活的方式执行相同操作的 vector 和矩阵,但 cos/sin 很适合在 2D 游戏中入门。在 3D 游戏中,使用 cos 和 sin 进行旋转在某些情况下开始失效,您开始真正受益于学习基于矩阵的方法。
关于C++ 沿角度移动二维点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43748418/