1

我基本上是想找出罗盘的两点相距多少度。例如,如果一个人面向 270,而他们的指南针是 280,那么这 2 点之间有 10 度。我也想要一个负数,如果它在左边,在右边是正数,相对于第一个标题。

例如,当 to 标题为 350 和 020 时,就会出现问题。这两点相距 30 度,但结果为 -330。

下面是我的代码示例:

function ConvertToRadians(_var)
{
    return _var * (Math.PI/180);
}
function ConvertToDegrees(_var)
{
    return _var * (180/Math.PI);
}
function GetHeadingDiff(_Heading1, _Heading2)
{   
    return ConvertToDegrees((ConvertToRadians(_Heading2) - ConvertToRadians(_Heading1)));
}

$(document).ready(function (){
    $('#process').click(function (e){
        e.preventDefault();
        var Hdg1 = parseFloat($('#heading1').val());
        var Hdg2 = parseFloat($('#heading2').val());
        $('#results').html(GetHeadingDiff(Hdg1,Hdg2));
    });
});

<input id="heading1" type="text" />
<input id="heading2" type="text" />
<button id="process" type="button">Submit</button>
<div id="results">
</div>

我确定我缺少一些简单的数学函数,我似乎无法弄清楚。

这是一个 jsfiddle 链接http://jsfiddle.net/dTmPn/3/

4

3 回答 3

11
function GetHeadingDiff(_Heading1, _Heading2)
{   
    return (_Heading2-_Heading1+540) % 360 - 180;
}

例子:

GetHeadingDiff( 280, 270 )
-10
GetHeadingDiff( 270, 280 )
10
GetHeadingDiff( 350, 20 )
30
GetHeadingDiff( 20, 350 )
-30
于 2014-06-24T16:58:31.240 回答
2

首先,你为什么要来回转换弧度和度数?看这个。http://jsfiddle.net/dTmPn/5/

var diff = _Heading2-_Heading1;
if(diff>180) diff-=360;
if(diff<-180) diff+=360;
return diff;

够了吗?

于 2014-06-24T16:55:46.630 回答
0

我不确定您期望它如何工作(我没有尝试 10-30 并得到 19.999996),但这将是基于您的代码的一般想法。

sum1 = ConvertToDegrees((ConvertToRadians(_Heading2) - ConvertToRadians(_Heading1)));
sum2 = ConvertToDegrees((ConvertToRadians(_Heading1) - ConvertToRadians(_Heading2)));

return sum1 < sum2 ? sum1 : sum2;

这会在相反方向计算两次并返回较小的总和。

我会这样做:

function GetHeadingDiff(s1, s2)
{  
    r1 = (s1 - s2 + 360 ) % 360;
    r2 = (s2 - s1 + 360 ) % 360;

    return r1<r2?r1:r2;
}

小提琴

于 2014-06-24T16:57:52.787 回答