因此,我正在用C++编写游戏,目前正在开发“指南针”,但是 vector 数学存在一些问题。
这是我创建的一个小图像,可能有助于更好地解释我的问题
好的,因此您可以看到A
的2D位置从(4, 4)
开始,但是然后我想沿45度角移动A
直到2D位置达到(16, 16)
,所以A
的起始位置和结束的位置之间基本上存在12个距离。我的问题是我将如何计算呢?
最佳答案
2D中最简单的方法是取 Angular “ang”和距离“d”,以及起点“x”和“y”:
x1 = x + cos(ang) * distance;
y1 = y + sin(ang) * distance;
在2D中,任何对象的旋转都可以存储为单个值ang。
将cos用于x,将sin用于y是几乎每个人都使用的“标准”方法。 cos(ang)和sin(ang)随着ang的增加而画出一个圆。 ang = 0沿x轴指向此处,随着 Angular 增加,它会逆时针旋转(即,在90度时,它指向正上方)。如果将cos和sin项交换为x和y,则ang = 0沿y轴指向上方,并随着ang的增加而顺时针旋转(因为它是镜像),因此实际上可以更方便地制作游戏,因为y轴通常是“向前”方向,您可能希望ang旋转向右旋转。
x1 = x + sin(ang) * distance;
y1 = y + cos(ang) * distance;
稍后,您可以使用 vector 和矩阵来做相同的事情,但方式更灵活,但是cos / sin可以很好地用于2D游戏。在3D游戏中,在某些情况下使用cos和sin旋转会开始崩溃,并且您开始真正从学习基于矩阵的方法中受益。