Giáo trình Matlab căn bản - Chương 9: Đồ họa trong Matlab

Rất nhiều các bài toán khoa học, kĩ thuật và kinh tế cần được diễn giải và

phân tích để rút ra các thông tin liên quan. Đặc biệt trong hầu hết lĩnh vực mô

phỏng các quá trình khoa học và công nghệ chúng ta phải đối mặt với những tập

dữ liệu rất lớn mà không thể phân tích mà thiếu các phần mềm biểu diễn dữ liệu.

Trong phần này chúng ta sẽ nghiên cứu các công cụ biểu diễn dữ liệu hai

chiều và quá trình biến đổi dữ liệu theo thời gian. Trong các chương trước, chúng

ta đ ã được làm quen với một số lệnh vẽ đồ thị 2 chiều như: plot, xlabel, ylabel,

text, gtext, loglog, semilogx, semilogy, axis, grid on, hold on, figure và legend.

pdf17 trang | Chuyên mục: MATLAB | Chia sẻ: dkS00TYs | Lượt xem: 5286 | Lượt tải: 2download
Tóm tắt nội dung Giáo trình Matlab căn bản - Chương 9: Đồ họa trong Matlab, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
động. 
 contour(Z,V) và contour(X,Y,Z,V): vẽ N = length(V) đường mức với các 
giá trị độ cao xác định bởi vector V. 
[C,H] = contour(...), C = contour(...): Trả về ma trận C như trong 
contourc và vector cột h điều khiển các đối tượng LINE hoặc PATCH (mảnh). 
Cả hai đối tượng này được sử dụng làm tham số trong clabel. Màu đường mức là 
các màu chuẩn của bản đồ. 
contour(...,'linespec'): Vẽ các đối tượng LINE với màu và kiểu đường xác 
định bởi linespec. Sử dụng mã R. Pawlowicz để quản lý các tham số mặt và nhãn 
đường mức. 
Thí dụ 7. 
 >> [C,H] = contour(peaks(20),10); colormap autumn 
Hình 9.8 Đồ thị CONTOUR 
 235
9.2.2 Hàm CONTOUR3 
Cú pháp: 
contour3(Z) 
contour3(Z,N) 
contour3(Z,V) 
contour3(X,Y,Z) 
contour3(X,Y,Z,n) 
contour3(X,Y,Z,V) 
contour3(...,'linespec') 
[C,H] = contour3(...) 
Giải thích. Hàm CONTOUR3 vẽ đồ thị contour 3 chiều. 
contour3(...) có các tham số giống như contour(...),chỉ khác ở cách vẽ tương 
ứng với các mức Z tương ứng trong hệ trục 3-D. 
Thí dụ 8. 
 [X,Y] = meshgrid([-2:.25:2]); 
 Z = X.*exp(-X.^2-Y.^2); 
 contour3(X,Y,Z,30); 
 surface(X,Y,Z,'EdgeColor',[.8 .8 .8],'FaceColor','none'); 
 grid off; view(-15,25); 
 colormap cool; 
Hình 9.9 Đồ thị CONTOUR3 
 236
9.2.3 Hàm CLABEL 
Cú pháp: 
clabel(cs,h) 
clabel(cs,h,V) 
Giải thích. Hàm CLABEL gắn nhãn cho các đường mức. 
clabel(cs,h) : Gắn nhãn độ cao cho đồ thị contour hiện thời. Các nhãn được 
xoay và chèn vào các đường mức. cs và h là các ma trận được tính toán từ các 
đói tượng điều khiển của CONTOUR, CONTOUR3 hay CONTOURF. 
clabel(cs,h,V) : Chỉ gắn nhãn cho các đường mức được cho trong vector V. 
Mặc định là gắn nhãn cho tất cả các đường mức. Vị trí gắn nhãn được chọn ngẫu 
nhiên. 
clabel(cs,h,’manual’) : Gắn nhãn tại vị trí nháy (click) chuột. Kết thúc bằng 
phím Enter hoặc nháy chuột ra ngoài đồ thị. 
h = clabel(...) : Trả về giá trị của chế độ gắn nhãn dạng text. 
9.2.4 Hàm PEAKS 
Cú pháp: 
Z = peaks : Tạo ra một ma trận cỡ 49×49; 
Z = peaks(N) : Tạo ra một ma trận cỡ N×N; 
Z = peaks(V) : Tạo ra một ma trận cỡ N×N, với N=length(V); 
Z = peaks(X,Y) : Hàm Z được tính theo X và Y. X, Y và Z có cùng cỡ. 
Giải thích. PEAKS là hàm mẫu 2 biến để minh hoạ cho các thủ tục vẽ đồ 
thị. Khi gọi peaks, peaks(N), peaks(V) hay peaks(X,Y) Matlab vẽ một đồ thị 
dạng SURF từ hàm PEAKS. 
Thí dụ 9. 
 clear ; 
 p=peaks(30); 
 cs=contour(p,10); 
 clabel(cs,’manual’); 
 grid on; 
