<pre code_snippet_id="1628801" snippet_file_name="blog_20160330_1_8408168" name="code" class="cpp">

1、三维曲线: plot3()

→plot3(X1,Y1,Z1,...)
    →plot3(X1,Y1,Z1,LineSpec,...)
    →plot3(...,'PropertyName',PropertyValue,...)
    →h = plot3(...)
    plot3( )的用法与plot( )类似,只是多了一个 Z 数组。举例:
<span style="font-size:18px;">>> t=[0:0.2:10*pi];
>> x=2*t;
>> y=sin(t);
>> z=cos(t);
>> plot3(x,y,z,'bo');
>> hold on
>> plot3(x,y,z,'r-','LineWidth',2);</span>

    用plot3( )同时绘制多条3d曲线
    当X,Y,Z为同维的二维数组,plot3( )将 X 、Y、Z 相应的列相组合,绘制多条3d曲线。

2、二维数据网格: meshgrid( )

   [X,Y] = meshgrid(x,y)  由向量 x 和 y 生成二维数组X和Y,用来计算二元函数 f(x,y)的值Z = f(X,Y)。二维数组X,Y,Z可用来绘制三维曲线、三维网格图、三维曲面图等。 输出数组 X 中的行向量相当于向量 x ,输出数组 Y 中的列向量相当于向量 y 。[X,Y] = meshgrid(x)  等价于[X,Y] = meshgrid(x,x)。 
实质:
<span style="font-size:18px;">x =  -4:0.5:4;
y = ( 4:-0.5:-4 )';X = repmat(x,length(y),1);
Y = repmat(y,1,length(x));</span>

3、三维网格图: mesh( ) / meshc( ) / meshz( )

    →mesh(X,Y,Z):绘制由数组 X,Y,Z 所确定的曲面的网格图
        X,Y,Z 都为二维数组时,要求它们的维数相同。X,Y 也可以是向量,但 Z 必须为二维数组, [m,n] = size(Z),此时必须满足:length(X) = n 且 length(Y) = m。
    →mesh(Z): 相当于X = 1:n ,Y = 1:m,其中 [m,n] = size(Z) 
    →mesh(...,C):二维数组C确定网格颜色,省略C时相当于 C=Z
    →mesh(...,'PropertyName',PropertyValue,...):设置属性值
    →mesh(axes_handles,...) :在指定的坐标轴绘图
    →h = mesh(...):返回句柄
举例:
<span style="font-size:18px;">>>  x =  -4:0.2:4;
>>  [X,Y] = meshgrid(x);
>>  Z = sin(sqrt(X.^2+Y.^2));
>>  h = mesh(X,Y,Z);
>>  c1 = get(h,'FaceColor');</span>

   默认情况下每个四边形区域填充的是白色,因此c1的值 [1,1,1]
<span style="font-size:18px;">>> hidden off;
>> c2 = get(h,'FaceColor');</span>
    hidden off命令是使每个四边形区域不填充任何颜色,是空的,可以看到后面的图线。因此c2的值为 none
meshc(X,Y,Z)
    调用方式与 mesh 相同,在 mesh 基础上增加等高线
举例:
<span style="font-size:18px;">>> x =  -10:0.5:10 ;
>> [X,Y] = meshgrid(x);
>> r = sqrt(X.^2+Y.^2)+eps;
>> Z = sin(r)./r;
>> meshc(X,Y,Z);</span>
    →meshz(X,Y,Z)
    调用方式与 mesh 相同,在 mesh 基础上屏蔽边界面

4、三维表面图: surf( ) / surfc( )

绘制由矩阵 X,Y,Z 所确定的表面图,参数含义同 mesh
    →surf(Z) :相当于X = 1:n ,Y = 1:m,其中 [m,n] = size(Z)
    →surf(Z,C) :二维数组C确定网格颜色,省略C时相当于 C=Z
    →surf(X,Y,Z) :绘制由数组 X,Y,Z 所确定的曲面图
    →surf(X,Y,Z,C) :
    →surf(...,'PropertyName',PropertyValue) :设置属性值
    →surf(axes_handles,...):在指定的坐标轴绘图
    →h = surf(...) :返回句柄
举例:
<span style="font-size:18px;">>> x =  -10:0.5:10 ;
>> [X,Y] = meshgrid(x);
>> r = sqrt(X.^2+Y.^2)+eps;
>> Z = sin(r)./r;
>> surf(X,Y,Z);</span>
    →surfc(X,Y,Z)
        调用方式与 surf 相同,在 surf 基础上增加等高线
    mesh( ) / surf( )的一些常用属性

