我基本上是想找出一个指南针的两个点相隔多少度。例如,如果一个人面对270,而他们的指南针是280,那两个点之间就有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/
发布于 2014-06-24 16:58:31
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-24 16:55:46
首先,你为什么要来回转换弧度和学位?看看这个。http://jsfiddle.net/dTmPn/5/
var diff = _Heading2-_Heading1;
if(diff>180) diff-=360;
if(diff<-180) diff+=360;
return diff;够了吗?
发布于 2014-06-24 16:57:52
我不知道你期望它如何工作(我没有试过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;
}https://stackoverflow.com/questions/24392062
复制相似问题