Để in hình vừa vẽ hoặc các hình trong chương trình của Matlab đã dược tạo, ta có thể dùng lệnh từ bảng chọn hoặc đánh lệnh in từ cửa sổ lệnh.
In bằng lệnh từ bảng chọn
Trước tiên chọn cửa sổ hình là cửa sổ hoạt động bằng cách nhấn chuột lên đó, sau đó chọn mục bảng chọn print từ bảng chọn file. Dùng các thông số tạo nên trong mục bảng chọn print Setup, đồ thị hiện tại sẽ được gửi ra máy in.
In bằng lệnh từ cửa sổ lệnh
Chọn cửa sổ hình làm cửa sổ hoạt động bằng cách nhấn chuột lên đó hoặc dùng lệnh figure(n). Sau đó dùng lệnh in print
Lệnh orient thay đổi kiểu in. Kiểu mặc định là kiểu portrait, in theo chiều đứng, ở giữa trang. Kiểu Lanscape là kiểu in ngang. Kiểu in tall là kiểu in đứng nhưng kín toàn bộ trang. Để thay đổi kiểu in khác với kiểu mặc định, ta có thể dùng lệnh orient với các thông số của nó như sau:
>>orient ans= portrait >>orient landscape >> orient tall 5.7 Thao tác với đồ thị Lệnh hold
Thêm nét vẽ vào đồ thị đã có sẵn bằng lệnh hold. Khi thiết lập hold on, Matlab không bỏ đi hệ trục đã tồn tại trong khi lệnh plot mới đang thực hiện, thay vào đó, nó thêm đường cong mới vào hệ trục hiện tại. Tuy nhiên nếu dữ liệu không phù hợp với hệ trục toạ độ cũ, thì trục được chia lại.
Lệnh hold off bỏ đi cửa sổ figure hiện tại và thay vào đó bằng một đồ thị mới. Lệnh hold mà không có đối số sẽ bật tắt chức năng của chế độ thiết lập
hold trước đó. Ví dụ: clc
x=linspace(0,pi,1000);
y=sin(x); plot(x,y); hold on
ishold% Ham tra ve 1 neu hold o trang thai on z=cos(x); plot(x,z,'r --'); hold off ishold axis([0 pi -1 1]); gtext('sinx'); gtext('cosx');
Tạo nhiều cửa sổ figure
Nếu muốn hai hay nhiều đồ thị ở các cửa sổ khác figure nhau, có thể dùng lệnh figure trong cửa sổ lệnh hoặc chọn new figure từ bảng chọn file,
figure không có tham số sẽ tạo một figure mới. Ta có thể chọn kiểu figure
bằng cách dùng chuột hoặc dùng lệnh. figure(n) trong đó n là số cửa sổ hoạt động.
Lệnh subplot
Một cửa sổ figure có thể có nhiều hơn một hệ trục toạ độ. Lệnh
thị, và chọn p là cửa sổ hoạt động. Các đồ thị thành phần được đánh số từ trái qua phải, từ trên xuống dưới, sau đó đến hàng thứ hai,…
Ví dụ: x=linspace(0,2*pi,30); y=sin(x); subplot(1,2,1); plot(x,y); axis([0 2*pi -1 1]); title('sinx'); z=cos(x); subplot(1,2,2); plot(x,z); axis([0 2*pi -1 1]); title('cosx');
CHƯƠNG 6
ĐỒ HOẠ TRONG KHÔNG GIAN BA CHIỀU
Matlab cung cấp một số hàm để hiển thị dữ liệu ba chiều như các hàm vẽ đường thẳng trong không gian ba chiều, các hàm vẽ bề mặt và khung dây, màu có thể được sử dụng thay thế cho chiều thứ tự.
6.1 Đồ thị đường thẳng
Lệnh plot từ trong không gian hai chiều có thể mở rộng cho không gian ba chiều bằng lệnh plot3. Khuôn dạng của plot3 như sau:
plot3(X1,Y1,Z1,S1,X2,Y2,Z2,S2,...)
Trong đó Xn, Yn, Zn là các vector hoặc ma trận, Sn là xâu ký tự tuỳ chọn dùng cho việc khai báo màu, tạo biểu tượng hoặc kiểu đường.
Ví dụ: clc
t = 0:pi/50:10*pi; x1=sin(t);y1=cos(t);z1=t; x2=cos(t);y2=sin(t);z2=2*t; plot3(x1,y1,z1,'r--*',x2,y2,z2,'bo'); grid on box on title('Vi du plot3'); xlabel('sint');ylabel('cost');zlabel('t'); axis square
Đối với đồ thị trong không gian ba chiều khi muốn đặt một xâu ký tự vào một vị trí bất kỳ ta có thể dùng hàm text, hàm text cũng có khuôn mẫu như sau: text(x,y,z,string)
6.2 Đồ thị bề mặt và lưới
Matlab định nghĩa bề mặt lưới bằng các điểm theo hướng trục z ở trên đường kẻ ô hình vuông trên mặt phẳng x-y. Nó tạo nên mẫu một đồ thị bằng cách ghép các điểm gần kề với các đường thẳng. Kết quả là nó trông như một
mạng lưới đánh cá với các mắt lưới là các điểm dữ liệu. Đồ thị lưới này thường được sử dụng để quan sát những ma trận lớn hoặc vẽ những hàm có hai biến.
Hàm meshgrid và hàm mesh
Bước đầu tiên là đưa ra đồ thị lưới của hàm hai biến z=f(X,Y), tương ứng với ma trận X và Y chứa các hàng và các cột lặp đi lặp lại, Matlab cung cấp hàm meshgrid cho mục đích này.
[X,Y]=meshgrid(x,y), tạo một ma trận X, mà các hàng của nó là bản sao của vector x, và ma trận Y có các cột của nó là bản sao của vector y. Cặp ma trận này sau đó được sử dụng để ước lượng hàm hai biến sử dụng đặc tính toán học về mảng của Matlab.
Ví dụ: clc
x = 0:1:10; y=2*x;
[X,Y]=meshgrid(x,y)
[X,Y] là một cặp của ma trận tương ứng một lưới chữ nhật trong mặt phẳng x- y. Mọi hàm z=f(x,y) có thể sử dụng tính chất này.
Ví dụ: clc x = 0:pi/50:10*pi; y=x; [X,Y]=meshgrid(x,y); R=sqrt(X.^2+Y.^2)+eps; Z=sin(R)./R; mesh(X,Y,Z); box on
Ma trận R chứa bán kính của mỗi điểm trong [X,Y], nó là khoảng cách từ mỗi điểm đến tâm ma trận, cộng thêm eps để không xảy ra phép chia cho không. Ma trận Z chứa sine của bán kính mỗi điểm trong sơ đồ. Câu lệnh mesh(X,Y,Z) vẽ đồ thị lưới.
Để thay đổi màu sắc với sự trợ giúp của Matlab có thể tham khảo colormaps…
Trong ví dụ này hàm mesh sắp xếp giá trị của các phần tử của ma trận vào các điểm (Xi, Yi, Zi) trong không gian ba chiều. Hàm mesh cũng có thể vẽ một ma trận đơn tương tự như với một đối số; mesh(Z), sử dụng các điểm (i,j,Zj). Như vậy Z được vẽ ngược lại với các chỉ số của nó, trong trường hợp này mesh(Z) chỉ đơn giản chia lại độ khác của các trục x, y theo các chỉ số của ma trận Z.
Hàm surf
Đồ thị bề mặt của cùng một ma trận Z trông như đồ thị lưới trước đó, ngoại trừ khoảng cách giữa hai đường thẳng là khác nhau. Đồ thị loại này dùng hàm surf với đối số như hàm mesh.
Ví dụ: clc x = 0:pi/10:10*pi; y=x; [X,Y]=meshgrid(x,y); R=sqrt(X.^2+Y.^2)+eps; Z=sin(R)./R; surf(X,Y,Z); box on
6.3 Thao tác với đồ thị
Matlab cho phép khai báo góc để từ đó quan sát được đồ thị trong không gian ba chiều.
Hàm view
view(azimuth, elevation) thiết lập góc xem bằng việc khai báo azimuth
và elevation. ‘elevation’ mô tả vị trí người quan sát, được xem như là góc đo bằng độ trên hệ trục x-y. ‘azimuth’ mô tả góc trong hệ trục nơi người quan sát đứng.
Azimuth được đo bằng độ từ phần âm trục y. Phía âm trục y có thể quay theo chiều kim đồng hồ một góc -37.5 độ từ phía người quan sát.
Elevation là góc mà tại đó mắt ta thấy được mặt phẳng x-y.
Sử dụng hàm view cho phép quan sát hình vẽ từ các góc độ khác nhau. Ví dụ nếu elevation thiết lập âm, thì view sẽ nhìn hình từ phía dưới lên. Nếu
azimuth thiết lập dương, thì hình sẽ quay ngược chiều kim đồng hồ từ điểm nhìn mặc định. Thậm chí ta có thể nhìn trực tiếp từ trên bằng cách thiết lập
view(0,90). Thực ra thì đây là điểm nhìn mặc định hai chiều, trong đó x tăng từ trái qua phải, và y tăng từ trên xuống dưới, khuôn dạng view(2) hoàn toàn
giống như mặc định của view(0,90), và view(3) thiết lập mặc định trong không gian ba chiều.
Lệnh view có một dạng khác mà rất tiện ích khi sử dụng là view([X Y Z]) cho phép quan sát trên một vector chứa hệ trục toạ độ decac trong không gian ba chiều. Khoảng cách từ vị trí quan sát đến gốc toạ độ không bị ảnh hưởng. Ví dụ: view([0 10 0]), view([0 -1 0]), và view(0,0) cho kết quả như nhau: clc [X,Y] = meshgrid(-3:.125:3); Z = peaks(X,Y); meshc(X,Y,Z); axis([-3 3 -3 3 -10 5]) box on view(-105,25); [az,el]=view Kết quả:
Có thể lấy lại các thông số azimuth và elevation mà ta quan tâm bằng lệnh [az,el]=view.
Ví dụ:
Lệnh rotate3d
Một công cụ hữu ích khác là quan sát đồ thị không gian ba chiều bởi hàm rotate3d. Các thông số azimuth và elevation có thể được tác động bởi chuột. rotate3d on cho phép chuột can thiệp. rotate3d off không cho phép.
Lệnh hidden
Lệnh dấu các nét khuất. Khi vẽ đồ thị, thì một số phần của nó bị che khuất bởi các phần khác, khi đó nếu dùng lệnh này thì các nét khuất sẽ bị dấu đi, ta chỉ có thể nhìn thấy phần nào nằm trong tầm nhìn. Nếu chuyển đến
hidden off ta có thể nhìn thấy phần khuất đó qua mạng lưới. Ví dụ: clc [X,Y] = meshgrid(-3:.125:3); Z = peaks(X,Y); meshc(X,Y,Z); axis([-3 3 -3 3 -10 5]) box on view(-105,25); hidden off
6.4 Các đặc điểm khác của đồ thị trong không gian ba chiều
* Hàm ribbon(x,y) tương tự như plot(x,y) ngoại trừ cột của y được vẽ như là một dải riêng biệt trong không gian ba chiều.
* Hàm clabel tăng thêm độ cao cho đồ thị đường viền, có ba mẫu clabel(cs),
clabel(cs,V) và clabel(cs,’manual’). clabel(cs), trong đó cs là cấu trúc đường viền được trả về từ lệnh contour, cs=contuor(z) lấy nhãn tất cả các đồ thị đường viền với độ cao của nó. Vị trí của nhãn được lấy ngẫu nhiên.
clabel(c,’manual’) định vị nhãn đường viền ở vị trí kích chuột tương tự như lệnh ginput đã nói ở trên. Nhấn phím return kết thúc việc tạo nhãn này.
* Hàm contourf sẽ vẽ một đồ thị đường viền kín, không gian giữa đường viền được lấp đầy bằng màu.
* Hai mẫu trạng thái của lệnh mesh dùng với đồ thị lưới là: meshc vẽ đồ thị lưới và thêm đường viền bên dưới, meshz vẽ đồ thị lưới và đồ thị có dạng như màn che.
* Hàm waterfall được xem như mesh ngoại trừ một điều là hàm mesh chỉ xuất hiện ở hướng x.
* fill3 phiên bản ba chiều của fill, vẽ một đa giác đều trong không gian ba chiều. Khuôn dạng tổng quát của nó là fill3(x,y,z,c), trong đó chiều đứng của đa giác được chỉ bởi ba thành phần x,y,z. Nếu c là một ký tự, đa giác sẽ được lấp đầy màu như ở bảng màu. c cũng có thể là một vector hàng có ba thành phần ([r g b]) trong đó r, g, b là các giá trị giữa 0 và 1 thay cho các màu đỏ, xanh lá cây và xanh da trời. Nếu c là một vector hoặc ma trận, nó được sử dụng như một chỉ số chỉ ra sơ đồ màu. Nhiều đa giác có thể được tạo ra bằng cách cho thêm nhiều đối số như fill3(x1,y1,z1,c1,x2,y2,z2,c2,…).
Ví dụ:
Lệnh rand(m,n) tạo một ma trận ngẫu nhiên m hàng n cột bao gồm các phần tử ngẫu nhiên thuộc đoạn [0,1]
6.5 Bảng màu
Matlab định nghĩa biểu đồ màu như là một ma trận có ba cột. Mỗi hàng của ma trận định nghĩa một màu riêng biệt sử dụng các số trong dải 0 và 1. Những số này chỉ ra các giá trị RGB, độ nhạy của các màu thành phần đỏ, xanh lá cây, và xanh da trời trong một màu do các thành phần đó tạo ra. Một số mẫu cơ bản được cho trong bảng dưới đây:
Đỏ Xanh lá cây Xanh da trời Màu
0 0 0 Đen 1 1 1 Trắng 1 0 0 Đỏ 0 1 0 Xanh lá cây 0 0 1 Xanh da trời 1 1 0 Vàng 1 0 1 Tím đỏ 0 1 1 Lam xám -5 -5 -5 Xám trung bình -5 0 0 Đỏ tối 1 -62 -40 Đỏ hồng -49 1 -83 Ngọc xanh biển
Hàm Mô tả bảng màu
hsv Giá trị màu bão hoà (HSV) hot Đen-đỏ-vàng-trắng
gray Xám cân bằng tuyến tính bone Xám có pha nhẹ với màu xanh copper sắc thái của màu đồng
pink Màu hồng nhạt nhẹ white Trắng hoàn toàn
flag Xen kẽ đỏ, trắng, xanh da trời, và đen jet Sự thay đổi màu bão hoà
prism Có màu sắc lăng kính cool Màu xanh tím
lines Màu của nét vẽ
summe Bóng của xanh lá cây và vàng autum
n Bóng của đỏ và vàng
winter Bóng của xanh lá cây và xanh da trời spring Bóng của magenta và yellow
6.6 Sử dụng bảng màu
Lệnh colormap(M) cài đặt ma trận M như là bảng màu được sử dụng bởi hình hiện tại.
Ví dụ: colormap(cool) cài đặt một version 64 đầu vào của bảng màu cool.
Hàm plot và plot3 không dùng bảng màu ở trên, chúng sử dụng các màu liệt kê trong bảng kiểu đường, điểm đánh dấu, màu của plot. Phần lớn các hàm vẽ khác như mesh, surf, contour, fill, pcolor và các biến của nó, sử dụng bảng màu hiện tại.
Ví dụ: clc
[X,Y,Z] = peaks(100); mesh(X,Y,Z);
colormap(hsv);
6.7 Sử dụng màu để thêm thông tin
Màu có thể được dùng để thêm thông tin vào đồ thị ba chiều nếu nó được sử dụng để tạo thành chiều thứ tự. Các hàm như mesh và surf biến đổi màu dọc theo trục z, trừ khi một đối số màu được đưa ra như surf(X,Y,Z) hoàn toàn tương đương với surfX,Y,Z,t) trong đó thành phần thứ t được dùng như một chỉ số trong biểu đồ màu. Điều này khiến cho đồ thị đầy màu nhưng lại không thông tin khi mà trục z đã tồn tại.
Ví dụ: x=-7.5:0.5:7.5; y=x; [X,Y]=meshgrid(x,y); R=sqrt(X.^2+Y.^2)+eps; Z=sin(R)./R; subplot(1,2,1); surf(X,Y,Z); box on subplot(1,2,2); surf(X,Y,Z,R);
title('Color variable with the Z-axis'); box on
6.8 Hiển thị bảng màu
Ta có thể hiển thị bảng màu theo một số cách sau. Một trong những cách đó là xem tất cả các phần tử trong một ma trận bảng màu một cách trực tiếp.
Ví dụ: >> hot(8) ans = 0.3333 0 0 0.6667 0 0 1.0000 0 0 1.0000 0.3333 0 1.0000 0.6667 0 1.0000 1.0000 0 1.0000 1.0000 0.5000 1.0000 1.0000 1.0000
Thêm vào đó hàm pcolor có thể được sử dụng để biểu diễn một bảng màu.
Ví dụ:
n=10;
pcolor([1:n;1:n]);
title('using pcolor to display a color map')
Hàm colorbar thêm một thanh màu đứng hoặc thanh màu ngang(cân chỉn màu) vào cửa sổ hình vẽ, đưa ra biểu đồ màu cho trục hiện tại.
colorbar(‘h’) định vị thanh màu ngang dưới hình vẽ hiện tại, colorbar(‘v’)
định vị thanh màu đứng về bên phải hình vẽ. colorbar không có đối số thì thêm một thanh màu ngang, nếu thanh màu này không tồn tại hoặc là cập nhật nếu nó tồn tại. Ví dụ: [X,Y,Z]=peaks; mesh(X,Y,Z); colormap(hsv) axis([-3 3 -3 3 -6 8]); colorbar
6.9 Thiết lập và thay đổi bảng màu
Thực tế colormaps là các ma trận, có nghĩa là ta có thể thao tác chúng giống như bất kỳ một ma trận nào khác. Hàm bridhten(n) nhờ vào đặc điểm này thay đổi colormap độ tăng hoặc độ giảm độ nhạy của của các màu đậm.
brighten(n) và brighten(-n) phục hồi colormap ban đầu. Lệnh
newmap=brighten(cmap,n) điều chỉnh phiên bản của thanh màu đã được khai báo mà không làm ảnh hưởng đến colormap hiện tại hoặc cmap,
brighten(gcf,n) làm sáng tất cả các đối tượng trong hình vẽ hiện tại.
Ta có thể tạo colormap của riêng mình bằng cách tạo ra một ma trận
mymap m hàng, 3 cột và cài đặt nó cùng với colormap(mymap) mỗi giá trị trong một ma trận colormap phải thuộc khoảng từ 0 đến 1. Nếu sử dụng một ma trận với nhiều hơn hoặc ít hơn 3 cột hoặc chưa một giá trị nào đó bé thua 0 hoặc lớn hơn 1 colormap sẽ đưa ra thông báo lỗi.
Ta có thể kết nối các colormap theo kiểu toán học. Mặc dù kết quả đôi khi không thể đoán trước được.
Ví dụ:
0.1179 0 0 0.1959 0.1029 0.1029 0.2507 0.1455 0.1455 0.2955 0.1782 0.1782 0.3343 0.2057 0.2057 0.3691 0.2300 0.2300 0.4009 0.2520 0.2520 0.4303 0.2722 0.2722 0.4579 0.2910 0.2910 0.4839 0.3086 0.3086 0.5085 0.3253 0.3253 0.5320 0.3412 0.3412 0.5546 0.3563 0.3563 0.5762 0.3709 0.3709 0.5971 0.3849 0.3849 0.6172 0.3984 0.3984 0.6367 0.4115 0.4115 0.6557 0.4241 0.4241 0.6741 0.4364 0.4364 0.6920 0.4484 0.4484 0.7094 0.4600 0.4600 0.7265 0.4714 0.4714 0.7431 0.4825 0.4825 0.7594 0.4933 0.4933 0.7664 0.5175 0.5040 0.7732 0.5407 0.5143 0.7800 0.5628 0.5245 0.7868 0.5842 0.5345 0.7935 0.6048 0.5443 0.8001 0.6247 0.5540 0.8067 0.6440 0.5634 0.8133 0.6627 0.5727 0.8197 0.6809 0.5819 0.8262 0.6986 0.5909 0.8325 0.7159 0.5998 0.8389 0.7328 0.6086 0.8452 0.7493 0.6172 0.8514 0.7655 0.6257 0.8576 0.7813 0.6341 0.8637 0.7968 0.6424 0.8698 0.8120 0.6506 0.8759 0.8270 0.6587 0.8819 0.8416 0.6667 0.8879 0.8560 0.6746 0.8938 0.8702 0.6824 0.8997 0.8842 0.6901 0.9056 0.8979 0.6977 0.9114 0.9114 0.7052 0.9172 0.9172 0.7272 0.9230 0.9230 0.7485 0.9287 0.9287 0.7692 0.9344 0.9344 0.7893 0.9400 0.9400 0.8090 0.9456 0.9456 0.8282 0.9512 0.9512 0.8469 0.9567 0.9567 0.8653 0.9623 0.9623 0.8832 0.9677 0.9677 0.9008 0.9732 0.9732 0.9181 0.9786 0.9786 0.9351 0.9840 0.9840 0.9517 0.9894 0.9894 0.9681 0.9947 0.9947 0.9842 1.0000 1.0000 1.0000 Vì các colormap là các ma trận, chúng có thể được vẽ đồ thị. Lệnh