logo资料库

使用MATLAB画圆柱圆锥圆台.doc

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
用 Matlab 画圆柱圆台圆锥 自己建一个 M 文件,命名任意,如 tu.m 在命令窗口输入:tu %以下为 tu.m 文件 clc clear all %圆柱 [X,Y,Z]=cylinder(15.7,20); h=1.22*Z; surf(X,Y,h); hold on %圆台 a=25/180*pi;%可修改 b=12.06/180*pi;%可修改 r=3.2;%可修改 h1=r*sin(a+b)/sin(a-b)*sin(a); %h1=0.66; X1=[0 0 1.22];%底面中心坐标 X2=[0 0 1.22+h1];%顶面中心坐标 L2=15.7-2.6/tan(a); r=[15.7 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.2:0); h2=1.5;%可修改 Z2=h2*Z2; Z2=Z2+ones(size(Z2))*(1.22+h1); surf(X2,Y2,Z2); grid on %r=0:0.1:3.2;R=0:0.1:15.7; %alpha=0:pi/20:2*pi;%角度[0,2*pi] %x=R*cos(alpha); %y=R*sin(alpha); %a=39.0;b=12.06;
%h=1.22+R.*tan(b)+r.*sin(a); %[x,y]=meshgrid([-4:0.5:4]); %surf(h) 新建一个 M 文件,如下命名为 Cone.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',[0.52 0.52 0.52] % 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 %圆台的函数,文件名为 Cone.m % 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','no ne') 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 %light('Style','local','Position',[720 0 500]); headlight;
%light('Style','local','Position',[0 480 500]); 参考文献: http://www.matlabsky.com/thread-273-1-1.html
分享到:
收藏