有人问的问题:
仔细想想,蛮好。
问题:
一个边长为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)
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])