全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

iOS开发之随机生成两圆之间的标准圆

前言

相信很多社交产品中,肯定会存在寻找附近人或者附近商家的需求,类似下图,在大圆和小圆之间(橘色区域)生成一系列的随机圆,并且所有随机圆之间也不能有交集,我暂且称这种圆为标准圆。

关于这样的需要以前在做项目中有同事做过,虽然可以实现了上面的效果图,但是坐标及半径都是写死,从写死的数据随机取值,看上去是满足了,但是对于用户来说多次使用该功能时,肯定有一定的视觉疲倦,且写死的一些数据真的不好写,如果大圆或者小圆半径变化了,或者需要更多的标准圆,那怎么办呢?一脸懵逼????

实现思路

思路一:

对于这个需求,我一开始也陷入了写死数据的套路,但是在兼容大小圆半径上做了一定的兼容,大致的将大圆切分成 9块 ,然后在除了中间区域外的8块区域再生成一系列的伪标准圆。然后取值时现随机选取8块区域,再随机从块区拿取 伪标准圆 :

很明显,在 1、3、6、8 块中及中间块 存在很大的误差,明显也不可取

思路二:

根据数学思路,寻找标准圆:

1、在大圆内部生成 随机圆1 ,也就是生成内含圆:(其中只有圆1才是该步骤所需要的 随机圆1 )

对应的数学公式,当圆心距小于两圆半径之差时 两圆内含:

大圆中心坐标为(px1、py1),半径为R; 随机圆中心坐标为(px2、py2),半径为r

Objective-c代码如下:

 // 1: 判断随机生成的 圆 包含在 self 这个大圆内部
 if ( sqrt(pow(self.center.x - randomCPX, 2) + pow(self.frame.size.height / 2 - randomCPY, 2)) < (R - r) ) {
 
 }

2、从第1步得到的随机圆1中,筛选出和小圆不相交 随机圆2 :(其中只有圆1才是该步骤所需要的 随机圆2 )

对应的数学公式,当圆心距大于两圆半径之和时 两圆外离:

小圆中心坐标为(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 个在大圆内部的圆且不与中圆有交集的圆

但是在产生大量的标准圆上,随机生成的总量会非常大:(可以考虑将随机圆半径减少,或者生成该页面之前,提前生成好这些标准圆相关数据:即圆心坐标和半径)

为了寻找 30 个标准圆 一共生成了 233220 个随机圆 生成了 138095 个在大圆内部的圆 生成了 40287 个在大圆内部的圆且不与中圆有交集的圆

最后给出最终成果图:

对应的log日志:

为了寻找 9 个标准圆 一共生成了 127 个随机圆 生成了 75 个在大圆内部的圆 生成了 20 个在大圆内部的圆且不与中圆有交集的圆为了寻找 12 个标准圆 一共生成了 265 个随机圆 生成了 150 个在大圆内部的圆 生成了 40 个在大圆内部的圆且不与中圆有交集的圆 为了寻找 23 个标准圆 一共生成了 5181 个随机圆 生成了 3112 个在大圆内部的圆 生成了 909 个在大圆内部的圆且不与中圆有交集的圆

源码下载:点击这里

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。


# 随机圆形排列  # ios  # 随机颜色  # 圆形随机不重叠  # 浅谈iOS中三种生成随机数方法  # 利用iOS绘制图片生成随机验证码示例代码  # IOS实现圆形图片效果的两种方法  # iOS如何裁剪圆形头像  # IOS使用progssview仿滴滴打车圆形计时  # iOS开发中Quartz2D控制圆形缩放和实现刷帧效果  # iOS实现带文字的圆形头像效果  # 小圆  # 成了  # 不与  # 所需要  # 才是  # 也不  # 都是  # 切分  # 但是在  # 我一  # 中有  # 一脸  # 有一定  # 点击这里  # 能有  # 做过  # 任何一个  # 这篇文章  # 很明显  # 非常大 


相关文章: 教学论文网站制作软件有哪些,写论文用什么软件 ?  制作农业网站的软件,比较好的农业网站推荐一下?  常州企业建站如何选择最佳模板?  建站之星展会模版如何一键下载生成?  招贴海报怎么做,什么是海报招贴?  建站主机服务器选型指南与性能优化方案解析  制作网站的过程怎么写,用凡科建站如何制作自己的网站?  小型网站建站如何选择虚拟主机?  如何通过免费商城建站系统源码自定义网站主题与功能?  青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?  ,南京靠谱的征婚网站?  小程序网站制作需要准备什么资料,如何制作小程序?  宝塔建站教程:一键部署配置流程与SEO优化实战指南  如何制作一个表白网站视频,关于勇敢表白的小标题?  如何设计高效校园网站?  如何选择适合PHP云建站的开源框架?  如何快速生成可下载的建站源码工具?  网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?  如何快速查询域名建站关键信息?  香港服务器选型指南:免备案配置与高效建站方案解析  定制建站模板如何实现SEO优化与智能系统配置?18字教程  家庭建站与云服务器建站,如何选择更优?  道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?  如何通过NAT技术实现内网高效建站?  兔展官网 在线制作,怎样制作微信请帖?  如何在Golang中指定模块版本_使用go.mod控制版本号  建站之星客服服务时间及联系方式如何?  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  html制作网站的步骤有哪些,iapp如何添加网页?  如何通过WDCP绑定主域名及创建子域名站点?  广德云建站网站建设方案与建站流程优化指南  简单实现Android文件上传  黑客如何通过漏洞一步步攻陷网站服务器?  开封网站制作公司,网络用语开封是什么意思?  青浦网站制作公司有哪些,苹果官网发货地是哪里?  深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?  南平网站制作公司,2025年南平市事业单位报名时间?  IOS倒计时设置UIButton标题title的抖动问题  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  公司网站制作费用多少,为公司建立一个网站需要哪些费用?  如何在云主机上快速搭建网站?  香港服务器WordPress建站指南:SEO优化与高效部署策略  长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?  建站之星安装后界面空白如何解决?  如何自定义建站之星网站的导航菜单样式?  青岛网站建设如何选择本地服务器?  官网建站费用明细查询_企业建站套餐价格及收费标准指南  建站主机选购指南与交易推荐:核心配置解析  江苏网站制作公司有哪些,江苏书法考级官方网站?  制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。