属性名称

意义

取值

EdgeColor

网格线颜色

{ColorSpec} | none | flat | interp

FaceColor

四边形网格的填充颜色

ColorSpec | none | {flat} | interp | texturemap

LineStyle

网格线线型

{-} | -- | : | -. | none

LineWidth

网格线线宽

 

Marker

标记点形状

none | + | o | * | . | x | s | d | p | h …..

MarkerEdgeColor

标记点边界颜色

none | {auto} | flat | ColorSpec

MarkerFaceColor

闭合的标记点填充颜色

{none} | auto | flat | ColorSpec

MarkerSize

标记点大小

size in points

MeshStyle

网格类型

{both} | row | column

例:mesh() / surf( )属性设置
<span style="font-size:18px;">>> x =  -10:0.5:10 ;
>> [X,Y] = meshgrid(x);
>> r = sqrt(X.^2+Y.^2)+eps;
>> Z = sin(r)./r;
>> h = mesh(X,Y,Z,'EdgeColor','black');
>> set(h,'FaceColor','r');
>> set(h,'LineWidth',2);</span>
 
<span style="font-size:18px;">>> x =  -10:0.5:10 ;
>> [X,Y] = meshgrid(x);
>> r = sqrt(X.^2+Y.^2)+eps;
>> Z = sin(r)./r;
>> surf(X,Y,Z,'EdgeColor','none');</span>

5、利用surf( )绘制一些常见的三维表面图

mesh()/surf()绘制三维曲面的方法:
        (1)先根据X,Y,Z数组确定网格点
        (2)用网格线连接在同一行中的网格点
        (3)用网格线连接在同一列中的网格点
        (4)用颜色数组C确定网格线(面)的颜色

用surf( )绘制四边形平面

    绘图思路:
        把四个顶点分成"2行2列",将相应的坐标放进X,Y,Z数组即可绘图。同理,对 2n 边形,可将 2n个顶点分成 "2行n列 "或" n行2列 "进行处理。对凹多边形,这样处理可能会出错。
举例
<span style="font-size:18px;">>> clc;
>> clear all;
>> close all;
>> A = [1;0;2];
>> B = [3;0;3];
>> C = [1;0;0];
>> D = [3;0;0];>> P = [A,B;C,D];>> X = P([1,4],:);
>> Y = P([2,5],:);
>> Z = P([3,6],:);
>> h = surf(X,Y,Z);
>> set(h,'FaceColor','b');
>> axis([0,4,-1,1,0,4]);</span>

用surf( )绘制三角形平面

    绘图思路:
        想象一下,有两个A点,只不过它们完全重合,这样就有四个顶点了,可以分成"2行2列",将相应的坐标放进X,Y,Z数组即可绘图。选取合适的顶点,这个想法对任意多边形都可以。
    例:绘制一个长方体表面图(共六个面)
