2012-02-19 43 views
0

我目前有一个物体在空间中飞行,我想让物体转向给定的坐标。将对象转向给定的坐标

由于某些原因,对象旋转而不是自我调整。

我trigganometry几乎是不存在的,到目前为止,我一直在使用的猜测工作,所以基本的解释,请: -/

public void TurnTowardsDestination(double DestinationX, double DestinationY) 
{ 
    //Current Co-Ordinate of the object. 
    double positionX = x; 
    double positionY = y; 

      //My failed attempt at understanding atan2. 
    float spriteToDestAngle = (float) Math.toDegrees(Math.atan2((positionX - DestinationX),(positionY - DestinationY))); 

      //The Rotate, true is clockwise false anti-clockwise. 
    if(spriteToDestAngle > 0.0){ 
     RotateItem(true); 
    }else{ 
     RotateItem(false); 
    } 

    Log.w("direction", Integer.toString((int) spriteToDestAngle)); 
} 

可能有人点我在这个正确的教程或至少解释如何我会让对象向正确的方向移动。


我用一个可行的解决:(对于任何人停留在此) 来源: http://sinepost.wordpress.com/2012/02/16/theyve-got-atan-you-want-atan2/

int distX = (int) (DestinationX - x); 
    int distY = (int) (DestinationY - y); 

    double angleRadians = Math.atan2(distY, distX); 
    int angleDegrees = (int)Math.toDegrees(angleRadians); 

    //setRotation(angleDegrees); 
+3

试图做任何形式的计算机图形没有基本的几何和三角学知识将是非常不积极的。我强烈建议你学习一些! – 2012-02-19 17:08:27

+0

你能推荐一些很好的教程网站吗? – 2012-02-19 17:11:47

+0

我建议购买例如这是一本高中数学教科书,并且通过练习来完成。 – 2012-02-19 17:53:05

回答

0

关于此by Neil Brown有综合性文章。 Neil正在编写基于Java的Greenfoot,所以它应该是非常直接的移植示例代码。

+0

谢谢你的链接,我会去尽管它。 – 2012-02-19 18:14:43

+0

该教程帮助我弄清楚了。谢谢! – 2012-02-19 19:30:32

0

您可能会发现Line2D.relativeCCW(Point2D)在确定是非常有用的一个点是顺时针还是从给定的矢量逆时针旋转。

+0

“表示相对于此Line2D的指定坐标的位置的整数”。 Line2D从哪里来?该项目的X-Y? – 2012-02-19 17:18:22

+0

您会从对象朝向其所朝向的方向创建Line2D。 – 2012-02-19 17:19:35

0

我只想指出你的trig在这里其实很漂亮,只是你的逻辑是不正确的。例如,如果您的目的地位于当前位置之上,则spriteToDestAngle将为90.即使您直接指向它,代码也会指出它应该旋转。你应该存储当前的方向并与之相比较。

编辑:

为了澄清,你从来没有考虑到当前的方向。您仅基于位置进行旋转。

+0

我仍然建议您尝试并利用Louis Wasserman的建议,因为他们可能会采用更快的算法来解决顺时针,逆时针问题。 – 2012-02-19 17:22:56

+0

谢谢,我正在研究它。尽管如此,我并不清楚如何实现它。 – 2012-02-19 18:15:25

相关问题