Thí dụ 10. 
>> peaks 
z = 3*(1-x).^2.*exp(-(x.^2) - (y+1).^2) ... 
 - 10*(x/5 - x.^3 - y.^5).*exp(-x.^2-y.^2)... 
 - 1/3*exp(-(x+1).^2 - y.^2) 
 237
Hình 9.10 Đồ thị CONTOUR của hàm PEAKS và 
 tác dụng của CLABEL 
Hình 9.11 Đồ thị SURF của hàm PEAKS 
9.2.5 Các mặt tham số 
Xét một mặt cong, trong đó toạ độ của các điểm trên mặt cong phụ thuộc 
vào các tham số. Thí dụ một mặt cong được xác định như sau: 
x = f(,), y =g(,), z =h(,), 
trong đó các tham số  và  xác định trong một khoảng nào đó. Chẳng hạn, một 
mặt cầu viết dưới dạng tham số như sau: 
x = R coscos , y = R sincos z= R sin. 
 238
 Những mặt phức tạp hơn có thể được xây dựng theo cách này. Chúng ta 
có thể cấu trúc một mặt cong bằng cách xoay một đường cong quanh một điểm 
cố định. Phương trình của Hình 3 lá có dạng: 
r = a sin3 , [0,2], 
với r là khoảng cách tính từ gốc toạ độ và a là độ dài một lá. Các tham số toạ độ 
cực này dễ dàng chuyển sang toạ độ Đề các: 
x= r cos= a sin3cos, y =r sin = a sin3sin. 
Tiếp theo ta chuyển Hình 3 lá xa gốc toạ độ một khoảng cách R và quay tròn 
hình đó quanh trục z. Khi đó ta có: 
x= (R + a sin3cos) sin 
y= (R + a sin3cos)cos 
z= asin3sin 
9.2.5 Hàm MESH: Vẽ đồ thị màu dạng lưới 3-D. 
 Các phương án sử dụng: 
mesh(X,Y,Z,C): vẽ đồ thị dạng lưới xác định bởi 4 ma trận X, Y, Z, C. Điểm 
quan sát xác định bởi VIEW. Phạm vi của các trục toạ độ xác định bởi phạm vi 
của X, Y, Z. Các ma trận X và Y phải có cùng cỡ với Z, mỗi nút lưới là bộ ba 
(X(i,j),Y(i,j), Z(i,j)). Thang màu xác định bởi C hoặc xác định bởi giá trị hàm 
CAXIS hiện tại , như chỉ thị trong COLORMAP hiện tại. 
mesh(X,Y,Z): sử dụng C = Z, nghĩa là màu tỉ lệ với chiều cao. 
mesh(x,y,Z) và mesh(x,y,Z,C): nếu x, y là 2 vector với length(x) = n, 
length(y) = m thì [m,n] = size(Z). Khi đó mỗi nút lưới là bộ ba (x(j), y(i), Z(i,j)). 
Chú ý: x tương ứng với cột của ma trận Z , y tương ứng với hàng của ma trận Z. 
mesh(Z) và mesh(Z,C): sử dụng giá trị mặc định x =1:n và y =1:m với 
[m,n] = size(Z). 
h = mesh(…): trả về các tham số điều khiển đối tượng SURFACE. 
Chú ý: Các hàm AXIS, CAXIS, COLORMAP, HOLD, HIDDEN và VIEW 
SHADING xác định thuộc tính của hình vẽ, các trục toạ độ, bề mặt cong, màu 
sắc... cho hàm MESH. 
Thí dụ 11. Vẽ đồ thị mặt cong tham số của các phương trình trên: 
% MATLAB code demontrating cropping surfaces 
clear 
colormap(aquamarine); 
n=50; 
phi=[ 0:2*pi/n:2*pi]; 
 239
