精华内容
下载资源
问答
  • 使用Matlab绘制三维圆柱体和球体

    万次阅读 2019-03-15 20:45:57
    例1,绘制一个圆柱体的三维图像,要求圆柱体底面圆心在坐标原点,底面半径为3,高度为2,颜色为红色。 [x,y,z]=cylinder(3); %调用cylinder函数‘()’内半径为3. 运行此命令后系统自动为x,y,z填充了数据 z(2,:)=2;...

    使用Cylinder功能函数绘制圆柱体侧面

    在matlab中自带了绘制圆柱体的功能函数cylinder,其用法如下:
    例1,绘制一个圆柱体的三维图像,要求圆柱体底面圆心在坐标原点,底面半径为3,高度为2,颜色为红色。

    [x,y,z]=cylinder(3);  %调用cylinder函数‘()’内半径为3. 运行此命令后系统自动为x,y,z填充了数据
    z(2,:)=2;      %设置矩阵Z的第二行数值全为2,即设置圆柱体高度
    subplot(1,2,1);            %绘制子图像(1,2,1)代表一行两列的第一个图像
    surf(x,y,z,'FaceColor',[1,0,0]);       %使用surf功能将x,y,z的数据导入。FaceColor即设置圆柱体颜色,红色色号为[1,0,0]
    daspect([1 1 1])                  %设置x,y,z坐标间距等长。
    view(30,30)                     %设置图像显示角度
    hold on                                %停止图像刷新
    

    上述代码的结果如下
    在这里插入图片描述

    从图中可看出,我们还缺少顶盖和底盖。可用如下代码实现:

    theta = linspace(0,2*pi,40)       %将一个圆周分为40份
    X=3*cos(theta);                    %将cos值赋予x
    Y=3*sin(theta);                     %将sin赋予Y
    Z=ones(size(X))+1;                 %设置Z与X长度想等
    fill3(X,Y,Z,[1,0,0]);                  %使用Fill3功能函数,填充XYZ所围成的区域,这个是顶盖
    fill3(X,Y,Z-2,[1,0,0]);              %底盖
    

    运行结果如下:
    在这里插入图片描述

    这样就可得到一个封闭完整的圆柱体。 下面再来绘制一个球体。
    例2.绘制一个中心在(8,-2,2),半径为4的蓝色球体。

    [x1 y1 z1]=sphere;       %将球体数据写入三矩阵中
    a=[8 -2 2  4];                  %设置参数
    subplot(1,2,2);                  %绘制子图像2
    s1=surf(x1*a(1,4)+a(1,1),y1*a(1,4)+a(1,2),z1*a(1,4)+a(1,3),'FaceColor',[0,0,1]);
                             %将已配置好的数据用surf函数绘制成三位图像
    daspect([1 1 1])         %设置坐标轴长度等长
    view(30,10)               %设置舒服的观看角度
    

    结果:
    在这里插入图片描述

    将上述代码写到一个脚本中即可完整的绘制出一个封闭的红色圆柱体和一个封闭的蓝色球体。这篇文章只要参考mathwork英文网站上的surf教学,笔者使用的是matlab2018b,希望能够帮助刚刚入门matlab的伙伴快乐的学习matlab。

    展开全文
  • 主要学习了空间圆柱体和空间长方形的绘制方法。有两个surface property:'FaceColor'和'EdgeColor’;先讲'FaceColor’,它指定了surface出曲面的颜色,可以是[r,g,b]的一个向量,分别表示了红绿蓝的颜色配比;也...

    162142065_1_20190526020809613

    主要学习了画空间圆柱体和空间长方形的绘制方法。

    有两个surface property:'FaceColor'和'EdgeColor’;

    先讲'FaceColor’,它指定了surface画出曲面的颜色,可以是[r,g,b]的一个向量,分别表示了红绿蓝的颜色配比;

    也可以是'interp’,画出来是由z的值决定的渐变色,可以使用colormapeditor来调节颜色(在代码中写上colormapeditor即可唤出调色板);

    然后是'EdgeColor’,它会在曲面的表面画出网格,指定颜色的方法同上。

    但是有一个疑问没有解决:就是如何只显示各个棱的网格线,而不是整个面的网格线??这个留待后面继续摸索吧。

    surface(x,y,z)函数画出来的图像如果想要平移,可以直接在带入参数时修改。比如,沿z轴正方向平移10,就是surface(x,y,z+10);

    最后有一个实现视角自动旋转的小功能:

    view(az,el)中,az可以调节物体旋转的角度,el调节摄像机的俯仰角度for i=1:120

    view(i*1, 30);

    pause(0.01);

    end

    代码如下:function test()

    %%

    clear;

    clc;

    clf;

    z_delta = 6;

    %% draw head

    A = imread('head.jpg');

    [x,y,z]=sphere(30);

    h0=surface(x,y,z + z_delta,'EdgeColor','none');

    rotate(h0, [0,0,1], 90);

    set(h0,'CData',A,'FaceColor','texturemap');%texturemap纹理贴图

    %% draw body

    % FaceColor (orange)

    face_color = 'interp'; %[1, 0.6, 0];

    edge_color = 'b';

    colormapeditor;% up board[x1,y1] = meshgrid(-1:0.1:1, -1:0.1:1);z1 = repmat(-1, 21, 21);h1=surface(x1,y1,z1 + z_delta, 'EdgeColor',edge_color,'FaceColor',face_color);% left boardx2 = repmat(1, 21, 21); y2 = repmat([-1:0.1:1],21,1);for i=1:21 for j=1:21 z2(i,j)=-1-(i-1)*0.25;

    endendh2=surface(x2,y2,z2 + z_delta,'EdgeColor',edge_color,'FaceColor',face_color);% right boardx3 = repmat(-1, 21, 21);y3 = repmat([-1:0.1:1],21,1);for i=1:21 for j=1:21 z3(i,j)=-1-(i-1)*0.25; endendh3=surface(x3,y3,z3 + z_delta,'EdgeColor',edge_color,'FaceColor',face_color);%

    front boardy4 = repmat(1, 21, 21); %#okx4 = repmat([-1:0.1:1],21,1);for i=1:21 for j=1:21 z4(i,j)=-1-(i-1)*0.25; endendh4=surface(x4,y4,z4 + z_delta,'EdgeColor',edge_color,'FaceColor',face_color);% back boardy5 = repmat(-1, 21, 21);x5 = repmat([-1:0.1:1],21,1);for

    i=1:21 for j=1:21 z5(i,j)=-1-(i-1)*0.25; endendh5=surface(x5,y5,z5 + z_delta,'EdgeColor',edge_color,'FaceColor',face_color);%% draw armsrobot = robot_model();r_arm = 0.3;num_of_surf = 36;for i=2:5 if mod(i,2)==1 color_arm = 'r'; else color_arm = 'b'; end [Cylinder(i),

    EndPlate1(i), EndPlate2(i)] = cylinder3(robot(i).position, robot(i+1).position, r_arm, num_of_surf, color_arm, 1, 0);endfor i=7:10 if mod(i,2)==1 color_arm = 'r'; else color_arm = 'b'; end [Cylinder(i), EndPlate1(i), EndPlate2(i)] = cylinder3(robot(i).position,

    robot(i+1).position, r_arm, num_of_surf, color_arm, 1, 0);end%% rotate the angle of viewgrid on;axis equal;axis fill;for i=1:120 view(i*1, 30); pause(0.01);endend下面是由两个点画出一个空间圆柱体的代码,从CSDN上下载的别人的程序,就拿来直接用于画胳膊了。function [Cylinder, EndPlate1, EndPlate2] = cylinder3(X1,X2,r,n,cyl_color,closed,lines)

    %

    % This function constructs a cylinder connecting two center points

    %

    % Usage :

    % [Cylinder EndPlate1 EndPlate2] = cylinder3(X1+20,X2,r,n,'r',closed,lines)

    %

    % Cylinder-------Handle of the cylinder

    % 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

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

    % 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

    %%%%%%%%%%

    if (X1(1) > X2(1))

    tmpX = X1; X1 = X2; X2 = tmpX;

    end

    % Calculating the length of the cylinder

    length_cyl=norm(X2-X1);

    % Creating a circle in the YZ plane

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

    x2=r*cos(t);

    x3=r*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(x2),1);

    xx2=repmat(x2,1,2);

    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

    Cylinder=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 cylinder 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 cylinder in

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

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

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

    % angles

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

    rotate(Cylinder,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 cylinder 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(Cylinder,'XData',get(Cylinder,'XData')+X1(1))

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

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

    % Setting the color to the cylinder and the end plates

    set(Cylinder,'FaceColor',cyl_color)

    if closed==1

    set([EndPlate1 EndPlate2],'FaceColor',cyl_color)

    else

    EndPlate1=[];

    EndPlate2=[];

    end

    % If lines are not needed making it disapear

    if lines==0

    set(Cylinder,'EdgeAlpha',0)

    end

    展开全文
  • %圆柱半径n=100;%设置多少个边逼近圆h=5;%圆柱高[x,y,z]=cylinder(r,n);%生成标准的100个面的圆柱数据,半径为r,高为1,底面圆心0,0;z1=[z(1,:);z(2,:) h-1];%圆柱高增高,变为高h%为变成实心封顶添加数据z2=[z(1...

    clear all

    r=1;%圆柱半径

    n=100;%设置多少个边逼近圆

    h=5;%圆柱高

    [x,y,z]=cylinder(r,n);%生成标准的100个面的圆柱数据,半径为r,高为1,底面圆心0,0;

    z1=[z(1,:);z(2,:) h-1];%圆柱高增高,变为高h

    %为变成实心封顶添加数据

    z2=[z(1,:);z1;z1(2,:)];

    x2=[zeros(1,n 1);x;zeros(1,n 1)];

    y2=[zeros(1,n 1);y;zeros(1,n 1)];

    z3=[z1(1,:);z1(1,:)];

    x3=[x(1,:);x(1,:)];

    y3=[y(1,:);y(1,:)];

    z4=[z1(2,:);z1(2,:)];

    z5=z2([1,2],:);

    x5=x2([1,2],:);

    y5=y2([1,2],:);

    z6=z2([3,4],:);

    figure(1)

    mesh(x2,z2,y2)

    map=jet(16);

    cl=12;%可设置16种颜色(1-16)

    map1=map(cl,:);

    colormap(map1)

    alpha(0。

    6)%调节透明度(0-1)

    axis equal

    figure(2)

    surf(x2,z2,y2,'LineStyle','none')

    map=jet(16);

    cl=4;%可设置16种颜色(1-16)

    map1=map(cl,:);

    colormap(map1)

    hold on

    surf(x3,z3,y3)

    surf(x3,z4,y3)

    alpha(。

    7)%调节透明度(0-1)

    hold off

    axis equal

    figure(3)

    surf(x,z1,y)

    map=jet(16);

    cl=13;%可设置8种颜色(1-16)

    map1=map(cl,:);

    colormap(map1)

    hold on

    surf(x5,z5,y5,'LineStyle','none')

    surf(x5,z6,y5,'LineStyle','none')

    alpha(。

    9)%调节透明度(0-1)

    hold off

    axis equal

    全部

    展开全文
  • MATLAB画三维球体、半球体、圆柱、山峰等图像,源代码,可直接运行
  • Matlab画圆柱程序,已知三维空间中的两点(圆柱中轴的点),可以绘制圆柱的函数,转载的别人的。
  • Matlab在任意两点之间绘制三维圆柱

    千次阅读 2019-06-07 21:11:52
    此函数可能存在一些不足,请多多指教! 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...y=ROD_midpoint(...

    此函数可能存在一些不足,请多多指教!

    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;  %%
           end
           A2=[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    
        end
        if(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      
        end
    else
         % 先绕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;
           end
           A3=[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);   
           end
    end
    fill3(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;
    

    效果图
    此处修改视角,让图形更美观

    展开全文
  • MATLAB 画三维长方体 介绍+代码

    千次阅读 2020-07-15 11:09:44
    MATLAB 画三维长方体 介绍+代码 在做机械臂三维避障仿真时可能用到对空间障碍物进行描述,一般用长方体,圆柱体等描述,以下是两种长方体的程序,第一种是指定长方体的八个顶点坐标,第二种是指定长方体的一个角点...
  • matlab 绘制三维空间的立体箭头 function arrow3(X1,X2,r1,h,r2,color) %一个简单的实例:arrow3([1 2 3],[7 8 9],0.25,1,0.6,'b'); %箭头由圆柱体和圆锥体组成:包括圆柱体的起点和终点位置,以及半径,圆锥的半径...
  • 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-Directionx1=[0 length_cyl];% Creating (Extruding) the cylinder points in the X-Dire...
  • Matlab画三维图笔记

    万次阅读 多人点赞 2015-06-09 23:02:10
    plot3 基本的三维曲线图绘制 plot3(x,y,z),x,y,z均为相同长度的向量,会得到三个向量相同下标构成的的三维坐标(xi,yi,zi)(i=1~n)连的曲线 plot3(X,Y,Z),X,Y,Z均为...例 三维圆柱形螺旋线,x,y,z均为相同长度的向量 cl
  • 主要用MATLAB直接建立了一个三维圆柱体模型结构,用于图像处理的仿真
  • MATLAB 画圆柱

    2015-07-10 08:47:58
    MATLAB画三维圆柱体的源代码,能够自己改参数改变圆柱的形状、大小
  • data=[...2.45044693e-001, 5.48745331e-004, 8.08749646e-002, 1.51513513e+0032.44999379e-001, 5.48460463e-004, 8.08745697e-002, 1.51516602e+0032.44999602e-001, 4.40157048e-004, 8.06090757e-002, 1.515786...
  • 本文是科学计算与MATLAB语言的专题四的第5小节总结笔记,并结合了自己一点的理解,看完本文,可以轻松利用MATLAB相关函数,出漂亮的三维曲面。 1 平面网格数据的生成 在画三维曲面之前,需要将三维曲面对应的平面...
  • matlab】【点云】三维圆柱拟合

    千次阅读 2020-03-10 20:05:15
    偶然用到matlab圆柱拟合函数pcfitcylinder。简洁好用,速度比C++的pcl还快一点。可以搭配粗提取。同系列还有其他拟合函数。 sd=load('xxx.mat'); ptCloud2=pointCloud(sd); xlabel('X(m)') ylabel('Y(m)') zlabel...
  • 我有一个三维圆柱体图,想要它 的二维投影图,然后通过二维投影图重建出三维图像。希望有人指点迷津。非常感谢。程序:clear allcloseclc[X,Y,Z] = cylinder([0.5 0.5], 50);Z=zeros(1, length(X)) - 30;Y=Y(1,: );X...
  • 主要学习了空间圆柱体和空间长方形的绘制方法。 有两个surface property:'FaceColor'和‘EdgeColor’; 先讲‘FaceColor’,它指定了surface出曲面的颜色,可以是[r,g,b]的一个向量,分别表示了红绿蓝的颜色配比...
  • 1、MATLAB画三维图meshgrid函数简介 2、for循环画三维图 1、MATLAB画三维图meshgrid函数简介 MATLAB中meshgrid函数是用来生成网格的,函数用法是:   [X,Y] = meshgrid(x,y);这种是最常用的一种用法。x和y分别...
  • MATLAB绘制圆柱

    千次阅读 2021-01-20 17:31:10
    MATLAB绘制圆柱体1. 效果展示2. 代码汇总3. 函数调用4 多多点赞交流 1. 效果展示 例1. 绘制一个原点在(5,2,1),半径13,高度14的圆柱体: 通过调整坐标轴,可以做出比例适当的图片,如下: 2. 代码汇总 ...
  • 三维曲线plot3函数与plot函数用法十分相似,其调用格式为:plot3(x1,y1,z1,选项1,x2,y2,z2,选项2,…,xn,yn,zn,选项n)...当x,y,z是同维矩阵时,则以x,y,z对应列元素绘制三维曲线,曲线条数等于矩阵列数。  例 绘制...
  • MATLAB——三维图像

    千次阅读 多人点赞 2019-07-12 20:31:37
    1.绘制三位曲线 (1)plot3函数 1.基本用法:plot3(x,y,z);其中,参数x、y、z组成一组曲线的坐标。 例1 绘制一条空间曲线 x=[0.2,1.8,2.5]; y=[1.3,2.8,1.1]; z=[0.4,1.2,1.6]; plot3(x,y,z) grid on axis([0,3,1,3,...
  • Matlab绘制常见三维图形

    千次阅读 2010-06-10 20:26:00
    椭球 单叶双曲面 双叶双曲面 椭圆抛物面 马鞍面 圆环面 螺旋面 螺旋卷筒 螺旋管,俗称“弹簧” 圆柱上的缎带 纽带
  • [matlab]三维画图

    千次阅读 2018-08-08 01:18:58
    plot3是画三维图形的最基本函数,调用格式 plot3(X1,Y1,Z1,...) plot3(X1,Y1,Z1,LineSpec,...) plot3(...,'PropertyName',PropertyValue,...) X1,Y1,Z1为向量或者矩阵,LineSpec定义曲线线型、颜色和数据点,...
  • 三维多边形网格面绘制,三维网格绘制,matlab绘制三维曲面,百度地图绘制多边形,canvas绘制多边形,opengl绘制三维曲面,surfer绘制多边形,c绘制多边形,android绘制多边形,ios绘制多边形九、三维多边形网格面绘制1、三维...
  • matlab三维作图教程

    2016-07-14 18:09:10
    matlab三维作图教程   三维曲线 plot3函数与plot函数用法十分相似,其调用格式为: plot3(x1,y1,z1,选项1,x2,y2,z2,选项2,…,xn,yn,zn,选项n) 其中每一组x,y,z组成一组曲线的坐标参数,选项的定义和plot函数...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 909
精华内容 363
关键字:

matlab画三维圆柱

matlab 订阅