资源简介

可以任意更改程序中三维坐标,显示轴,圆柱高度及圆柱半径等参数,注释非常详细~

资源截图

代码片段和文件信息

%function [Cylinder EndPlate1 EndPlate2] = cylinder3(X1X2rncyl_colorclosedlines)

% for test
X1=[10 10 10];%输入三维坐标
X2=[10 10 30];%根据显示方向调整坐标值,本例选择以Z坐标为显示方向,即原始坐标值加上高度
r=0.25;%显示圆柱的半径
n=20;%圆柱面由n个矩形组成
cyl_color=‘b‘;%显示颜色
closed=1;%选择封闭实体;1为选择空心实体显示
lines=0;%显示曲面,不显示棱边;1为显示棱边


length_cyl=norm(X2-X1);

t=linspace(02*pin)‘;
x2=r*cos(t);
x3=r*sin(t);

x1=[0 length_cyl];

xx1=repmat(x1length(x2)1);
xx2=repmat(x212);
xx3=repmat(x312);

if closed==1
    hold on
    EndPlate1=fill3(xx1(:1)xx2(:1)xx3(:1)‘r‘);
    EndPlate2=fill3(xx1(:2)xx2(:2)xx3(:2)‘r‘);
end

Cylinder=mesh(xx1xx2xx3);

unit_Vx=[1 0 0];

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

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

if angle_X1X2~=0 
    rotate(Cylinderaxis_rotangle_X1X2[0 0 0])
    if closed==1
        rotate(EndPlate1axis_rotangle_X1X2[0 0 0])
        rotate(EndPlate2axis_rotangle_X1X2[0 0 0])
    end
end

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(Cylinder‘XData‘get(Cylinder‘XData‘)+X1(1))
set(Cylinder‘YData‘get(Cylinder‘YData‘)+X1(2))
set(Cylinder‘ZData‘get(Cylinder‘ZData‘)+X1(3))

set(Cylinder‘FaceColor‘cyl_color)
if closed==1
    set([EndPlate1 EndPlate2]‘FaceColor‘cyl_color)
else
    EndPlate1=[];
    EndPlate2=[];
end

if lines==0
    set(Cylinder‘EdgeAlpha‘0)
end

axis([050050050]);%控制坐标轴范围,分别为XYZ最大和最小值


 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       1888  2011-07-12 23:34  test.m

----------- ---------  ---------- -----  ----

                 1888                    1


评论

共有 条评论