小圆的半径都是一样的?
如果是一样的假设半径为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 的位置
}
如果是一样的假设半径为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 的位置
}
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 的位置
}
var pfh = (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2);//平方和
要优化的话 把容纳整个小球的空间分解为 N*N的矩形区域 那么根据球的圆心坐标 小球可以分配到N*N的矩形其中一个
那么在同一个 矩形中的小球 才匹配是否产生交集 另外 靠近边缘的球 应该同时算在相邻的矩形中
我帮你简化下问题 要求不变 球的数量改成3个 不考虑优化的情况下 3个和1000个的匹配算法是一样的
要优化的话 把容纳整个小球的空间分解为 N*N的矩形区域 那么根据球的圆心坐标 小球可以分配到N*N的矩形其中一个
那么在同一个 矩形中的小球 才匹配是否产生交集 另外 靠近边缘的球 应该同时算在相邻的矩形中哈哈我明白了 就是直接划分区域。。