java转圈转向不足

时间:2019-03-04 15:25:03

标签: java

我正在用Java构建一个机器人,并且正在实现一个可以计算两个坐标(x1,y1),(x2,y2)之间的角度的转弯系统,但是该机器人当前正在转弯,即如果我告诉它转90度离开它只会转动40,所以我需要输入更多转向。根据所需的转弯角度是否大于180,机器人可以向左转或向右转。下面的代码有效,但仅当起始航向为0度时,我才需要代码来考虑当前位置。

        double xDiff = x2 - x1;
        double yDiff = y2 - y1;
        double angle =  Math.toDegrees(Math.atan2(yDiff, xDiff));

        double currentAngle = 0; //is changed after first run 

        angle = (angle + 360) % 360; 

        angle = angle - currentAngle;

使角度介于-180和180之间

     if (angle > 180)  
         angle -= 360;

        if(angle < 0 )
        {
            angle = angle - 45;

        }
        else if(angle > 0)
        {
            angle = angle + 45;

        }

1 个答案:

答案 0 :(得分:1)

请勿为此使用角度。 (如果可以避免,则不要对任何角度使用角度。)如果该帧的[xDiff,yDiff]与当前航向矢量之间的点积为负,则该角度大于180度。 (此外,perp点积指示您是否需要左转或右转。)