对应的数学公式,当圆心距大于两圆半径之和时 两圆外离:
小圆中心坐标为(px1、py1),半径为Rr; 随机圆 中心坐标为(px2、py2),半径为r

Objective-c代码如下:
// 2: 判断随机生成的 圆 不在 中间 这个圆 不能重合, 即得到两个圆之间的小圆
if (sqrt(pow(self.center.x - randomCPX, 2) + pow(self.frame.size.height / 2 - randomCPY, 2)) > (Rr + r)) {
}
3、从第2步得到的随机圆2中,筛选出和已存在的 标准圆 不相交 随机圆3 , 随机圆3 即我们所需要的 标准圆 (其中圆2是已经存在的 标准圆 ,那么只有圆1才是该步骤所需要的 随机圆3 )

对应的数学公式,当圆心距小于两圆半径之和时 两圆相交或两圆内含,随机圆2应该废弃:
存在的标准圆中心坐标为(px、py),半径为rr; 随机圆中心坐标为(px2、py2),半径为r

Objective-c代码如下:
// 3: 新生成的 圆 和已经存在的 圆 不能重合
BOOL success = YES;
for (NSValue *value in randomCircleInfos) {
CircleInfo circle;
[value getValue:&circle];
// 只要新生成的 圆 和 任何一个存在的 圆 有交集,则失败
if (sqrt(pow(circle.center.x - randomCPX, 2) + pow(circle.center.y - randomCPY, 2)) <= (circle.radius + r)) {
success = NO; break ;
}
}
if (success) { [randomCircleInfos addObject:[self standardCircle:randomCPX centerY:randomCPY radius:r]];}为了寻找 8 个标准圆一共生成了 53 个随机圆 生成了 29 个在大圆内部的圆 生成了 9 个在大圆内部的圆且不与中圆有交集的圆 为了寻找 8 个标准圆一共生成了 38 个随机圆 生成了 28 个在大圆内部的圆 生成了 10 个在大圆内部的圆且不与中圆有交集的圆
只要通过这三步成功后,即得到了我们所要的标准圆,从算法的时间复杂度看 ,得到标准圆的复杂度为O(n*n),对于小量了标准圆来说,速度是非常快的:(当然效率上还由随机圆的半径有关系)
为了寻找 8 个标准圆一共生成了 53 个随机圆 生成了 29 个在大圆内部的圆 生成了 9 个在大圆内部的圆且不与中圆有交集的圆 为了寻找 8 个标准圆一共生成了 38 个随机圆 生成了 28 个在大圆内部的圆 生成了 10 个在大圆内部的圆且不与中圆有交集的圆










