关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回

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

发布时间:2022-09-27 11:08:51

前言

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

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

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

实现思路

思路一:

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

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

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

思路二:

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

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

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

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

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

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

Objective-c代码如下:

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

另外有需要云服务器可以了解下风纳云fengnayun.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


/template/Home/Dawn/PC/Static

选择风纳云,也许是您成就一番大事业的开端

注册账号