Matlab繪圖介紹
強(qiáng)大的繪圖功能是Matlab的特點(diǎn)之一,Matlab提供了一系列的繪圖函數(shù),用戶不需要過(guò)多的考慮繪圖的細(xì)節(jié),只需要給出一些基本參數(shù)就能得到所需圖形,這類函數(shù)稱為高層繪圖函數(shù)。此外,Matlab還提供了直接對(duì)圖形句柄進(jìn)行操作的低層繪圖操作。這類操作將圖形的每個(gè)圖形元素(如坐標(biāo)軸、曲線、文字等)看做一個(gè)獨(dú)立的對(duì)象,系統(tǒng)給每個(gè)對(duì)象分配一個(gè)句柄,可以通過(guò)句柄對(duì)該圖形元素進(jìn)行操作,而不影響其他部分。
Matlab繪制特殊圖形
1. 繪制極坐標(biāo)圖
說(shuō)明:使用polarplot函數(shù)繪制極坐標(biāo)圖,每組數(shù)據(jù)表示一條閉合曲線,共有20條曲線構(gòu)成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)
說(shuō)明:反比例函數(shù)在x接近于0時(shí),趨近于奇異(1/0 趨近于無(wú)窮大),使用nan非數(shù)對(duì)圖形進(jìn)行鏤空,可以實(shí)現(xiàn)一條曲線繪制y=1/x的整個(gè)定義域。
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. 正方體內(nèi)繪制隨機(jī)分布的顏色片圖
說(shuō)明: 使用plot3繪制正方體12條邊,使用fill3函數(shù)繪制顏色片,顏色片位置和填充顏色隨機(jī)生成。
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. 在大圓內(nèi)隨機(jī)生成若干互不相交的小圓
說(shuō)明:先繪制大圓,在大圓內(nèi)隨機(jī)生成小圓圓心,判斷小圓圓心和其它小圓的距離,如果小圓圓心距離小于直徑,說(shuō)明小圓相交,舍去該小圓。
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]; % 圓心坐標(biāo)集合
Y = [Y;y0];
n = n +1 % 點(diǎn)數(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. 在長(zhǎng)方體內(nèi)隨機(jī)生成若干球體
說(shuō)明:patch函數(shù)繪制長(zhǎng)方體和球體表面,并可填充顏色。
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. 繪制圓柱體與球體曲面相交,并繪制相交曲線
說(shuō)明: 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. 繪制三維拋物曲面
說(shuō)明:使用nan非數(shù)對(duì)圖形進(jìn)行鏤空
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ù)變化形成動(dòng)畫(huà)
說(shuō)明:每個(gè)步長(zhǎng)內(nèi)動(dòng)態(tài)更新繪制三維曲面,形成動(dòng)畫(huà)效果。
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. 使用不同頻率的正弦波合成方波
說(shuō)明:傅里葉級(jí)數(shù),利用不同頻率的正弦波合成方波,三角函數(shù)項(xiàng)數(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; % 點(diǎn)數(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)
總結(jié)
到此這篇關(guān)于利用Matlab繪制各類特殊圖形的文章就介紹到這了,更多相關(guān)Matlab繪制特殊圖形內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- Matlab實(shí)現(xiàn)時(shí)間序列預(yù)測(cè)分類實(shí)例代碼
- 圖文詳解matlab原始處理圖像幾何變換
- Matlab如何實(shí)現(xiàn)矩陣復(fù)制擴(kuò)充
- 如何利用Matlab制作一款真正的拼圖小游戲
- 利用Matlab提取圖片曲線