首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >找出指南针2度之间最接近的差- Javascript

找出指南针2度之间最接近的差- Javascript
EN

Stack Overflow用户
提问于 2014-06-24 16:44:01
回答 3查看 1.1K关注 0票数 1

我基本上是想找出一个指南针的两个点相隔多少度。例如,如果一个人面对270,而他们的指南针是280,那两个点之间就有10度。我还想要一个负数,如果是左边,右边是正数,相对于第一个标题。

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

下面是我的代码示例:

代码语言:javascript
复制
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/

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-24 16:58:31

代码语言:javascript
复制
function GetHeadingDiff(_Heading1, _Heading2)
{   
    return (_Heading2-_Heading1+540) % 360 - 180;
}

示例:

代码语言:javascript
复制
GetHeadingDiff( 280, 270 )
-10
GetHeadingDiff( 270, 280 )
10
GetHeadingDiff( 350, 20 )
30
GetHeadingDiff( 20, 350 )
-30
票数 11
EN

Stack Overflow用户

发布于 2014-06-24 16:55:46

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

代码语言:javascript
复制
var diff = _Heading2-_Heading1;
if(diff>180) diff-=360;
if(diff<-180) diff+=360;
return diff;

够了吗?

票数 2
EN

Stack Overflow用户

发布于 2014-06-24 16:57:52

我不知道你期望它如何工作(我没有试过10-30,得到了19.999996),但这将是基于你的代码的一般想法。

代码语言:javascript
复制
sum1 = ConvertToDegrees((ConvertToRadians(_Heading2) - ConvertToRadians(_Heading1)));
sum2 = ConvertToDegrees((ConvertToRadians(_Heading1) - ConvertToRadians(_Heading2)));

return sum1 < sum2 ? sum1 : sum2;

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

我会这样做:

代码语言:javascript
复制
function GetHeadingDiff(s1, s2)
{  
    r1 = (s1 - s2 + 360 ) % 360;
    r2 = (s2 - s1 + 360 ) % 360;

    return r1<r2?r1:r2;
}

小提琴

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24392062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档