psi=[ 0:2*pi/n:2*pi]; 
R = 5 ; r = 2 ; a = 0.5 ; 
for i=1:length(phi) 
 for j =1:length(psi) 
 z(i,j) = (r + a*sin(6*psi(j)))*sin(phi(i)); 
 y(i,j) = R*sin(psi(j)) + (r + a*sin(6*psi(j)))*cos(phi(i))*sin(psi(j)); 
 x(i,j) = R*cos(psi(j)) + (r + a*sin(6*psi(j)))*cos(phi(i))*cos(psi(j)); 
 c(i,j) =0.8; 
 end; 
end; 
mesh(x,y,z,c); 
axis([-7 7 -7 7 -7 7]); 
axis('square'); 
Hình 9.12 Đồ thị dạng MESH của mặt cong 3 lá 
9.2.6 Hàm SURF: Vẽ đồ thị màu dạng mặt cong 3-D 
 Các phương án sử dụng: 
surf(X,Y,Z,C): vẽ đồ thị dạng mặt cong xác định bởi 4 ma trận X, Y, Z, C. 
Điểm quan sát xác định bởi VIEW. Phạm vi của các trục toạ độ xác định bởi 
phạm vi của X, Y, Z. Các ma trận X và Y phải có cùng cỡ với Z. Các điểm trên 
mặt tương ứng bộ ba (X(i,j),Y(i,j), Z(i,j)). Thang màu xác định bởi C hoặc xác 
định bởi giá trị hàm CAXIS hiện tại , như chỉ thị trong COLORMAP hiện tại. 
 240
surf(X,Y,Z): sử dụng mặc định C = Z, nghĩa là màu tỉ lệ với chiều cao. 
surf(x,y,Z) và SURF(x,y,Z,C): nếu x, y là 2 vector với length(x)=n, 
length(y)=m thì [m,n] = size(Z). Khi đó các đỉnh của ô màu là bộ ba (x(j), y(i), 
Z(i,j)). Chú ý là x tương ứng với cột của ma trận Z , y tương ứng với hàng của 
ma trận Z. 
surf (Z) và surf (Z,C): sử dụng giá trị mặc định x = 1:n và y = 1:m, với 
[m,n] = size(Z). 
 h =surf (…): trả về các tham số điều khiển đối tượng SURFACE. 
Chú ý: Các hàm AXIS, CAXIS, COLORMAP, HOLD, HIDDEN và VIEW 
SHADING xác định thuộc tính của hình vẽ, các trục toạ độ, bề mặt cong, màu 
sắc... cho hàm SURF. 
Thí dụ 11. 
clear ; 
colormap(gray); % Xác định thang màu cho đồ thị 
n=65; 
theta =pi*[-n:2:n]/n; 
phi=(pi/2)*[-n:2:n]'/n; 
R = 5; 
X= R*cos(phi)*cos(theta); 
Y=R*cos(phi)*sin(theta); 
Z=R*sin(phi)*ones(size(theta)); 
[xd,yd,C]=peaks(n); 
cmax=max(max(C)); 
cmin=min(min(C)); 
C = (C-cmin*ones(size(C)))/(cmax-cmin); 
surf(X,Y,Z,C); 
axis([ -11 11 -11 11 -11 11]);axis('square'); 
phi = [ 0:2*pi/n:2*pi]; psi=phi; 
R=9; r =1.5; 
for i=1:length(phi) 
 for j=1: length(psi) 
 z(i,j)= r/10*sin(phi(i)); 
 y(i,j)=R*sin(psi(j))+ r*cos(phi(i))*sin(psi(j)); 
 x(i,j)=R*cos(psi(j))+ r*cos(phi(i))*cos(psi(j)); 
 241
 c(i,j) = 1; 
 end; 
end; 
hold on; surf(x,y,z,c); hold off; 
view([120 25]); grid on; 
xlabel(' X'); ylabel(' Y');zlabel('Z'); 
Hình 9.13 Minh họa đồ thị dạng SURF của mặt cong trong thí dụ 12 
Thí dụ 13. 
clear ; 
colormap(gray); 
n=65; 
theta =pi*[-n:2:n]/n; 
phi = [ 0:2*pi/n:2*pi]; 
psi=phi; 
R = 5; a=1; 
for i=1:length(phi) 
 for j=1: length(psi) 
 z(i,j)= -a*sin(3+phi(i))*sin(phi(i));; 
 y(i,j)=(R+a*sin(3*phi(i))*cos(phi(i)))*cos(psi(j)); 
 x(i,j)=(R+a*sin(3*phi(i))*cos(phi(i)))*sin(psi(j)); 
 242
 c(i,j) = 0.8; 
 end; 
