我正在用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;
}
答案 0 :(得分:1)
请勿为此使用角度。 (如果可以避免,则不要对任何角度使用角度。)如果该帧的[xDiff,yDiff]
与当前航向矢量之间的点积为负,则该角度大于180度。 (此外,perp点积指示您是否需要左转或右转。)