小圆的半径都是一样的?
如果是一样的假设半径为r
两个圆的圆心坐标分别为x1 y1、x2 y2
那么当两圆相邻时,根据勾股定理,两直角边(两圆心横坐标/纵坐标的差)的平方和 等于 两圆心直线距离(2r)的平方和
再加上5px的误差 var r=50, x1=100, y1=100, x2=130, y2=140;
var pfh = Math.abs(x1-x2)*Math.abs(x1-x2) + Math.abs(y1-y2)*Math.abs(y1-y2);//平方和
alert(pfh)
if( pfh<= (r+5)*(r+5) && pfh>= (r-5)*(r-5)) {
alert("两圆相邻");
//将圆2隐藏或删除。圆1保留,移动到圆心坐标为 x=(x1+x2)/2, y=(y1+y2)/2 的位置
}

解决方案 »

  1.   

    错了,应该是2r……改一下
    var r=50, x1=100, y1=100, x2=160, y2=180;
    var pfh = Math.abs(x1-x2)*Math.abs(x1-x2) + Math.abs(y1-y2)*Math.abs(y1-y2);//平方和
    if( pfh<= (2*r+5)*(2*r+5) && pfh>= (2*r-5)*(2*r-5)) {
    alert("两圆相邻");
    //将圆2隐藏或删除,圆1保留,移动到圆心坐标为 x=(x1+x2)/2, y=(y1+y2)/2 的位置
    }
      

  2.   

    刚才脑子不太清醒哈,平方和不用求绝对值的…… 
    var pfh = (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2);//平方和
      

  3.   

    我帮你简化下问题  要求不变  球的数量改成3个 不考虑优化的情况下 3个和1000个的匹配算法是一样的
    要优化的话  把容纳整个小球的空间分解为 N*N的矩形区域 那么根据球的圆心坐标 小球可以分配到N*N的矩形其中一个
    那么在同一个 矩形中的小球 才匹配是否产生交集 另外 靠近边缘的球 应该同时算在相邻的矩形中
      

  4.   


    我帮你简化下问题  要求不变  球的数量改成3个 不考虑优化的情况下 3个和1000个的匹配算法是一样的
    要优化的话  把容纳整个小球的空间分解为 N*N的矩形区域 那么根据球的圆心坐标 小球可以分配到N*N的矩形其中一个
    那么在同一个 矩形中的小球 才匹配是否产生交集 另外 靠近边缘的球 应该同时算在相邻的矩形中哈哈我明白了 就是直接划分区域。。