给定平面上的n个点,求距离最近的两个点的距离 javascript版

时间:2021-07-15 09:53:02
//给定平面上的n个点,求距离最近的两个点的距离。

//比较y
var A=[{
    x:6,
    y:61
},{
    x:6,
    y:67
},{
    x:43,
    y:71
},{
    x:39,
    y:107
},{
    x:189,
    y:140
}]
//按照x排序 y排序
A.sort(function(a,b){
    if(a.x== b.x&&a.y== b.y){
        return 0
    }
    if(a.x== b.x){
        return a.y> b.y?1:-1
    }
    return a.x> b.x?1:-1
})
console.log(A)

//分治算法
function closest_pair(a,l,r){
    var n=r-l
    console.log(n)
    if(n<=1){
        return 100
    }
    var m=(l+r)>>1
    var x=a[m].x
    //分解
    var d=Math.min(closest_pair(a,l,m),closest_pair(a,m+1,r))
    //合并
    var b=[]

    for(var i=l;i<r;i++){
        if(Math.abs(a[i].x-x)>=d){
            continue
        }
        for(var j=0;j< b.length;j++){
            var dx=a[i].x-b[b.length-j-1].x
            var dy=a[i].y-b[b.length-j-1].y
            if(dy>=d){break}
            d=Math.min(d,Math.sqrt(dx*dx+dy*dy))

        }
        b.push(a[i])
    }
    return d
}

//按照x排序
var re=closest_pair(A,0, A.length)
console.log(re)