當前位置:編程學習大全網 - 編程語言 - matlab怎樣繪制中心線為曲線的變截面圓柱?

matlab怎樣繪制中心線為曲線的變截面圓柱?

%這裏隨便給了組數據,中心軌跡(x,y,z)以及對應的圓半徑

x=0:0.02:1;y=cos(x*pi/2);z=y.^2;

r=0.15-0.1*x;

%這裏x,y,z,r是程度相等的數組,註意相鄰兩點不能重合

plot3(x,y,z,'b');hold on

dx=gradient(x);dy=gradient(y);dz=gradient(z);%曲線方向增量

deg=0:360;

for ii=1:length(x)

n=[dx(ii) dy(ii) dz(ii)]; ?%n是當前點的增量方向,也是圓平面的法向量

n=n/sqrt(sum(n.^2)); %歸壹化法向量

a=zeros(1,3);[ind ind]=min(n);a(ind)=1;%找到和n(ii,:)不***線的向量

r1=cross(n,a); ? %產生圓平面上的壹個向量

r1=r1/sqrt(sum(r1.^2))*r(ii); ?%讓向量長度等於半徑

r2=cross(n,r1); ?%產生另壹個與其正交的半徑向量

xx=r1(1)*cosd(deg)+r2(1)*sind(deg)+x(ii); %根據r1和r2,利用角度產生圓數據

yy=r1(2)*cosd(deg)+r2(2)*sind(deg)+y(ii);

zz=r1(3)*cosd(deg)+r2(3)*sind(deg)+z(ii);?

plot3(xx,yy,zz,'r'); ?%畫壹個圓

end

hold off;grid on

axis equal;

升級版

%這裏隨便給了組數據,中心軌跡(x,y,z)以及對應的圓半徑

x=0:0.02:1;y=cos(x*pi/2);z=y.^2;

r=0.15-0.1*x;

%這裏x,y,z,r是程度相等的數組,註意相鄰兩點不能重合

x=x(:);y=y(:);z=z(:);

plot3(x,y,z,'b','linewidth',2);hold on

n=[gradient(x) gradient(y) gradient(z)];%曲線方向增量

n=bsxfun(@rdivide,n,sqrt(sum(n.^2,2)));

a=zeros(1,3);[ind ind]=min(n(1,:));a(ind)=1;

r1=cross(n(1,:),a);

r1=r1/sqrt(sum(r1.^2));

r2=cross(n(1,:),r1);

deg=0:20:360;

xx=r(1)*(r1(1)*cosd(deg)+r2(1)*sind(deg))+x(1);?

yy=r(1)*(r1(2)*cosd(deg)+r2(2)*sind(deg))+y(1);

zz=r(1)*(r1(3)*cosd(deg)+r2(3)*sind(deg))+z(1);?

d0=[xx(1) yy(1) zz(1)];

for ii=2:length(x)

r1=cross(r2,n(ii,:));

r2=cross(n(ii,:),r1); ?

xx=[xx;r(ii)*(r1(1)*cosd(deg)+r2(1)*sind(deg))+x(ii)];?

yy=[yy;r(ii)*(r1(2)*cosd(deg)+r2(2)*sind(deg))+y(ii)];

zz=[zz;r(ii)*(r1(3)*cosd(deg)+r2(3)*sind(deg))+z(ii)]; ?

end

mesh(xx,yy,zz);colormap([1 0 0]);

hold off;grid on;axis equal;hidden off;

xlabel('X');ylabel('Y');zlabel('Z');

  • 上一篇:動車餐飲面試自我介紹
  • 下一篇:宣城學習編程
  • copyright 2024編程學習大全網