找到2度罗盘之间的最近区别 – Javascript

我基本上试图找到指南针两点之间有多少度。 例如,如果一个人面对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)); }); });    

我确信有一些简单的数学函数我不知道,我似乎无法弄明白。

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

 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 

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

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

够了吗?

我不确定你期望它如何工作,(我没有尝试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 

小提琴