我想知道如何将我的坐标计算为一组坐标,并找出最接近的一个?
让我们说:
var player = {
x: 10,
y: 20
}
var box = [
{x: 17, y: 30},
{x: 41, y: 14},
{x: 20, y: 30}
];
所以我的玩家停留在10、20上。我有3个不同的装箱框,我需要找出最接近的一个。有什么简单的方法可以计算出来吗?
答案 0 :(得分:2)
您可以通过检查每个距离并返回最短的对象来计算距离并缩小数组。
function getDistance(p1, p2) {
return Math.sqrt(Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2))
}
var player = { x: 10, y: 20 },
box = [{ x: 17, y: 30 }, { x: 41, y: 14 }, { x: 20, y: 30 }];
console.log(box.reduce((a, b) => getDistance(a, player) < getDistance(b, player) ? a : b));
答案 1 :(得分:1)
要找到最小的距离(最接近的点),只需找到x和y偏移的平方和之差最小即可。您不需要根据平方定理来求平方根即可找到实际距离。如果您在编写代码时遇到困难,请不要忘记包含您尝试过的内容。
答案 2 :(得分:0)
您可以使用2点画布formla并根据距离对其进行排序
let positions = [
{x: 17, y: 30},
{x: 41, y: 14},
{x: 20, y: 30}
];
let x=10;
let y= 20;
let positions_close=positions.sort(p=>Math.hypot(p.x-x, p.y-y));
console.log(positions_close[0]);
//check the distance
let distances=positions.map(p=>Math.hypot(p.x-x, p.y-y));
console.log(distances);