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