查看: 12147|回复: 21|关注: 0

[已解决] 如何生成多个互相不重叠的圆(或者圆心位置坐标)

[复制链接]

入门

85 麦片

财富积分


50500


127

主题

314

帖子

0

最佳答案
  • 关注者: 4
本帖最后由 gisjun 于 2015-4-16 22:23 编辑

请教大神,一个边长为b方形区域内,随机生成n个半径为r的圆
1、如果没有任何限制,则圆心坐标任意,代码为b=100;r=1;n=10;
xy_pos=rand(n,2)*(b-r);
2、假如这些圆不能重叠,最多是相切,那么如何得到这些圆的圆心坐标呢?






QQ截图20150416223621.jpg
回复主题 已获打赏: 0 积分

举报

MATLAB 基础讨论
版块优秀回答者

中级

570 麦片

财富积分


5001500


73

主题

1451

帖子

105

最佳答案
  • 关注者: 80
发表于 2015-4-17 09:04:28 | 显示全部楼层 |此回复为最佳答案
想想你的问题,如果两个圆相交,意味着两个圆心之间的距离在2*r之间。那么就是说,只要判断两两点之间的距离即可。而生成两两点之间的距离。用一个pdist函数可以直接实现。于是问题得解。
具体如图:
捕获.PNG
捕获2.PNG
回复此楼 已获打赏: 0 积分

举报

入门

85 麦片

财富积分


50500


127

主题

314

帖子

0

最佳答案
  • 关注者: 4
 楼主| 发表于 2015-4-17 09:07:20 | 显示全部楼层
本帖最后由 gisjun 于 2015-4-17 09:13 编辑
meatball1982 发表于 2015-4-17 09:04
想想你的问题,如果两个圆相交,意味着两个圆心之间的距离在2*r之间。那么就是说,只要判断两两点之间的距 ...

没想到还有pdist函数~强大 涨知识了但当边长较小,而n较大时,计算非常慢~~~
回复此楼 已获打赏: 0 积分

举报

入门

85 麦片

财富积分


50500


127

主题

314

帖子

0

最佳答案
  • 关注者: 4
 楼主| 发表于 2015-4-17 09:14:46 | 显示全部楼层
本帖最后由 gisjun 于 2015-4-17 09:16 编辑
meatball1982 发表于 2015-4-17 09:04
想想你的问题,如果两个圆相交,意味着两个圆心之间的距离在2*r之间。那么就是说,只要判断两两点之间的距 ...

有优化算法吗?因为当b较小,n较大,比如b=10,n=20,运算太慢了...
回复此楼 已获打赏: 0 积分

举报

MATLAB 基础讨论
版块优秀回答者

中级

570 麦片

财富积分


5001500


73

主题

1451

帖子

105

最佳答案
  • 关注者: 80
发表于 2015-4-17 09:40:48 | 显示全部楼层
gisjun 发表于 2015-4-17 09:14
有优化算法吗?因为当b较小,n较大,比如b=10,n=20,运算太慢了...

时间花在迭代那
b=10;
最多也就只能生成25个。还是相互相切的。
靠rand随机,基本不大可能在很少的时间内生成20个。

思路可能要换一下,
生成一个,
判断,在可行的范围内
留下,
否则再生成新的,

新生成的位置要判断和之前两个的距离。
其实是一样的,到了最后,
很可能是无法靠rand生成满足条件的位置。
回复此楼 已获打赏: 0 积分

举报

入门

85 麦片

财富积分


50500


127

主题

314

帖子

0

最佳答案
  • 关注者: 4
 楼主| 发表于 2015-4-18 10:46:43 | 显示全部楼层
meatball1982 发表于 2015-4-17 09:40
时间花在迭代那
b=10;
最多也就只能生成25个。还是相互相切的。

大神可否帮忙进一步优化下?:handshake
回复此楼 已获打赏: 0 积分

举报

MATLAB 基础讨论
版块优秀回答者

中级

570 麦片

财富积分


5001500


73

主题

1451

帖子

105

最佳答案
  • 关注者: 80
发表于 2015-4-22 09:09:33 | 显示全部楼层
gisjun 发表于 2015-4-18 10:46
大神可否帮忙进一步优化下?

可能得想一阵子,你别急。我正在努力作。
回复此楼 已获打赏: 0 积分

举报

入门

85 麦片

财富积分


50500


127

主题

314

帖子

0

最佳答案
  • 关注者: 4
 楼主| 发表于 2015-4-27 19:45:40 | 显示全部楼层
meatball1982 发表于 2015-4-22 09:09
可能得想一阵子,你别急。我正在努力作。

多谢大神相助
回复此楼 已获打赏: 0 积分

举报

MATLAB 基础讨论
版块优秀回答者

中级

570 麦片

财富积分


5001500


73

主题

1451

帖子

105

最佳答案
  • 关注者: 80
发表于 2015-4-28 06:15:20 | 显示全部楼层
本帖最后由 meatball1982 于 2015-4-28 06:16 编辑

你好。我的思路是将空间分成25个方格,然后,随机的选择方格,放圆。
得到的结果如图,不知道能不能满足你的要求。
或是,将空间分成正三角形,以上面的方式随机生成。

multi_circles.png
回复此楼 已获打赏: 0 积分

举报

入门

85 麦片

财富积分


50500


127

主题

314

帖子

0

最佳答案
  • 关注者: 4
 楼主| 发表于 2015-5-4 14:50:47 | 显示全部楼层
meatball1982 发表于 2015-4-28 06:15
你好。我的思路是将空间分成25个方格,然后,随机的选择方格,放圆。
得到的结果如图,不知道能不能满足你 ...

还是采纳您上面的答案吧,最后一个方案位置随机性不强
回复此楼 已获打赏: 0 积分

举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

快速回复 返回顶部 返回列表