Java 从角度获得较低的旋转值&;度

Java 从角度获得较低的旋转值&;度,java,trigonometry,Java,Trigonometry,RotateItem(true为顺时针,false为逆时针,它永远不能减,否则它将重置为0,尽管这是可变的) 我试图实现的是获得旋转的最短路径&当它指向原点的角度点时也完成旋转 我已经学了几个小时了,现在我的问题是我在学校里从来没有学过三角学,所以我很难理解这些概念&理解什么时候该用什么。(我一直在仔细阅读) 我该怎么做?我在网上找不到任何东西,所以我最终不得不放弃,在盯着一张纸看了两个小时却不知道去了哪里之后,我问你们 注: 面向右侧,船的航向为360/0D。 如果船在-90点正下方,则船在+

RotateItem(true为顺时针,false为逆时针,它永远不能减,否则它将重置为0,尽管这是可变的)

我试图实现的是获得旋转的最短路径&当它指向原点的角度点时也完成旋转

我已经学了几个小时了,现在我的问题是我在学校里从来没有学过三角学,所以我很难理解这些概念&理解什么时候该用什么。(我一直在仔细阅读)

我该怎么做?我在网上找不到任何东西,所以我最终不得不放弃,在盯着一张纸看了两个小时却不知道去了哪里之后,我问你们

注: 面向右侧,船的航向为360/0D。 如果船在-90点正下方,则船在+90点上方。如果船直接向右,则为180度

问题在于2个if语句。当第一个if语句指向某个角度时,它需要停止旋转,第二个if语句将决定哪条路最短。这两种说法是错误的

问题在于这一部分:

public void TurnTowardsPoint(double DestinationX, double DestinationY)
{
    int distX = (int) (DestinationX - x);
    int distY = (int) (DestinationY - y);

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

    //angleDegrees = Math.abs(angleDegrees);

    Log.w("Angle", Integer.toString(angleDegrees));
    Log.w("Degrees", Integer.toString((int) this._degrees));

    if((this._degrees) - 360 != angleDegrees)
    {
        if(this._degrees >= 0)
        {
            RotateItem(true);
        }
        else
        {
            RotateItem(false);
        }


    }
}

好的,如果我没有误解的话,您有
这个。_degrees
,它给出了对象当前指向的方向,以整数度为单位,标准化为介于0(包含)和360(内部或外部?)之间。然后计算旋转后物体指向的方向为
angleDegrees

如果我理解正确,那么计算中会出现符号错误,因为惯例是逆时针方向为正方向(但如果Y轴的0大于1,则会抵消,您必须检查并确定
角度度数
是否应该或必须被抵消)

无论如何,
angleDegrees
提供了您想要转向的方向,范围为-180到180度。将其规格化,使方向位于0到360的范围内

    if((this._degrees) - 360 != angleDegrees)
    {
        if(this._degrees >= 0)
        {
            RotateItem(true);
        }
        else
        {
            RotateItem(false);
        }


    }
该值介于-360和360度之间(更精确地说,介于
-this.\u度
角度
)。而且它可能还不会给出最短的转弯,如果差值小于-180度或大于180度,它会超过半圈,而另一条路会更短,因此我们再次正常化

int turn = angleDegrees - this._degrees;
现在您只需旋转
abs(转动)
度,例如

boolean clockwise = (turn >= 0);
int amount=(圈数<0)?(-转):转;
对于(int i=0;i
好的,如果我没有误解的话,您已经理解了这一点。_度,它给出了对象当前指向的方向,以整数度表示,标准化为介于0(包括)和360(包括或不包括?)之间。然后计算旋转后物体指向的方向为
angleDegrees

如果我理解正确,那么计算中会出现符号错误,因为惯例是逆时针方向为正方向(但如果Y轴的0大于1,则会抵消,您必须检查并确定
角度度数
是否应该或必须被抵消)

无论如何,
angleDegrees
提供了您想要转向的方向,范围为-180到180度。将其规格化,使方向位于0到360的范围内

    if((this._degrees) - 360 != angleDegrees)
    {
        if(this._degrees >= 0)
        {
            RotateItem(true);
        }
        else
        {
            RotateItem(false);
        }


    }
该值介于-360和360度之间(更精确地说,介于
-this.\u度
角度
)。而且它可能还不会给出最短的转弯,如果差值小于-180度或大于180度,它会超过半圈,而另一条路会更短,因此我们再次正常化

int turn = angleDegrees - this._degrees;
现在您只需旋转
abs(转动)
度,例如

boolean clockwise = (turn >= 0);
int amount=(圈数<0)?(-转):转;
对于(int i=0;i
好,那么度可以有什么值?通常是从0到360,如果是这样的话,当你从中减去360时,它将始终面向右方的角度是360,角度也永远不会超过180,就像-180到180。因此,如果船在该点正下方,则角度为-90,或更高,角度为+90?通常是从0到360,如果是这样的话,当你从中减去360时,它将始终面向右方的角度是360,角度也永远不会超过180,就像-180到180。因此,如果船在点正下方,角度将为-90,或更高,角度将为+90。感谢您花时间解决我的问题。你的解释很好:-)。我正在申请。谢谢你花时间解决我的问题。你的解释很好:-)。我现在正在申请。