MATLAB如何实现在一个半径为750的圆内随机生成1000个半径为5的不重合圆?
问题描述:
试过用循环的方法做,距离判断用的是any,结果运算量指数级增加,算不到1000,有没有办法能够只和最近的几个圆进行距离比较呢?
答
已更新。
tic
X = [];
Y = [];
n = 0;
while n < 1000
r = rand * (750-5);
theta = rand * 2*pi;
x0 = r*cos(theta);
y0 = r*sin(theta);
s = min( (x0-X).^2 + (y0-Y).^2 ); % 最小圆心距离
if s < 10^2
continue;
else
X = [X;x0]; % 圆心坐标集合
Y = [Y;y0];
n = n +1 % 点数
end
end
toc
alpha = linspace(0,2*pi,100);
x = 5*cos(alpha);
y = 5*sin(alpha);
figure
plot( 150*x,150*y,'r' )
hold on
for ii = 1:n
x0 = X(ii);
y0 = Y(ii);
plot(x0+x,y0+y,'k')
end
结果:
n =
1000
历时 0.183838 秒。