<span style="font-size:18px;">>> L = rand(1);
>> W = rand(1);
>> H = rand(1);
>> A = rand(3,1);
>> B = A + [L;0;0];
>> C = B + [0;W;0];
>> D = A + [0;W;0];
>> r1 = repmat(A,1,5);
>> r2 = [A,B,C,D,A];
>> r3 = r2 + repmat([0;0;H],1,5);
>> r4 = repmat(r3(:,1),1,5);
>> P=[r1;r2;r3;r4];
>> X = P(1:3:end,:);
>> Y = P(2:3:end,:);
>> Z = P(3:3:end,:);
>> surf(X,Y,Z,'FaceColor','b','EdgeColor','none')
>> axis vis3d
>> hold on
>> x = X(2:3,:);   % x,y,z用来绘制线框
>> y = Y(2:3,:);
>> z = Z(2:3,:);
>> plot3(x,y,z,'r','LineWidth',3);
>> plot3(x',y',z','r','LineWidth',3);</span>

用surf( )绘制平行于XOY平面的正多边形平面

一些特殊图形的绘制

<span style="font-size:18px;">>> z1 = 0   %底面所在的平面
>> z2 = 2 ;  %顶面面所在的平面
>> M = 20 ; % 纬线数目
>> N = 20; % 经线数目
>> t = linspace(0,2*pi,N);
>> s = linspace(0,2*pi, M)';
>> r = (2 + sin(s));
>> h = linspace(z1,z2, M)';
>> X = r*cos(t);
>> Y = r*sin(t);
>> Z = h*ones(size(t));
>> surf(X,Y,Z);</span>
 
<span style="font-size:18px;">>> z1 = 0   %底面所在的平面
>> z2 = 2 ;  %顶面面所在的平面
>> M = 20 ; % 纬线数目
>> N = 20; % 经线数目
>> t = linspace(0,2*pi,N);
>> s = linspace(0,2*pi, M)';
>> r = (2 + sin(s));
>> h = linspace(z1,z2, M)';
>> [T,R] = meshgrid(t,r);
>> [T,H] = meshgrid(t,h);
>> X = R.*cos(T);
>> Y = R.*sin(T);
>> Z = H;
>> surf(X,Y,Z);</span>
 
<span style="font-size:18px;">>> z1 = 0   %底面所在的平面
>> z2 = 2 ;  %顶面面所在的平面
>> M = 20 ; % 纬线数目
>> N = 20; % 经线数目
>> t = linspace(0,2*pi,N);
>> s = linspace(0,2*pi, M)';
>> r = (2 + cos(s));
>> h = linspace(z1,z2, M)';
>> X = r*cos(t);
>> Y = r*sin(t);
>> Z = h*ones(size(t));
>> surf(X,Y,Z);</span>
<span style="font-size:18px;">>> z1 = 0   %底面所在的平面
>> z2 = 2 ;  %顶面面所在的平面
>> M = 20 ; % 纬线数目
>> N = 20; % 经线数目
>> t = linspace(0,2*pi,N);
>> s = linspace(0,2*pi, M)';
>> r =sin(s)./(s+eps);
>> h = linspace(z1,z2, M)';
>> X = r*cos(t);
>> Y = r*sin(t);
>> Z = h*ones(size(t));
>> surf(X,Y,Z);</span>
<span style="font-size:18px;">>> r = 2;    %球半径
>> r = 2;    %球半径
>> N = 30;  %纬线数
>> phi = 0:2*pi/M:2*pi ;
>> theta = linspace(0,pi,N)';
>> X = r*sin(theta)*cos(phi);
>> Y = r*sin(theta)*sin(phi);
>> Z = r*cos(theta)*ones(size(phi));
>> surf(X,Y,Z);
>> axis square;</span>
<span style="font-size:18px;">>> r = 2;
>> theta = linspace(0,pi,20);
>> phi = linspace(0,2*pi,21);
>> [T,P]=meshgrid(theta,phi);
>> X = r.*sin(T).*cos(P);
>> Y = r.*sin(T).*sin(P);
>> Z = r.*cos(T);
>> surf(X,Y,Z);
>> axis square;</span>

Matlab提供的绘制柱面的函数cylinder

    →[X,Y,Z]=cylinder 返回一半径为1、高度为1的圆柱面的x-,y-,z-轴的坐标值,圆柱面的圆周有20个距离相同的点。
    →[X,Y,Z]=cylinder(r) 返回一半径为r、高度为1的柱面的x-,y-,z-轴的坐标值,柱面的圆周有20个距离相同的点。
    →[X,Y,Z]=cylinder(r,n) 返回一半径为r、高度为1的柱面的x-,y-,z-轴的坐标值,圆柱面的圆周有指定的n个距离相同的点
    →cylinder(...) 画出柱面。

<span style="font-size:18px;">>> t = 0:pi/10:2*pi;
>> [X,Y,Z] = cylinder(2+cos(t));
>> surf(X,Y,Z);
>> axis square</span>
 
 

Matlab提供的绘制球面的函数sphere

    →sphere  生成三维直角坐标系中的单位球体。该单位球体有20*20个面。
    →sphere(n)  在当前坐标系中画出有 n*n 个面的球体
    →[X,Y,Z] = sphere(n) 
返回三个阶数为(n+1)*(n+1)的直角坐标系中的二维坐标数组阵。该命令没有画图,只是返回矩阵。用户可以用命    令surf(X,Y,Z)或mesh(X,Y,Z)画出单位球体球体也可以直接用sphere(n)直接画出球体
<span style="font-size:18px;">>> sphere;
>> axis equal</span>

Matlab提供的绘制椭球面的函数ellipsoid

    →[x,y,z] = ellipsoid(xc,yc,zc, a,b,c,n)
返回绘图数据,x,y,z均为(n+1)×(n+1)的二维数组
    →[x,y,z] = ellipsoid(xc,yc,zc,a,b,c)
返回绘图数据,n = 20
    →ellipsoid(axes_handle,...)在指定坐标轴画出椭球面
    →ellipsoid(...)   画出椭球面
<span style="font-size:18px;">>> [x, y, z] = ellipsoid(0,0,0,3,2,1,30);
>> surf(x, y, z);
>> axis equal</span>
 

matlab 3D绘图详解相关推荐

  1. Python Matplotlib 3D绘图详解(汇总)

    Python Matplotlib 3D绘图详解(汇总) 最初开发的 Matplotlib,仅支持绘制 2d 图形,后来随着版本的不断更新, Matplotlib 在二维绘图的基础上,构建了一部分较为 ...

  2. matlab三位画图_matlab 3D绘图详解(示例代码)

    1.三维曲线: plot3() →plot3(X1,Y1,Z1,...) →plot3(X1,Y1,Z1,LineSpec,...) →plot3(...,'PropertyName',Propert ...

  3. iOS 2D绘图详解(Quartz 2D)之路径(点,直线,虚线,曲线,圆弧,椭圆,矩形)

    前言:一个路径可以包含由一个或者多个shape以及子路径subpath,quartz提供了很多方便的shape可以直接调用.例如:point,line,Arc(圆弧),Curves(曲线),Ellip ...

  4. python turtle循环图案-Python内置模块turtle绘图详解

    urtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的 ...

  5. Python Turtle 海龟绘图详解官方文档中文版

    Python Turtle 海龟绘图详解 (官方文档中文版)-安徽省太湖中学陈晓中整理 概述 海龟绘图很适合用来引导孩子学习编程. 最初来自于 Wally Feurzeig, Seymour Pape ...

  6. iOS绘图详解-多种绘图方式、裁剪、滤镜、移动、CTM

    iOS绘图详解 摘要: Core Graphics Framework是一套基于C的API框架,使用了Quartz作为绘图引擎.它提供了低级别.轻量级.高保真度的2D渲染.该框架可以用于基于路径的 绘 ...

  7. 【Python】基金/股票 最大回撤率计算与绘图详解(附源码和数据)

    如果你想找的是求最大回撤的算法,请跳转:[Python] 使用动态规划求解最大回撤详解 [Python]基金/股票 最大回撤率计算与绘图详解(附源码和数据) 0. 起因 1. 大成沪深300指数A 5 ...

  8. MATLAB基本语法详解

    MATLAB基本语法详解 下面内容 :变量.M-Files.决策.循环容易掌握 命令.数据类型.运算符不需要记住,用了再查 变量 每个MatLab变量可以是数组或者矩阵 最简单的方法指定变量 x = ...

  9. 《MATLAB图像处理实例详解》:学习第六天(2022.10.09)

    4.2.3 图像的缩放 MATLAB 图像处理工具箱中提供了函数imresize( )进行图像的缩放操作,其具体的调用格式如下: B=imresize(A, m):该函数返回缩放后的图像B:A为要进行 ...

最新文章

  1. git开发之查看修改账户邮箱命令
  2. java与java ee_Java EE 7社区调查结果!
  3. date加一天php,PHP时间日期操作增减(date strtotime) 加一天 加一月
  4. 大数据之-Hadoop3.x_MapReduce_MapJoin案例调试_debug---大数据之hadoop3.x工作笔记0135
  5. yolov5学习率设置
  6. 机械硬盘的改进想法:一臂多头
  7. 微信小程序期末大作业,飞机大战
  8. 通吃AD和宽带 TP-LINK无线路由猫评测
  9. PMP学习笔记 第5章 项目范围管理
  10. 计算机类绘图的文献,基于计算机CAD绘图探讨论文
  11. Ubuntu 16.04系统下出现搜狗拼音安装失败问题
  12. 《那些年啊,那些事——一个程序员的奋斗史》——77
  13. the little schemer 学习
  14. 你家的wifi安全么?
  15. 数据库之区分DB\DBMS\DBS
  16. python的split()函数!
  17. 计算机弹音乐百度百科,音乐术语
  18. 网站对战服务器,[竞技对战游戏]反恐一些不错的有网站个人排行的服务器
  19. 图像处理中掩膜(mask)的意义
  20. 在校外时利用Easy Connect连接西工大校园内网(FTP、内网资源)简易教程

热门文章

  1. tablelayout的使用
  2. NYOJ 562 盒子游戏
  3. NYOJ 61 传纸条(一)
  4. NYOJ 179 LK's problem
  5. centos 搭建git服务器
  6. shop--10.店铺详情(后台+前端类似于shoplist)
  7. 【bzoj2038】[国家集训队2010]小Z的袜子 莫队
  8. 用 CSS 做轮播图
  9. 利用扩展事件进行调优和Troubleshooting PPT分享
  10. 新的信息论诞生前的若干问题分析