您的当前位置:首页使用Matlab画出圆台圆锥圆柱

使用Matlab画出圆台圆锥圆柱

2022-07-19 来源:乌哈旅游


用Matlab画圆柱圆台圆锥

自己建一个M文件,命名任意,如

在命令窗口输入:tu

%以下为文件

clc

clear all

%圆柱

[X,Y,Z]=cylinder,20);

h=*Z;

surf(X,Y,h);

hold on

%圆台

a=25/180*pi;%可修改

b=180*pi;%可修改

r=;%可修改

h1=r*sin(a+b)/sin(a-b)*sin(a);

%h1=;

X1=[0 0 ];%底面中心坐标

X2=[0 0 +h1];%顶面中心坐标

L2= L2];

n=20;

cyl_color='b';

closed=1;

lines=1;

[cone,EndPlate1,EndPlate2] = Cone(X1,X2,r,n,cyl_color,closed,lines)%调用圆台的函数

%圆锥

[X2,Y2,Z2]=cylinder(L2::0);

h2=;%可修改

Z2=h2*Z2;

Z2=Z2+ones(size(Z2))*+h1);

surf(X2,Y2,Z2);

grid on

%r=0::;R=0::;

%alpha=0:pi/20:2*pi;%角度[0,2*pi]

%x=R*cos(alpha);

%y=R*sin(alpha);

%a=;b=;

%h=+R.*tan(b)+r.*sin(a);

%[x,y]=meshgrid([-4::4]);

%surf(h)

新建一个M文件,如下命名为

function [Cone,EndPlate1,EndPlate2] = Cone(X1,X2,R,n,cyl_color,closed,lines)

%

% This function constructs a cylinder connecting two center points

%

% Usage :

% [Cone,EndPlate1,EndPlate2] = Cone(X1,X2,R,n,cyl_color,closed,lines)

%

% Cone-------Handle of the cone

% EndPlate1------Handle of the Starting End plate

% EndPlate2------Handle of the Ending End plate

% X1 and X2 are the 3x1 vectors of the two points

% R is the radius of the cylinder/cone R(1) = start radius, R(2) = end radius

% n is the no. of elements on the cylinder circumference (more--> refined)

% cyl_color is the color definition like 'r','b',[ ]

% closed=1 for closed cylinder or 0 for hollow open cylinder

% lines=1 for displaying the line segments on the cylinder 0 for only

% surface

%

% Typical Inputs

% X1=[10 10 10];

% X2=[35 20 40];

% r=[1 5];

% n=20;

% cyl_color='b';

% closed=1;

%

% NOTE: There is a MATLAB function \"cylinder\" to revolve a curve about an

% axis. This \"Cylinder\" provides more customization like direction and etc

%圆台的函数,文件名为

% Calculating the length of the Cone

length_cyl=norm(X2-X1);

% Creating 2 circles in the YZ plane

t=linspace(0,2*pi,n)';

xa2=R(1)*cos(t);

xa3=R(1)*sin(t);

xb2=R(2)*cos(t);

xb3=R(2)*sin(t);

% Creating the points in the X-Direction

x1=[0 length_cyl];

% Creating (Extruding) the cylinder points in the X-Directions

xx1=repmat(x1,length(xa2),1);

xx2=[xa2 xb2];%xx2=repmat(x2,1,2);

xx3=[xa3 xb3];%xx3=repmat(x3,1,2);

% Drawing two filled cirlces to close the cylinder

if closed==1

hold on

EndPlate1=fill3(xx1(:,1),xx2(:,1),xx3(:,1),'r');

EndPlate2=fill3(xx1(:,2),xx2(:,2),xx3(:,2),'r');

end

% Plotting the cylinder along the X-Direction with required length starting

% from Origin

Cone=mesh(xx1,xx2,xx3);

% Defining Unit vector along the X-direction

unit_Vx=[1 0 0];

% Calulating the angle between the x direction and the required direction

% of Cone through dot product

angle_X1X2=acos( dot( unit_Vx,(X2-X1) )/( norm(unit_Vx)*norm(X2-X1)) )*180/pi;

% Finding the axis of rotation (single rotation) to roate the Cone in

% X-direction to the required arbitrary direction through cross product

axis_rot=cross([1 0 0],(X2-X1) );

% Rotating the plotted Cone and the end plate circles to the required

% angles

if angle_X1X2~=0 % Rotation is not needed if required direction is along X

rotate(Cone,axis_rot,angle_X1X2,[0 0 0])

if closed==1

rotate(EndPlate1,axis_rot,angle_X1X2,[0 0 0])

rotate(EndPlate2,axis_rot,angle_X1X2,[0 0 0])

end

end

% Till now Cone has only been aligned with the required direction, but

% position starts from the origin. so it will now be shifted to the right

% position

if closed==1

set(EndPlate1,'XData',get(EndPlate1,'XData')+X1(1))

set(EndPlate1,'YData',get(EndPlate1,'YData')+X1(2))

set(EndPlate1,'ZData',get(EndPlate1,'ZData')+X1(3))

set(EndPlate2,'XData',get(EndPlate2,'XData')+X1(1))

set(EndPlate2,'YData',get(EndPlate2,'YData')+X1(2))

set(EndPlate2,'ZData',get(EndPlate2,'ZData')+X1(3))

end

set(Cone,'XData',get(Cone,'XData')+X1(1))

set(Cone,'YData',get(Cone,'YData')+X1(2))

set(Cone,'ZData',get(Cone,'ZData')+X1(3))

% Setting the color to the Cone and the end plates

set(Cone,'AmbientStrength',1,'FaceColor',cyl_color,'FaceLighting','gouraud');%,'EdgeColor','none')

if closed==1

set([EndPlate1

EndPlate2],'AmbientStrength',1,'FaceColor',cyl_color,'FaceLighting','gouraud');%,'EdgeColor','none')

else

EndPlate1=[];

EndPlate2=[];

end

% If lines are not needed making it disapear

if lines==0

set(Cone,'EdgeAlpha',0)

end

%shading faceted % faceted flat interp;

%camlight;

%light;

%lighting gouraud; %flat gouraud phong none

material shiny; %shiny dull metal

%colormap(bone)

%camlight headlight;

%light('Style','local','Position',[720 0 500]);

%light('Style','local','Position',[0 480 500]);

参考文献:

因篇幅问题不能全部显示,请点此查看更多更全内容