C ++沿角度移动2D点

时间:2017-05-02 22:48:26

标签: c++ vector 2d trigonometry angle

所以我正在用C ++编写一个游戏,目前我正在编写一个“指南针”,但我在向量数学方面遇到了一些问题..

这是我创建的一个小图片,可能有助于更好地解释我的问题 enter image description here

好的,因为你可以看到A的2D位置从(4, 4)开始,但是我想沿着45度角移动A,直到2D位置到达{{ 1}},所以基本上(16, 16)开始和结束之间有12个距离。我的问题是我如何计算这个?

2 个答案:

答案 0 :(得分:5)

2D中最简单的方法是取角度'ang',距离'd',起点'x'和'y':

x1 = x + cos(ang) * distance;
y1 = y + sin(ang) * distance;

在2D中,任何对象的旋转都可以存储为单个值ang。

使用cos表示x和sin表示y是几乎每个人都这样做的“标准”方式。当ang增加时,cos(ang)和sin(ang)跟踪一个圆圈。这里,ang = 0点沿x轴向右,并且当角度增加时,它逆时针旋转(即90度,它指向上方)。如果你交换x和y的cos和sin项,你会得到ang = 0沿y轴向上,顺时针旋转增加ang(因为它是一个镜像),这实际上可以更方便地制作游戏,因为y轴通常是“向前”方向,你可能会喜欢增加ang向右旋转。

x1 = x + sin(ang) * distance;
y1 = y + cos(ang) * distance;

稍后你可以进入矢量和基质,它们做同样的事情,但是以更灵活的方式,但是cos / sin可以在2D游戏中开始使用。在3D游戏中,在某些情况下使用cos和sin进行旋转会开始崩溃,并且您开始真正受益于学习基于矩阵的方法。

答案 1 :(得分:2)

(4,4)和(16,16)之间的距离实际上不是12。使用毕达哥拉斯定理,距离实际上是sqrt(12 ^ 2 + 12 ^ 2),即16.97。要获得沿线的点,你想要使用正弦和余弦。例如。如果你想计算沿着线的中间点,x坐标将是cos(45)(16.97 / 2),y将是sin(45)(16.97 / 2)。这将适用于除45度以外的其他角度。