给定一个以度为单位的角度,我如何使用 x 和 y 找到行进线的逻辑? (数学困境)

Posted

技术标签:

【中文标题】给定一个以度为单位的角度,我如何使用 x 和 y 找到行进线的逻辑? (数学困境)【英文标题】:Given an angle in degrees, how can I find the logic for line of travel using x and y? (Math dilemma) 【发布时间】:2011-06-27 18:20:28 【问题描述】:

我正在用 html5 画布制作一个简单的游戏,它涉及驾驶一辆小汽车。

向上箭头移动汽车,左右箭头控制汽车。

我已经对旋转进行了排序,但是现在它需要在按住向上键时根据它所处的角度移动它的 x 和 y 位置。

例子:

角度为0,向上箭头只会影响y坐标。

角度为 45,向上箭头会以相同的速度影响 x 和 y 坐标。

如果角度是 32,我可以使用什么逻辑?

【问题讨论】:

90度角不会只影响x坐标吗? 汽车应该有动力吗?如果是这样,则需要同时利用质量和力。 对不起,我的意思是 45。一旦基本控制工作正常,我将实施动力 :) 【参考方案1】:

你可以试试这样的

   velY = Math.cos(angle * Math.PI / 180) * thrust;
   velX = Math.sin(angle * Math.PI / 180) * thrust;

    x += velX;
    y -= velY;

简单的例子,角度只是在每个循环中递增。

http://jsfiddle.net/j5U5h/5/

角度 0 向上,就像您在最初的问题中所说的那样。

这是修改后的 jsfiddle,因此角度为 0 会使您向右移动。

http://jsfiddle.net/j5U5h/7/

 velX = Math.cos(angle * Math.PI / 180) * thrust;
 velY = Math.sin(angle * Math.PI / 180) * thrust;

 x += velX;
 y += velY;

要让 0 开始向右移动,只需更改为这个,

velX = -Math.cos(angle * Math.PI / 180) * thrust;

【讨论】:

thrust 应该在括号之外——除此之外你打败了我:) 请注意,在 OP 中,角度 0 沿 y 轴,而您采用通常的数学惯例,即 0 度指向 x 方向。 干得好,但只需更改 x 和 y 函数,如果可以的话,我会为你投票(每日限制) 您好,感谢您的宝贵时间。只有左右键会影响角度。 我有一些经验,不过我会发布另一个问题,很多人的经验比我自己多,所以我知道你会得到一些很好的答案。【参考方案2】:

您的意思是 90 真的是平等地移动两个轴吗?在我看来,它应该是 45 移动两个轴。

如果 45 等量移动两个轴:

xfactor = angle * (1/90)
yfactor = (90 - angle) * (1/90)

xpos = xpos + (xincrement * xfactor)
ypos = ypos + (yincrement * yfactor)

如果 90 相等地移动两个轴:

xfactor = (2 * angle) * (1/180)
yfactor = (180 - (2 * angle)) * (1/180)

xpos = xpos + (xincrement * xfactor)
ypos = ypos + (yincrement * yfactor)

【讨论】:

嗨,我的意思是 45 度。我试图让这个工作,但没有运气。 :(

以上是关于给定一个以度为单位的角度,我如何使用 x 和 y 找到行进线的逻辑? (数学困境)的主要内容,如果未能解决你的问题,请参考以下文章

逆正弦、余弦和正切的代码

如何将欧拉角转换为前、上、右向量

Leaflet - 使用latLon +距离(米)+角度(度)创建标记

python Python:math,atan2,degrees:以度为单位计算反正切角度(theta)

GLSL:用旋转矢量旋转?

glRotate(angle,x,y,z),在这种情况下 x,y,z 是啥?