我目前有一个物体飞过太空,我想让物体转向一个给定的坐标。
由于某种原因,物体旋转而不是自行调整。
我的三角测量几乎不存在,到目前为止我一直在使用猜测工作,所以基本的解释请: - /
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);
答案 0 :(得分:0)
您可能会发现Line2D.relativeCCW(Point2D)
在确定点是顺时针还是逆时针从给定矢量非常有用。
答案 1 :(得分:0)
我只想指出你的触发器实际上听起来很合理,只是你的逻辑不正确。例如,如果您的目标位于当前位置的正上方,则spriteToDestAngle将为90.即使您直接指向它,您的代码也会指出它应该旋转。你应该存储当前的方向并与之比较。
修改强>
澄清一下,你从不考虑当前的方向。您只能根据位置进行轮换。
答案 2 :(得分:0)
有一篇关于这个by Neil Brown的综合文章。 Neil正在使用基于Java的Greenfoot编写代码,因此应该非常直接地移植示例代码。