C++ 沿角度移动二维点
C++ Move 2D Point Along Angle
所以我正在用 C++ 编写游戏,目前我正在开发 'Compass',但我在矢量数学方面遇到了一些问题..
这是我创建的一张小图片,可能有助于更好地解释我的问题
好的,所以你可以看到 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。
对 x 使用 cos,对 y 使用 sin 是 "standard" 几乎每个人都这样做的方式。 cos(ang) 和 sin(ang) 随着 ang 的增加画出一个圆。 ang = 0 指向此处的 x 轴,随着角度的增加,它会逆时针旋转(即 90 度时,它会笔直向上)。如果你交换 x 和 y 的 cos 和 sin 项,你会得到 ang = 0 沿 y 轴向上指向并随着 ang 的增加顺时针旋转(因为它是镜像),这实际上可能更方便制作游戏,因为y 轴通常是 "forward" 方向,您可能喜欢增加角度向右旋转。
x1 = x + sin(ang) * distance;
y1 = y + cos(ang) * distance;
稍后您可以学习以更灵活的方式做相同事情的向量和矩阵,但是 cos/sin 很适合在 2D 游戏中入门。在 3D 游戏中,使用 cos 和 sin 进行旋转在某些情况下开始失效,您开始真正受益于学习基于矩阵的方法。
所以我正在用 C++ 编写游戏,目前我正在开发 'Compass',但我在矢量数学方面遇到了一些问题..
这是我创建的一张小图片,可能有助于更好地解释我的问题
好的,所以你可以看到 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。
对 x 使用 cos,对 y 使用 sin 是 "standard" 几乎每个人都这样做的方式。 cos(ang) 和 sin(ang) 随着 ang 的增加画出一个圆。 ang = 0 指向此处的 x 轴,随着角度的增加,它会逆时针旋转(即 90 度时,它会笔直向上)。如果你交换 x 和 y 的 cos 和 sin 项,你会得到 ang = 0 沿 y 轴向上指向并随着 ang 的增加顺时针旋转(因为它是镜像),这实际上可能更方便制作游戏,因为y 轴通常是 "forward" 方向,您可能喜欢增加角度向右旋转。
x1 = x + sin(ang) * distance;
y1 = y + cos(ang) * distance;
稍后您可以学习以更灵活的方式做相同事情的向量和矩阵,但是 cos/sin 很适合在 2D 游戏中入门。在 3D 游戏中,使用 cos 和 sin 进行旋转在某些情况下开始失效,您开始真正受益于学习基于矩阵的方法。