plotcylinder matlab,Matlab在任意两点之间绘制三维圆柱

Matlab在任意两点之间绘制三维圆柱

Matlab在任意两点之间绘制三维圆柱

此函数可能存在一些不足,请多多指教!

function plotcylinder(u1,u2,color_a,r)

L=norm(u1-u2);

ROD=u2-u1;

[X,Y,Z]=cylinder(r,100);

x1=X*0;y1=Y*0;z1=Z*0;

Z=L*Z-L/2;

ROD_midpoint=(u1+u2)/2;

x=ROD_midpoint(1);

y=ROD_midpoint(2);

z=ROD_midpoint(3);

a=[1 0 0];b=[0 1 0];c=[0 0 1];

if(ROD(2)==0||ROD(1)==0)

if(ROD(2)==0) % 在XZ平面

angel=acos(dot(ROD,c)/norm(ROD)/norm(c));

if(ROD(1)<0)

angel=-angel; %%

end

A2=[cos(angel) 0 sin(angel);0 1 0; -sin(angel) 0 cos(angel)]; % 绕Y轴旋转

for i=1:length(X(1,:))

u=[X(1,i) Y(1,i) Z(1,i)]';

u1=A2*u;

x1(1,i)=u1(1);y1(1,i)=u1(2);z1(1,i)=u1(3);

u=[X(1,i) Y(1,i) Z(2,i)]';

u1=A2*u;

x1(2,i)=u1(1);y1(2,i)=u1(2);z1(2,i)=u1(3);

end

end

if(ROD(1)==0) % 在YZ平面

angel=acos(dot(ROD,c)/norm(ROD)/norm(c));

angel=2*pi-angel; % 此处maybe要增加类似上面的判定是否变为负数

A1=[1 0 0;0 cos(angel) -sin(angel);0 sin(angel) cos(angel)]; % 绕X轴旋转

for i=1:length(X(1,:))

u=[X(1,i) Y(1,i) Z(1,i)]';

u1=A1*u;

x1(1,i)=u1(1);y1(1,i)=u1(2);z1(1,i)=u1(3);

u=[X(1,i) Y(1,i) Z(2,i)]';

u1=A1*u;

x1(2,i)=u1(1);y1(2,i)=u1(2);z1(2,i)=u1(3);

end

end

else

% 先绕Z轴旋转,在绕Y轴旋转

angel=acos(dot(ROD,c)/norm(ROD)/norm(c));

A2=[cos(angel) 0 sin(angel);0 1 0; -sin(angel) 0 cos(angel)];

angel=acos(dot(ROD,a)/norm(ROD)/norm(a));

if(ROD(2)<0)

angel=2*pi-angel;

end

A3=[cos(angel) -sin(angel) 0;sin(angel) cos(angel) 0;0 0 1];

A=A3*A2;

for i=1:length(X(1,:))

u=[X(1,i) Y(1,i) Z(1,i)]';

u1=A*u;

x1(1,i)=u1(1);y1(1,i)=u1(2);z1(1,i)=u1(3);

u=[X(1,i) Y(1,i) Z(2,i)]';

u1=A*u;

x1(2,i)=u1(1);y1(2,i)=u1(2);z1(2,i)=u1(3);

end

end

fill3(x1(1,:)+x,y1(1,:)+y,z1(1,:)+z,color_a,'EdgeColor','none')

hold on

fill3(x1(2,:)+x,y1(2,:)+y,z1(2,:)+z,color_a,'EdgeColor','none')

hold on

surf(x1+x,y1+y,z1+z,'facecolor',color_a,'edgecolor','none')

axis equal

xlabel('x')

ylabel('y')

zlabel('z')

set(gcf,'color','w')

主函数如下:

figure(1)

set(gcf,'color','w')

a=[2 4 6];

b=[10 10 8];

plotcylinder(a,b,'b',0.1)

xlabel('x')

ylabel('y')

zlabel('z')

axis equal

camlight;

lighting flat;

效果图

699de9e3d8179b18cde7516845b4b52e.png

Matlab在任意两点之间绘制三维圆柱相关教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值