如何在飞行中找到箭头的角度

时间:2011-10-11 20:42:30

标签: iphone objective-c geometry cocos2d-iphone game-physics

我想要的是箭头从不同的x和y速度的初始位置(60,60)拍摄,并且弓射出的角度将根据用户触摸屏幕的位置而改变。

箭头在速度和重力方面完美地移动,但是我如何获得箭头的角度,比如它是否以45度角射击开始,当y = 0时箭头是180度?当重力开始使箭头慢慢指向下方时? 精灵也会从中心移动箭头图像。

3 个答案:

答案 0 :(得分:2)

Tim的回答正确地确定了速度矢量的分量与其方向之间的正确几何关系,即反正切函数。 Tim建议使用arctan(y/x)计算arctangeant。 (实际上我认为它被称为atan()而不是arctan()?)。

然而,使用atan()计算arctangent时存在一些模糊性:

  • atan(y/x)的结果仅限于-90°,90°[。
  • 如果x和y都是负数,它将得到相同的结果,就像x和y都是正数一样。因此,除非您测试x和y的符号并相应地进行校正,否则您的箭头将始终指向左侧,从不向下,从不向右 -
  • 当x = 0时除以零。

我不知道目标C,但大多数语言都有atan2(x,y)函数:

    atan(y/x)x均为正数时,
  • 会返回与y相同的内容,
  • 不限于] -90°,90°[但可以全圆] -180°,180°],因此当x和/或y为负时返回正确的结果,
  • 当x = 0时,
  • 不给出“除以零”,而是正确地返回0°或180°。

实际上,Objective C确实有atan2()函数。如果我是你,我会查找文档。

答案 1 :(得分:1)

角度为arctan(y/x),水平指向右方向为0,垂直方向为90°。注意,这是坐标系具有0°=直接向东的家;确保增加或减去箭头指向的角度。

答案 2 :(得分:1)

关键是箭头应指向它,使其与行进的曲线相切。因此,如果箭头的路径是(x(t),y(t)),则箭头应指向与矢量相同的方向(x'(t),y'(t)),其中x'(t)是x(t)的导数。如果你有x(t)和y(t),这可能是最简单的。

另一种看待它的方法是x'(t)只是速度的x分量。因此,如果你有速度分量vx(t)和vy(t),那么箭头应指向与矢量相同的方向(vx(t),vy(t))