找到2度指南针之间最接近的区别 - Javascript

时间:2014-06-24 16:44:02

标签: javascript jquery html radians

我基本上试图找出指南针两点之间有多少度。例如,如果一个人面对270并且他们的指南针是280,那么这两个点之间有10度。如果相对于第一个标题,我还喜欢左侧和右侧的负数。

例如,标题为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/

3 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:2)

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

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

就够了吗?

答案 2 :(得分: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;
}

fiddle