随机位置

一次偶然的机会,设计师出了这样一张图:

设计师的图

在区域内,小圆形随机分布。

一般来讲,在区域内生成一个{x,y}对象并不复杂,这里的难点是碰撞检测。

先来了解一下调用方式:

调用方式

参数1是随机一个位置后,调用的回调,这里会传出来{x,y,size},size可以忽略,没什么用。

参数2是告诉位置组件,圆的个数(也就是位置的个数)和小圆半径size(和回传的size是一个字段)。

参数三是整体区域的半径。


细心的同学会问:为啥都是传的半径呢?配置是什么样子的呢?getSpotPos怎么接受返回的位置呢?


我们先来看下配置的样子(getConfig函数里做了什么):

配置信息

PS:想要几个位置就传几个尺寸,简单的令人发指有木有。。。

再来看下getSpotPos如何接受返回值的:

getSpotPos

大家一定会有疑问:这里为什么是10次的时候重新渲染? 小编:因为配置里有10个尺寸信息啊~.~(这里其实可以抽象成一个变量)。

好了,用法就是上边这么用了,传说中的随机位置和碰撞呢?

表糟急,代码这就来。

片段1
片段2

80行代码,童叟无欺。

大概思想:在大圆范围(实例中,这10个元素的情况下,范围半径小于150,计算将会很吃力,所以保证范围不会小于150)中间,生成第一个位置,也是最大的元素所在的位置。然后,其他的位置随机生成后,与生成过的位置进行碰撞检测,无碰撞就记录,有碰撞,再生成。

碰撞中主要做的事情:保证不太靠边,保证不会和大圆圆心离得太近,然后就是两个位置x和y相等的情况(概率事件,不得不防)。最后是一般情况。

因为都是圆,所以只需检测圆心距离是否大于两半径与最小间距之和就可以了。

做完之后,小编发现----数学很重要啊。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,156评论 19 139
  • 首页 资讯 文章 资源 小组 相亲 登录 注册 首页 最新文章 IT 职场 前端 后端 移动端 数据库 运维 其他...
    Helen_Cat阅读 3,955评论 1 10
  • 昨天和一个朋友聊了一会,问到朋友现在在做什么工作,她说做销售,我说我之前也是做销售的。她说销售很辛苦,末了又说,所...
    佛系肉团阅读 991评论 11 19
  • 生活总有很多不如意的,可是我们能怎么办呢?只有努力辣
    1c776d1377a7阅读 112评论 0 1
  • 第七章:莫名出现的男人 "来,为咱们脑外科终于不是唯一的和尚庙干杯!"白芷举起杯子高声吆喝着。 "切~,会不会说话...
    陈家公子crystal阅读 274评论 0 2