C++ 沿角度移动二维点

标签 c++ vector 2d trigonometry angle

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

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

好吧,你可以看到 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/

相关文章:

c++ - 专门化模板类的功能

c++ - C代码仍然被认为是C++吗?

python - 量化 numpy 向量的快速方法

c++ - openGL 中带有/对象的静态背景。 "bake"的最佳方式?

c++ - 在c++中声明变量常量有什么意义

c++ - 在 C++11 中将映射函数添加到 vector

c++ - 为什么 std::vector 可以比原生数组更高效?

C++ 在 vector 中查找

java - 一个好的 Java 2d 引擎?

java - 找到与方向无关的两个 vector 的交点