C++;沿角度移动二维点 所以我在用C++编写游戏,目前我正在研究一个“指南针”,但是我在向量数学方面有一些问题…

C++;沿角度移动二维点 所以我在用C++编写游戏,目前我正在研究一个“指南针”,但是我在向量数学方面有一些问题…,c++,vector,2d,trigonometry,angle,C++,Vector,2d,Trigonometry,Angle,这是我创建的一个小图片,可能有助于更好地解释我的问题 好的,正如你所看到的,A的2D位置从(4,4)开始,但是我想沿着45度角移动A,直到2D位置达到(16,16),所以基本上A开始和结束之间有12个距离。我的问题是我该怎么计算呢?从(4,4)到(16,16)的距离实际上不是12。使用毕达哥拉斯定理,距离实际上是sqrt(12^2+12^2),即16.97。要沿直线获取点,请使用正弦和余弦。例如,如果要计算沿直线一半的点,则x坐标为cos(45)(16.97/2),y坐标为sin(45)(16

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


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

从(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度以外的其他角度。

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度时,它指向正上方)。如果你将cos和sin项替换为x和y,你会得到ang=0,沿着y轴向上,随着ang的增加顺时针旋转(因为这是一个镜像),这实际上可能更便于制作游戏,因为y轴通常是“向前”的方向,你可能会喜欢增加ang向右旋转

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

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

我记得前几天看到了一个类似的问题,但这没有意义。你是在问如何在二维平面上平移一个点,给定一个角度和大小的方向吗?这个问题定义得很糟糕,正如@George所说,根本没有意义。如果您已经知道触发器的最终位置,为什么要使用触发器移动
A
?请清楚地定义给定的信息,并考虑将问题移动到更合适的地方,例如数学堆栈交换,因为这与编程或C++无关。