找到两个轴承之间的角度

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了找到两个轴承之间的角度相关的知识,希望对你有一定的参考价值。

鉴于两个轴承,我如何找到它们之间的最小角度?

因此,例如,如果1个航向为340度而第二个航向为10度,则最小角度为30度。

我附上一张照片来表明我的意思。我试过从另一个中减去一个,但由于圆圈的环绕效果而无效。我也尝试过使用负度(180 - 359为-180到0),但是当试图计算正数和负数之间的角度时,它会搞砸。

我敢肯定,有一个更简单的方法,有很多if声明。

谢谢您帮忙。亚当

BTW。这是一个导航问题,因此圆的半径是未知的。

答案
float getDifference(float a1, float a2) {
    return Math.min((a1-a2)<0?a1-a2+360:a1-a2, (a2-a1)<0?a2-a1+360:a2-a1)
}
另一答案

我最终使用了this message board上的以下公式,因为我需要根据方向(顺时针或逆时针)对结果进行签名。它可以很好地解释究竟发生了什么。

((((bearing - heading) % 360) + 540) % 360) - 180
另一答案

关于什么:

angle = Math.abs(a1-a2);
if (angle > 180)
    angle = 360 - angle;

你提到了关于正数和负数的问题,所以也许我在这里不考虑......

另一答案

如果需要角度方向,那么这将起作用:

    int maxBearing = Math.max(bearing0, bearing1);
    int minBearing = Math.min(bearing0, bearing1);
    int firstDir = maxBearing - minBearing;  
    int secondDir = minBearing + 360 - maxBearing;  
    int diff = Math.min(firstDir, secondDir);

    boolean anticlock_dir = false;

    int anticlock = bearing1 + diff;
    if (anticlock >= 360)
        anticlock = anticlock - 360;

    if (anticlock ==  bearing0)
        anticlock_dir = true;
另一答案

对于导航,您可能想知道b1是b2的左侧还是右侧,所以这里它的功能很好。 (假设0不是用例)

function isBearing1LeftOrRightOfBearing2 (b1, b2) {
  if (Math.sign(((b1 - b2 + 540) % 360) - 180) > 0) {
    return 'left'
  } else {
    return 'right'
  }
}
另一答案

你需要考虑两个方向的差异。

public static double bearingDiff(double a, double b) {
    double maxBearing = Math.max(a, b);
    double minBearing = Math.min(a, b);
    double antiClockwiseDiff = maxBearing - minBearing;
    double clockwiseDiff = minBearing + 360 - maxBearing;
    return Math.min(antiClockwiseDiff, clockwiseDiff);
}

以上是关于找到两个轴承之间的角度的主要内容,如果未能解决你的问题,请参考以下文章

两个轴承之间的差异(角度)

OSMnx:节点之间的角度

比较角度与角度范围

如何计算两个轴承之间的最小旋转

试图找到两个向量之间的角度(三角形)(HTML5 Canvas)

如何找到两个角度之间的差异?