以角度为单位,如何使用x和y找到行进路线的逻辑?(数学难题)

5
我正在使用HTML5画布制作一个简单的游戏,它涉及驾驶一辆小汽车。
向上箭头移动汽车,左右箭头控制方向。
我已经解决了旋转问题,但现在需要根据角度移动其x和y位置,当按住向上键时,基于它所处的角度。
例如:
角度为0时,向上箭头只会影响y坐标。
角度为45时,向上箭头将以相等的速度影响x和y坐标。
如果角度是32,我可以使用什么逻辑?

一个90度的角度难道不仅影响x坐标吗? - R. Martinho Fernandes
汽车是否应该有任何动量?如果是这样,那么质量和力都需要被利用。 - Hamish Grubijan
抱歉,我是说45。一旦基本控件正常工作,我将实现动量 :) - Sabai
2个回答

11

你可以尝试像这样做

   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;

1
thrust 应该放在括号外面 -- 除此之外,你比我先完成了 :) - Sven Marnach
2
请注意,在原始帖子中,角度0沿着y轴,而您采用了通常的数学约定,使0度指向x方向。 - Sven Marnach
1
干得好,但只需更改x和y函数,如果可以的话,我会点赞你(每日限制)。 - Saeed Amiri
Henryz,你想让角度为0向左移动还是向右移动?我会为你修改js fiddle。 - Loktar
1
我有一些经验,但我会再发另一个问题。很多人比我有更丰富的经验,所以我相信你会得到一些很棒的答案。 - Loktar
显示剩余7条评论

1

你真的是指两个轴都需要移动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度。我已经尝试让它工作了,但没有成功。:( - Sabai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接