回答
您有一个值将包含关闭程度找到found_degree
和一个实际差异degree_difference
。
接下来,迭代整个数组并计算两个值:abs(degree_at_position - target_degree)
和abs(degree_at_position - 360 - target_degree)
。如果其中一个值小于degree_difference
,则表示您有更近的学位 - 将其存储在found_degree
中,并相应地更新degree_difference
。
就是这样。
你可能应该初始化found_degree
与-1和degree_difference
与360,只是为了确保你可以正确解释结果的情况下,一个空的给定数组 - 也可以单独处理空输入数组的情况。
顺便问一下这是作业吗?
减去这两个数字。如果差值大于180 [或低于-180],则减去[或加上] 360.现在只需比较差值的绝对值即可。
+1,但需要获得差异的绝对值并与180比较(例如可以是-200),然后从360减去。 – RobG
@RobG,好点。我已经编辑了相应的答案。 –
下面是一个实际的公式:
degreediff = min(abs(x-y),360-abs(x-y))
蛮力的办法是这样的:
var closestElement;
var closestDivergence = 360;
var toCompare = 355;
var choices = [1, 90, 200, 280, 355];
for(i=0;i<choices.length;i++){
var currentDivergence=choices[i] - toCompare;
if (currentDivergence<0) {
currentDivergence+=360;
}
if (currentDivergence < closestDivergence){
closestDivergence = currentDivergence;
closestElement = i;
}
}
if (closestElement != NaN){
alert('Closest value is '+choices[closestElement]);
}
不适用于零值附近,例如1接近355比10(每OP)。 – RobG
非常正确,我修改了我的答案。 –
这里有一个可爱的小匆匆
function closest(deg,ar) {
return ar.sort(function(a,b){var c = deg; return Math.min(360 - (a-c),Math.abs(a-c)) - Math.min(360 - (b-c),Math.abs(b-c))})
}
var myArray = [355, 280, 200, 181, 90, 30];
alert(closest(180,myArray));
排序,并返回根据哪一个是最接近提供的程度的阵列。索引0最接近。它确实使得355比0更接近0。
首先使用给定的度数(在您的示例中为1)检查数组(检查哪个元素最接近),然后添加360并检查该度(361)。比较其效果更好:
X给定的程度,y中的第一个结果,z中的第二个结果
if (abs(x-y) < 360+x-z)
choose y;
else
choose z;
如果数组进行排序,你可以用二进制排序,让你O(日志检查n)最坏情况下的时间。否则,你必须浏览整个阵列两次。
此公式只适用于圆形。这当然是伪代码。
degree diff = min(abs(x-y),360-abs(x-y))
使用从当前页我设法想出这个代码中的注释:
function closest(deg, degs) {
deg = (deg/360 > 1 ? deg - (Math.floor(deg/360)*360) : deg);
var difference = 360;
var closest = -1;
for(i=0;i<degs.length;i++) {
var x = degs[i];
var diff = Math.min(Math.abs(x-deg),360-Math.abs(x-deg))
if(diff <= difference) {
closest = i;
difference = diff;
}
};
return closest;
}
最接近(1000,[10,90,200,280,355]) ;
这是更紧凑,更高效:
function difference(a, b) {
var d = Math.abs(a - b);
return d > 180 ? 360 - d : d;
};
function closest(a, bs) {
var ds = bs.map(function(b) { return difference(a, b); });
return bs[ds.indexOf(Math.min.apply(null, ds))];
};
> difference(1, 355)
6
> closest(1, [10, 90, 200, 280, 355])
355
- 1. 在数组中找到最接近的经度和纬度?
- 2. 如何找到给定数组的最大跨度?
- 3. Spatialite为给定的经纬度找到最近的节点
- 4. Spatialite SQL查询查找给定纬度/经度的最近节点
- 5. 找到最接近的跨度id来替换跨度内容
- 6. MarkClusterer地图问题:找到最接近的经度/纬度
- 7. 给定偶数个顶点,如何根据邻近度找到最佳的一组对数?
- 8. 查找最接近给定数字的数组中的数字
- 9. 从给定的纬度,经度和半径值中查找java中的最大和最小纬度和纬度
- 10. 如何从给定的经纬度找到经度为X(k)米的纬度/经度?
- 11. 查找数组最大最接近给定数数
- 12. 在纬度/经度列表中找到纬度和经度的最接近的匹配
- 13. R - 在给定的半径内找到最近的邻近点和邻居数,坐标经纬度为
- 14. 与最接近的经度和纬度
- 15. 获得最近的纬度和经度
- 16. JSON经度纬度最近的位置
- 17. 匹配最接近的经度/纬度
- 18. 找到长度为n的数组中最重复的元素
- 19. 查找最近的邻居/经度
- 20. 从经度和纬度的列表中找到的接近点
- 21. 查找给定条件下2D数组中路径的最大长度
- 22. 如何在文本文件中找到最接近的纬度和长度?
- 23. 如何使用纬度和经度查找最近的商店?
- 24. 查找25纬度和经度表的最近地址
- 25. 查找离纬度/经度坐标最近的5个车站
- 26. 通过纬度和经度查找最近的地方
- 27. 查找与经度/纬度最接近的城市
- 28. 给定一组数据点,找到一个“最接近”的点
- 29. 如何获得最近的位置给定的纬度和经度?
- 30. 如何排序距离给定点(经度和纬度)最近的点列表?
+1,我最近有非常相同的任务,我的解决方案是一个小马车,所以我很感兴趣,看看是否有任何其他实现我之前尝试并修复它:-) –