matlab 生成不相交的若干个圆

有人问的问题:

http://www.ilovematlab.cn/forum.php?mod=viewthread&tid=330803&page=1&extra=#pid2637623


仔细想想,蛮好。

问题:

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


我的思路:

如果两个圆相交,意味着两个圆心之间的距离在2*r之间。那么就是说,只要判断两两点之间的距离即可。而生成两两点之间的距离。用一个pdist函数可以直接实现。于是问题得解。

具体如图:



clear all
clc
clf

n=6;
b=10;
r=1;

X=(b-2*r)*rand(n,2)+r;
D = pdist(X);
while min(D)<(2*r)
    X=(b-2*r)*rand(n,2)+r;
    D = pdist(X);
end

the=[0:0.1:2*pi];
the=[the,0];
cir_x=r*cos(the);
cir_y=r*sin(the);

plot(X(:,1),X(:,2),'.')
hold on
for i=1:n
    plot(X(i,1)+cir_x,X(i,2)+cir_y,'-');
end
axis equal
axis([0 b 0 b])


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值