(1条消息) 使用MATLAB在给定矩形区域随机绘制任意个不相交的圆_风一样的航哥的博客-CSDN博客
以上博客自从发表以来好几个同学都问我,三维的怎么实现,今天下班之后,就写一个。不知道是不是其他同学需要的。
先上代码:
function plotNsphere_in_rect(X1,X2,Z1,Y1,Y2,Z2,N,R)
%plotNcircle_in_rect(X1,X2,Z1,Y1,Y2,Z2,N,R) 函数说明:
% 此函数用来会绘制 N 个矩形区域里面随机生成的半径为 R 的圆,三维区域为(X1,Y1,Z1)->(X2,Y2,Z2)
% 输出是一张plot绘制的图,
close all
X=zeros(1,N);
Y=zeros(1,N);
Z=zeros(1,N);
i=1;
while(i<=N)
X(i)=X1+X2*rand;
Y(i)=Y1+Y2*rand;
Z(i)=Z1+Z2*rand;
if(i>=2)
for j=i:-1:1
if(j==1)
i=i+1;
continue;
else
dis = sqrt((X(i)-X(j-1))^2 + (Y(i)-Y(j-1))^2+(Z(i)-Z(j-1))^2);
if(dis<2*R)
i=i-1;
break;
end
end
end
else
i=i+1;
end
end
figure
for i=1:1:N
myplotsphere(X(i),Y(i),Z(i),R);
hold on
axis equal
grid on
end
此函数的参数需要自行确定为有效的三维空间,本来是要做参数检查的,一会儿要去车站接人就不写了。N表示N个球体,R表示球体的半径。myplotsphere函数如下,参数为球心坐标和半径。
function myplotsphere(X,Y,Z,R)
% myplotsphere使用三点和半径进行绘制一个球体
% x,y,z;三维坐标;R:半径
[x,y,z]=sphere;
surf(R*x+X,R*y+Y,R*z+Z)
% mesh(R*x+X,R*y+Y,R*z+Z)
hold on
% axis equal
end
实际运行如下:plotNsphere_in_rect(0,0,0,100,100,100,50,4)
![](https://img-blog.csdnimg.cn/cf536a36d7cc41e9afb91e4f893ede39.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6aOO5LiA5qC355qE6Iiq5ZOl,size_20,color_FFFFFF,t_70,g_se,x_16)
先这样吧,下班接对象去了,大家有什么疑问,请评论交流。