假设我有一个点,叫做 i
,它是
{
x: 10000,
y: 10000
}
我还有一些其他的点,以数组的形式表示,类似于:
[{
x: 35,
y: 10001
}, {
x: 2478,
y: 38
}, ...]
我的问题是如何在JavaScript中获取距离i
最近的点?谢谢!
假设我有一个点,叫做 i
,它是
{
x: 10000,
y: 10000
}
我还有一些其他的点,以数组的形式表示,类似于:
[{
x: 35,
y: 10001
}, {
x: 2478,
y: 38
}, ...]
我的问题是如何在JavaScript中获取距离i
最近的点?谢谢!
通过计算点之间的欧几里得距离,可以减小数组大小,并取距离较小的点。
function distance(p) {
return Math.sqrt(Math.pow(point.x - p.x, 2) + Math.pow(point.y - p.y, 2))
}
var point = { x: 10000, y: 10000 },
points = [{ x: 35, y: 10001 }, { x: 2478, y: 38 }],
closest = points.reduce((a, b) => distance(a) < distance(b) ? a : b);
console.log(closest);
var myPoint = {
x: 10000,
y: 10000
};
var points = [{
x: 35,
y: 10001
}, {
x: 2478,
y: 38
}];
var minDistance = 10000000;
var closestPoint;
for (var a = 0; a < points.length; a++) {
distance = Math.sqrt((myPoint.x - points[a].x) * (myPoint.x - points[a].x) + (myPoint.y - points[a].y) * (myPoint.y - points[a].y));
if (distance < minDistance) {
minDistance = distance;
closestPoint = points[a];
}
}
console.log("The closest point: x="+closestPoint.x+", y="+closestPoint.y);
你可以使用一些基本的几何知识来创建一个函数,以获取两点之间的绝对距离,然后循环遍历数组并找到给出最小距离的对象。
let p = {
x: 10000,
y: 10000
}
let arr = [{
x: 35,
y: 10001
}, {
x: 2478,
y: 38
}]
function getDiaDist(point){
return Math.sqrt(Math.pow(point.x,2) + Math.pow(point.y,2))
}
function getDistance(p1,p2){
return getDiaDist({x:p1.x - p2.x, y:p1.y - p2.y})
}
function getNearestPoint(arr,point){
let min = Infinity;
let result = arr[0]
arr.forEach(a => {
let dist = getDistance(a,point);
if(dist > min){
min = dist
result = a;
}
})
return result;
}
console.log(getNearestPoint(arr,p))