1. 程式人生 > >matlab 3D繪圖詳解

matlab 3D繪圖詳解

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


 matlab繪圖函式(3):3D繪圖 - 水藻 - 水藻  
           用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>


 matlab繪圖函式(3):3D繪圖 - 水藻 - 水藻  
        預設情況下每個四邊形區域填充的是白色,因此c1的值 [1,1,1]
<span style="font-size:18px;">>> hidden off;
>> c2 = get(h,'FaceColor');</span>
 matlab繪圖函式(3):3D繪圖 - 水藻 - 水藻  
        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>
 matlab繪圖函式(3):3D繪圖 - 水藻 - 水藻  
        →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>
 matlab繪圖函式(3):3D繪圖 - 水藻 - 水藻  
        →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>
 matlab繪圖函式(3):3D繪圖 - 水藻 - 水藻
<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>
 matlab繪圖函式(3):3D繪圖 - 水藻 - 水藻  
   

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>
 matlab繪圖函式(3):3D繪圖 - 水藻 - 水藻  
   

用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>
 matlab繪圖函式(3):3D繪圖 - 水藻 - 水藻  
   

用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>
 matlab繪圖函式(3):3D繪圖 - 水藻 - 水藻
<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>
 matlab繪圖函式(3):3D繪圖 - 水藻 - 水藻
<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>
 matlab繪圖函式(3):3D繪圖 - 水藻 - 水藻  
 
<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>
 matlab繪圖函式(3):3D繪圖 - 水藻 - 水藻  
<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>
 matlab繪圖函式(3):3D繪圖 - 水藻 - 水藻  
<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繪圖函式(3):3D繪圖 - 水藻 - 水藻  
   

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繪圖函式(3):3D繪圖 - 水藻 - 水藻
 


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繪圖函式(3):3D繪圖 - 水藻 - 水藻  

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繪圖函式(3):3D繪圖 - 水藻 - 水藻  

相關推薦

matlab 3D繪圖

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

ubuntu16.04安裝MATLAB R2017b步驟

原博主寫的真的超級詳細並且很好用,博主最後一段文字也是感人肺腑了: https://blog.csdn.net/qq_32892383/article/details/79670871 但是其中有一處錯誤,就是在最後的優化的第二步中,路徑錯誤: 2)為了防止可能的錯誤,安裝MATLAB的

Android Canvas繪圖

  Android中使用圖形處理引擎,2D部分是android SDK內部自己提供,3D部分是用Open GL ES 1.0。今天我們主要要了解的是2D相關的,如果你想看3D的話那麼可以跳過這篇文章。 大部分2D使用的api都在android.graphics和android.graphics.

css3(3D屬性及動畫)

一.3D 轉換 1.左手座標系 :伸出左手,讓拇指和食指成“L”形,大拇指向右,食指向上,中指指向前方.這樣我們就建立了一個左手座標系,拇指,食指和中指分別代表X、Y、Z 軸的正方向. 2. CSS 中的 3D 座標系 CSS3 中的 3D 座標系與上述的 3D 座標系是有一定區別的,

MATLAB安裝步驟

開啟安裝包後,第一步為解壓安裝檔案,找到檔案安裝包裡的dvd1和dvd2,格式為iso,同時解壓。或解壓dvd1,安裝到一半會顯示請插入dvd2,這時再點選dvd2。兩者效果一樣。但不可只解壓dvd1。 解壓大概會持續十幾分鐘的時間 解壓完成後會自動彈出安裝程式,如果沒有彈出

Matlab之imfilter()

Imfilter(Img,filter) Img:待處理矩陣 filter:濾波器 其實imfilter(Img,filter)的這個方法的實現原理是很簡單的,下面通過一個例項來說明: Img:(5*5的矩陣) Img =

Matlab xcorr函式

