我正在尝试确定圆上的一个度数是否更接近圆上另一个度数的右或左。
例如,如果我的航向为350度,另一个航向为10度,则我需要能够确定圆上350度右边的10度(因为它与航向仅20度)。右侧-与左侧340度相反)。
这怎么实现?
答案 0 :(得分:1)
您真正需要的是看看deg1
和deg2
之间的差是小于180(然后deg2在右侧)还是大于(然后deg2在左侧)>
问题在于,360
处的度数重置意味着10
和350
之间的差异为20。为此,您可以将360和模块乘以360。 / p>
赞
function closerSide(deg1, deg2){
return (360+deg1-deg2)%360 > 180 ? 'deg2 on the right' : 'deg2 on the left'
}
function from180(deg){return Math.abs(180-deg)}
// tests
[[10, 350], [200,220], [30, 50], [350, 10], [180, 50]].forEach(t => console.log(closerSide(...t)))
答案 1 :(得分:0)
对于高于180度的度,如果将其从360中减去,则等于180度以下的度。
然后,您可以比较它们的差异,从而从1e度中找出2度在哪一侧。
function degreeRightOrLeft (degree1, degree2) {
let d1 = (degree1 > 180) ? 360 - degree1 : degree1;
let d2 = (degree2 > 180) ? 360 - degree2 : degree2;
let diff = d2 - d1;
return (diff > 0) ? 'Left'
: (diff < 0) ? 'Right'
: (diff === 0) ? 'Same'
: undefined;
}
degrees = [[10, 20], [350, 340], [0, 360], [10,340], [350, 20], [90, 270], [160, 200], [180, 160]];
degrees.forEach(d => { console.log(`(${d[0]}, ${d[1]}) : ${degreeRightOrLeft(d[0], d[1])}`)} )