首页 文章

C沿角度移动2D点

提问于
浏览
1

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

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

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

2 回答

  • 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进行旋转会开始崩溃,并且您开始真正受益于学习基于矩阵的方法 .

  • 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度以外的其他角度 .

相关问题