C++沿角度移动2D点

rfl*_*dev 1 c++ 2d trigonometry vector angle

所以我正在用C++编写一个游戏,目前我正在研究一个'指南针',但是我对矢量数学有一些问题.

这是我创建的一个小图片,可能有助于更好地解释我的问题 在此输入图像描述

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

Jas*_*ang 8

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

x1 = x + cos(ang) * distance;
y1 = y + sin(ang) * distance;
Run Code Online (Sandbox Code Playgroud)

在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;
Run Code Online (Sandbox Code Playgroud)

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