利用Matlab繪制各類特殊圖形的實例代碼
Matlab繪圖介紹
強大的繪圖功能是Matlab的特點之一,Matlab提供了一系列的繪圖函數(shù),用戶不需要過多的考慮繪圖的細節(jié),只需要給出一些基本參數(shù)就能得到所需圖形,這類函數(shù)稱為高層繪圖函數(shù)。此外,Matlab還提供了直接對圖形句柄進行操作的低層繪圖操作。這類操作將圖形的每個圖形元素(如坐標軸、曲線、文字等)看做一個獨立的對象,系統(tǒng)給每個對象分配一個句柄,可以通過句柄對該圖形元素進行操作,而不影響其他部分。
Matlab繪制特殊圖形
1. 繪制極坐標圖
說明:使用polarplot函數(shù)繪制極坐標圖,每組數(shù)據(jù)表示一條閉合曲線,共有20條曲線構成20條封閉同心曲線。
t = linspace(0,2*pi,500); y = 1+0.3*sin(20*t)+0.1*sin(30*t)+0.1*sin(40*t); polarplot(t,y,t,1.1*y,t,1.2*y,t,1.3*y,t,1.4*y,t,1.5*y,t,1.6*y,t,1.7*y,t,1.8*y,t,1.9*y,... t,2.0*y,t,2.1*y,t,2.2*y,t,2.3*y,t,2.4*y,t,2.5*y,t,2.6*y,t,2.7*y,t,2.8*y,t,2.9*y,'linewidth',1.5);
2. 單條曲線繪制分段函數(shù)(反比例函數(shù)y=1/x)
說明:反比例函數(shù)在x接近于0時,趨近于奇異(1/0 趨近于無窮大),使用nan非數(shù)對圖形進行鏤空,可以實現(xiàn)一條曲線繪制y=1/x的整個定義域。
x = linspace(-3,3,500); f = @(x) 1./x; y = f(x); for ii = 1:length(x) if abs(x(ii))<0.03 x(ii) = nan; y(ii) = nan; end end plot(x,y) legend('y=1/x')
3. 正方體內繪制隨機分布的顏色片圖
說明: 使用plot3繪制正方體12條邊,使用fill3函數(shù)繪制顏色片,顏色片位置和填充顏色隨機生成。
a = 20; b = 20; c = 20; A1 = [0 0 0 a 0 0 a b 0 0 b 0 0 0 0]; A2 = [0 0 c a 0 c a b c 0 b c 0 0 c]; A3 = [0 0 0 0 0 c 0 b c 0 b 0 0 0 0]; A4 = [a 0 0 a 0 c a b c a b 0 a 0 0]; % 繪圖 figure hold on plot3(A1(:,1),A1(:,2),A1(:,3),'k'); plot3(A2(:,1),A2(:,2),A2(:,3),'k'); plot3(A3(:,1),A3(:,2),A3(:,3),'k'); plot3(A4(:,1),A4(:,2),A4(:,3),'k'); view(3) XYZ0 = [0 0 0 1 0 0 1 0 1 0 0 1]; for ii = 1:100 p = [rand*(a-2) rand*(b-2) rand*(c-2)]+1; % 球心 X2= p(1) + XYZ0(:,1); Y2 = p(2) + XYZ0(:,2); Z2 = p(3) + XYZ0(:,3); ColorSpec = rand(1,3); fill3( X2,Y2,Z2,ColorSpec ) end
4. 在大圓內隨機生成若干互不相交的小圓
說明:先繪制大圓,在大圓內隨機生成小圓圓心,判斷小圓圓心和其它小圓的距離,如果小圓圓心距離小于直徑,說明小圓相交,舍去該小圓。
tic X = []; Y = []; n = 0; while n < 1000 r = rand * (750-5); theta = rand * 2*pi; x0 = r*cos(theta); y0 = r*sin(theta); s = min( (x0-X).^2 + (y0-Y).^2 ); % 最小圓心距離 if s < 10^2 continue; else X = [X;x0]; % 圓心坐標集合 Y = [Y;y0]; n = n +1 % 點數(shù) end end toc alpha = linspace(0,2*pi,100); x = 5*cos(alpha); y = 5*sin(alpha); figure plot( 150*x,150*y,'r' ) hold on for ii = 1:n x0 = X(ii); y0 = Y(ii); plot(x0+x,y0+y,'k') end
5. 在長方體內隨機生成若干球體
說明:patch函數(shù)繪制長方體和球體表面,并可填充顏色。
x = 100; y = 80; z = 50; theta = linspace(0,2*pi,50); phi = linspace(0,2*pi,50); [theta,phi] = meshgrid(theta,phi); r = 2; X0 = r*cos(phi).*cos(theta); Y0 = r*cos(phi).*sin(theta); Z0 = r*sin(phi); % 繪圖 X = [0 x x 0 0 x x 0 0 0 0 0 x x x x 0 x x 0]'; Y = [0 0 y y 0 0 y y 0 y y 0 0 y y 0 y y y y]'; Z = [0 0 0 0 z z z z 0 0 z z 0 0 z z 0 0 z z ]'; figure patch(X,Y,Z,'r'); view(3) hold on for ii = 1:50 p = [rand*(100-4*r) rand*(80-4*r) rand*(50-4*r)]+2*r; % 球心 X2= p(1) + X0; Y2 = p(2) + Y0; Z2 = p(3) + Z0; patch( X2,Y2,Z2,'y' ) end
6. 繪制圓柱體與球體曲面相交,并繪制相交曲線
說明: mesh函數(shù)繪制曲面圖,求解方程得到交線參數(shù)方程,plot3函數(shù)繪制三維交線。
%% 曲面1 t = linspace(0,2*pi,200); s = linspace(0,2*pi,200); [t,s] = meshgrid(t,s); x = 2*cos(t); y = 2*sin(t).*cos(s); z = 2*sin(t).*sin(s); figure mesh(x,y,z) %% 曲面2 t2 = linspace(0,2*pi,200); z2 = linspace(-3,3,200); [t2,z2] = meshgrid(t2,z2); x2 = 1 + cos(t2); y2 = sin(t2); hold on mesh(x2,y2,z2) %% 交線 t3 = linspace(0,2*pi,200); y3 = sin(t3); x3 = 1 + cos(t3); z3 = sqrt(4-2*x3); plot3(x3,y3,z3,'r','linewidth',5) hold on plot3(x3,y3,-z3,'r','linewidth',5)
8. 繪制三維拋物曲面
說明:使用nan非數(shù)對圖形進行鏤空
x = -20:0.1:20; y = -20:0.1:20; [X,Y] = meshgrid(x,y); p = 0.2; q = 0.1; Z = X.^2/(2*p) + Y.^2/(2*q); Z = (Z<=500) .* Z + ((Z>500)-1) ./ ((Z>500)-1); % 圖形鏤空 mesh(X,Y,Z)
9. 拋物曲面隨參數(shù)變化形成動畫
說明:每個步長內動態(tài)更新繪制三維曲面,形成動畫效果。
x = linspace(-1,1,20); y = linspace(-1,1,20); [X,Y] = meshgrid(x,y); figure a = 1; Z = a.*X.^2 + Y.^2; h = surf(X,Y,Z); zlim([0,15]) for a = 1:0.1:10 Z = a.*X.^2 + Y.^2; set(h,'zdata',Z); drawnow pause(0.1) end
10. 使用不同頻率的正弦波合成方波
說明:傅里葉級數(shù),利用不同頻率的正弦波合成方波,三角函數(shù)項數(shù)越多,合成方波越精確。
t=0:0.000001:1; f1=6*sin(10*pi*t)/pi; f2=6*sin(10*pi*t)/pi+2*sin(30*pi*t)/pi; f3=6*sin(10*pi*t)/pi+2*sin(30*pi*t)/pi+6*sin(50*pi*t)/(5*pi); %% 循環(huán)段 N = 10; % 點數(shù) f4 = 0; % 初始值 for ii = 1:N f4 = f4 + 3*2*sin((2*ii-1)*10*pi*t)/pi/(2*ii-1); end figure subplot(2,2,1),plot(t,f1) subplot(2,2,2),plot(t,f2) subplot(2,2,3),plot(t,f3) subplot(2,2,4),plot(t,f4)
總結
到此這篇關于利用Matlab繪制各類特殊圖形的文章就介紹到這了,更多相關Matlab繪制特殊圖形內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
百分百成功的全網(wǎng)最簡約sklearn環(huán)境配置教程
這篇文章主要介紹了百分百成功的全網(wǎng)最簡約sklearn環(huán)境配置教程,圖文全流程講解包簡單易懂,百分百成功,需要的朋友可以參考下2023-03-03如何使用Django(python)實現(xiàn)android的服務器端
這篇文章主要介紹了Django(python)簡單實現(xiàn)android的服務器端,這里所需要的工具是PyCharm--python編輯工具,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07