Matlab提供了計算互相關和自相關的函式xcorr函式 1.使用方法 c = xcorr(x,y) c = xcorr(x) c = xcorr(x,y,‘option’) c = xcorr(x,‘option’) c = xcorr(x,y,maxlags

Matlab textread函式

轉載來自:http://blog.sina.com.cn/s/blog_618af1950100k926.html 實際應用中經常要讀取txt檔案,這個時候就需要用到強大的textread函式。 它的基本語法是: [A,B,C,...] = textread(filena

Matlab曲線繪製

Matlab畫圖詳解   連續曲線-plot   plot()函式是一個非常常見的畫圖函式,一般用來畫連續的曲線。具體用法如下:   plot(y):y為縱座標的值(一個1*n矩陣),y的index作為橫座標。   plot(x,y): x為橫座標,y為

Android 自定義控制元件-Canvas和Paint繪圖-手把手帶你繪製一個時鐘.

,Android - Paint基礎 在自定義控制元件時,經常需要使用canvas、paint等,在canvas類中,繪畫基本都是靠drawXXX()方法來完成的,在這些方法中,很多時候都需要用到paint型別的引數, Paint作為一個非常重要的元素,功能

MATLAB view函式

MATLAB提供了設定視點的函式view。其呼叫格式為:        view(az,el) az是azimuth(方位角)的縮寫,EL是elevation(仰角)的縮寫。它們均以度為單位。系統預設的視點定義為方位角-37.5°,仰角30°。 當x軸平行觀察者身體,y軸垂直於觀察者身體時,az=0; 以此

matlab 除錯功能

1.1控制單步執行step:單步,不進入函式 step in:單步,進入子函式單步 step out:在函式中的話跳出函式,否則直接跳入下個斷點處,所以在使用這個命令的時候要確保白色箭頭在函式裡面。 save and run:儲存,執行 go until cursor:執行到游標處 可以看到,以上幾個按鈕和C

Android中利用Camera與Matrix實現3D效果

本文行文目錄: 一、Camera與Matrix初步認識 二、Camera與Matrix旋轉效果拆分介紹 三、Camera與Matrix實現立體3D切換效果 一、Camera與Matr

iOS中 CoreGraphics快速繪圖() 韓俊強的部落格

第一步:先科普一下基礎知識:Core Graphics是基於C的API,可以用於一切繪圖操作Core Graphics 和Quartz 2D的區別quartz是一個通用的術語,用於描述在IOS和MAC OS X ZHONG 整個媒體層用到的多種技術 包括圖形、動畫、音訊、適配

淺顯易懂的BP神經網路演算法matlab處理方法

BP神經網路演算法提供了一種普遍並且實用的方法從樣例中學習值為實數、離散值或者向量的函式,這裡就簡單介紹一下如何用MATLAB程式設計實現該演算法。 這裡以一個普遍實用的簡單案例為例子進行程式設計的說明。 1、假設一組x1,x2,x3的值對應一個y值,有2000組這樣

react-native之ART繪圖

原文地址 背景 在移動應用的開發過程中,繪製基本的二維圖形或動畫是必不可少的。然而,考慮到Android和iOS均有一套各自的API方案,因此採用一種更普遍接受的技術方案,更有利於程式碼的雙平臺相容。 art是一個旨在多瀏覽器相容的Node style Commo

Python matplotlib高階繪圖

1. 前言 前面我們介紹了使用matplotlib簡單的繪圖方法(見:Python應用matplotlib繪圖簡介 ) 但是想要完全控制你的圖形,以及更高階的用法,就需要使用 pyplot 的介面顯式的建立圖形figure。 本文介紹plyplot控制繪圖

ROC曲線matlab繪圖例項

在訊號檢測理論中,接收者操作特徵曲線(receiver operating characteristic curve,或者叫ROC曲線)是一種座標圖式的分析工具,用於 (1) 選擇最佳的訊號偵測模型、捨棄次佳的模型。 (2) 在同一模型中設定最佳閾值。 在做決策時,ROC分

Matlab二維繪圖---plot函式

 plot函式是matlab中最主要的二維作圖函式。(參考文獻--MATLAB HELP 文件) 一、常用的函式主要的形式有以下幾種: plot(X,Y) plot(X,Y,

PCA (主成分分析) (寫給初學者) 結合matlab(轉載)

整數 變量 行為 保持 sum osc 入參 函數 data 一、簡介 PCA(Principal Components Analysis)即主成分分析,是圖像處理中經常用到的降維方法,大家知道,我們在處理有關數字圖像處理方面的問題時,比如經常用的圖像的查詢