Matlab在任意兩點之間繪製三維圓柱

2021-09-24 05:33:09 字數 2597 閱讀 2310

此函式可能存在一些不足,請多多指教!

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; %%

enda2=[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

endif(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

endelse

% 先繞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;

enda3=[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);

endendfill3(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;

效果圖

確定兩點之間的點

egret.point.interpolate 確定兩個指定點之間的點。引數 f 確定新的內插點相對於引數 pt1 和 pt2 指定的兩個端點所處的位置。引數 f 的值越接近 1.0,則內插點就越接近第乙個點 引數 pt1 引數 f 的值越接近 0,則內插點就越接近第二個點 引數 pt2 param...

計算兩點之間的距離

檔名稱 test.cpp 完成日期 2013年10月17日 版本號 v1.0 輸入描述 輸入兩個橫縱座標 問題描述 輸入兩個橫縱座標,求兩點之間的距離 程式輸出 兩點之間的距離 問題分析 通過輸入兩個橫縱座標,求兩點之間的距離 演算法設計 略 include includeusing namespa...

2025 兩點之間的距離

time limit 3 second memory limit 2 mb 輸入平面上兩點的座標,通過呼叫乙個計算兩點間距離的函式求出兩者的距離 兩行,第一行為某一點的座標x y,中間用空格隔開,第二行為另一點的座標x y,中間用空格隔開。一行,兩點間的距離,保留兩位小數 8.5 12.5 1 01...