end; 
mesh(x,y,z,c); 
xoff =R; 
for i=1:length(phi) 
 for j=1: length(psi) 
 y(i,j)= a*sin(3+phi(i))*sin(phi(i));; 
 z(i,j)=(R+a*sin(3*phi(i))*cos(phi(i)))*cos(psi(j)); 
 x(i,j)=xoff+(R+a*sin(3*phi(i))*cos(phi(i)))*sin(psi(j)); 
 c(i,j) = 0.8; 
 end 
end; 
hold on; mesh(x,y,z,c); grid on; 
axis([ -6 10 -6 10 -6 10]);axis('square'); 
hold off; 
view([-20 25]); 
xlabel(' X'); ylabel(' Y');zlabel('Z'); 
Hình 9.14 Minh họa đồ thị dạng SURF của mặt cong trong thí dụ 13 
 243
9.3 HOẠT HÌNH 
 Thủ tục MOVIE 
Cú pháp: 
movie(M,N,fps) 
Giải thích. Thủ tục MOVIE trình chiếu các khuôn hình (frame). 
movie(M): biểu diễn dãy M một lần. M phải là dãy các khuôn hình thường 
được tạo bởi lệnh GETFRAME. 
movie(M,N): biểu diễn N lần. Nếu N<0 thì mỗi biểu diễn là một tiến và một 
lần lùi. Nếu N là vector, phần tử đầu tiên là số lần biểu diễn và các phần tử còn 
lại kết hợp thành một danh sách các khuôn hình để biểu diễn. Thí dụ nếu M có 4 
khuôn hình thì N = [10 4 4 2 1] biểu diễn 10 lần và mỗi lần biểu diễn khuôn 
hình 4, tiếp theo 4, rồi 2 và 1. 
movie(M,N,fps): biểu diễn fps khuôn trong 1 giây. Mặc định của fps là 12. 
Tuy nhiên tốc độ có thể chậm hơn nếu tính năng của PC kém. 
 Thủ tục getframe. Tạo khuôn hình cho thủ tục MOVIE. Thủ tục này lấy 
1 khuôn hình từ đồ thị hiện tại và gán cho một biến. Thủ tục getframe thường 
được sử dụng trong vòng lặp FOR để tạo thành dãy khuôn hình trình diễn trong 
MOVIE. 
Thí dụ 14. 
 for j=1:n 
 M(j) = getframe; 
 end 
 movie(M); 
 Các chương trình minh hoạ: 
Chương trình 1 (Chiếc vòng quay) 
clear ; 
n=32; 
M=moviein(n); 
phi=[0:0.1:2*pi]; 
R = 5; r =2 ; Rmax =R+r+1; 
for j=1:n 
 x1 = R*cos(phi); 
 y1 = R*sin(phi); 
 z1 = zeros(size(phi)); 
 244
 x2 = (R+r*cos(phi))*cos(2*j/n*pi); 
 y2 = (R+r*cos(phi))*sin(2*j/n*pi); 
 z2 = r*sin(phi); 
 plot3(x1,y1,z1,x2,y2,z2); 
 axis([-Rmax Rmax -Rmax Rmax -Rmax Rmax]); 
 axis('square');grid on; 
 M(:,j)=getframe; 
end 
Thực hiện trình chiếu: 
>>movie(M,15,10); %% Biểu diễn lặp lại 15 lần với 10 hình/giây 
Hình 9.15 Chiếc vòng tròn con chuyển động quanh vòng tròn lớn 
Chương trình 2 (Hàm PEAKS chuyển động nhấp nhô tạo hình sóng) 
clear ; 
n=32; 
for j=1:n 
 mesh(cos(2*pi*j/n)*peaks(30)); 
 axis([0 30 0 30 -10 10]); 
 axis('square');grid on; 
 M(:,j)=getframe; 
end 

File đính kèm:

  • pdfGiáo trình Matlab căn bản - Chương 9_Đồ họa trong Matlab.pdf