x1=rand(1);y1=rand(1);z1=rand(1);r1=rand(1);%一个底中心,半径
x2=rand(1);y2=rand(1);z2=rand(1);r2=rand(1);%另一个底中心,半径
v=[x1-x2 y1-y2 z1-z2]; %两中心连线向量
[m num]=min(abs(v)); %找向量的最小值
a=zeros(1,3);a(num)=1; %最小方向单位向量
a1=cross(a,v); a1=a1./sqrt(sum(a1.^2)); %计算一个方向的基
a2=cross(a1,v);a2=a2./sqrt(sum(a2.^2)); %计算正交基
deg=linspace(0,360,100); %0~360度分100点,可根据需要增加点数
p1=repmat([x1 y1 z1],length(deg),1)+(cosd(deg)'*a1+sind(deg)'*a2)*r1;%一个底圆
p2=repmat([x2 y2 z2],length(deg),1)+(cosd(deg)'*a1+sind(deg)'*a2)*r2;%另一个底圆
plot3([x1 x2],[y1 y2],[z1 z2],'.-r');hold on; %画两底中心连线
plot3(p1(:,1),p1(:,2),p1(:,3),'-'); %画一个底圆
plot3(p2(:,1),p2(:,2),p2(:,3),'-');hold off; %画另一个底圆
axis equal