Đồ hoạ trong không gian 3 chiều MATLAB cung cấp một số hàm để hiển thị dữ liệu 3 chiều nh- các hàm vẽ đ-ờng thẳng trong không gian 3 chiều, các hàm vẽ bề mặt và và khung dây và màu có thể đ-ợc sử dụng thay thế cho chiều thứ t-. 18.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 3 chiều bằng lệnh plot3.
128 H×nh 17.21 oOo chơng 18 Đồ hoạ kh«ng gian chiỊu MATLAB cung cÊp mét sè hàm để hiển thị liệu chiều nh hàm vẽ đờng thẳng không gian chiều, hàm vẽ bề mặt và khung dây màu đợc sử dụng thay cho chiều thứ t 18.1 Đồ thị đờng thẳng Lệnh plot từ kh«ng gian hai chiỊu cã thĨ më réng cho kh«ng gian chiều lệnh plot3 Khuôn dạng plot3 nh− sau: plot3 ( x1, y1, z1, S1, x2, y2, z2, S2, ), xn, yn zn vector ma trận, Sn xâu kí tự tuỳ chọn dùng cho việc khai báo màu, tạo biểu tợng kiểu đờng Sau số vÝ dô: >> >> >> >> t = linspace (0, 10*pi); plot3(sin(t),cos(t),t) title ('Helix'),xlabel('sin(t)') ylabel('cos(t)'),zlabel('t') 129 H×nh 18.1 Chó ý rằng: hàm zlabel tơng ứng với hàm hai chiều xlabel ylabel Tơng tự nh vậy, lệnh axis có khuôn dạng: axis ( [xmin xmax ymin ymax zmin zmax ] ) thiết lập giới hạn cho trục VÝ dơ : >> axis('ij') % thay ®ỉi h−íng trơc từ sau trớc Hình 18.2 Hàm text có khu«n mÉu nh− sau: text ( x, y, z, string ) đặt vị trí xâu string vào toạ độ x, y, z 18.2 Đồ thị bề mặt lới MATLAB định nghĩa bề mặt lới điểm theo hớng trục z đờng kẻ ô hình vuông mặt phẳng x-y Nó tạo lên mẫu đồ thị cách ghép điểm gần kề với đờng thẳng Kết trông nh mạng lới đánh cá với mắt lới điểm liệu Đồ thị lới thờng đợc sử dụng để quan sát ma trận lớn vẽ hàm có hai biến 130 Bớc đa đồ thị lới hàm hai biến z = f (x, y ), t−¬ng øng víi ma trËn X Y chứa hàng cột lặp lặp lại MATLAB cung cấp hàm meshgrid cho mục ®Ých nµy [ X, Y ] = meshgrid(x, y ), tạo ma trận X, mà hàng vector x, ma trận Y có cột vector y Cặp ma trận sau đợc sử dụng để ớc lợng hàm hai biến sử dùng đặc tính toán học mảng MATLAB Sau ví dụ cách dùng hàm meshgrid >> x = -7.5:.5:7.5; >> y = x; >> [X,Y] = meshgrid(x,y); X, Y cặp ma trận tơng ứng lới chữ nhật 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 >> R = sqrt(X.^2+Y.^2)+eps; >> % find the distance from the origin (0,0) >> Z = sin(R)./R; % calculate sin(r)/ r Ma trËn R chứa bán kính điểm [X,Y], khoảng cách từ điểm đến tâm ma trận Cộng thêm eps để không để xảy phép chia cho Ma trËn Z chøa sine cđa b¸n kÝnh chia cho bán kính điểm sơ đồ Câu lệnh sau vẽ đồ thị lới: >> mesh(X,Y,Z) Hình 18.3 Đồ thị đơn sắc Tuy nhiên bạn thay đổi màu sắc với trợ giúp MATLAB rễ dàng bạn đọc đến phần colormaps Trong ví dụ này, hàm mesh xắp xếp giá trị phần tử ma trận vào điểm (Xị,Yị,Zị) không gian ba chiều mesh vẽ ma trận đơn tơng tự nh với đối số; mesh(Z), sử dụng điểm (i,j,Zị) Nh Z đợc vẽ ngợc lại với số nó, trờng hợp mesh(Z) đơn giản chia lại độ khắc trục x, y theo chØ sè cđa ma trËn Z B¹n h·y thư t¹o ví dụ cho trờng hợp này? 131 Đồ thị bề mặt ma trận Z trông nh đồ thị lới trớc đó, ngoại trừ khoảng cách hai đờng khác (gọi patchs) Đồ thị loại dùng hàm surf, có tất đối số nh hàm mesh HÃy xem ví dụ dới (Hình 18.4): >> surf(X,Y,Z) Hình 18.4 Để làm rõ thêm vài chủ đề, quay lại hàm peaks đà đa phần trớc Đồ thị lới không gian chiều hàm đợc đa nh− sau (h×nh 18.5): >> mesh(peaks) >> title('Mesh Plot of Peaks function') Hình 18.5 132 Đồ thị đờng viền cho ta thấy đợc độ nâng độ cao hình Trong MATLAB đồ thị đờng viền không gian hai chiều tơng tự nh không gian ba chiều nhng hàm gọi contour3 Đồ thị sử dụng lệnh đợc minh hoạ bảng khắc màu 18.3 Thao tác với đồ thị MATLAB cho phép bạn khai báo góc để từ quan sát đợc đồ thị không gian ba chiều Hàm view(azimuth, elevation ) thiÕt lËp gãc xem b»ng viƯc khai b¸o azimuth elevation Elevation mô tả vị trí ngời quan sát, xem nh góc đo độ hệ trục x-y Azimut mô tả góc hệ trục nơi ngời quan sát đứng Azimuth đợc đo độ từ phần âm trục y Phía âm trục y quay theo chiỊu kim ®ång hå mét gãc -37.5 ®é từ phía bạn Elevation góc mà mắt bạn thấy đợc mặt phẳng x-y Sử dụng hàm view cho phép bạn quan sát hình vẽ từ góc độ khác Ví dụ elevation thiết lập âm, view nhìn hình từ phía dới lên Nếu azimuth thiết lập dơng, hình quay ngợc chiều kim đồng hồ từ điểm nhìn mặc định.Thậm chí bạn nhìn trực tiếp từ cách thiết lập view(0,90 ) Thực điểm nhìn mặc định chiều, x tăng từ trái qua phải, y tăng từ xuống dới, khuôn dạng view(2) hoàn toàn giống nh mặc định view(0, 90 ), view(3) thiết lập mặc định không gian chiều Lệnh view có dạng khác mà tiện ích sử dụng view([X,Y,Z ]) cho phép bạn quan sát vector chứa hệ trục toạ độ decac không gian chiều Khoảng cách từ vị trí bạn quan sát đến gốc toạ độ không bị ảnh hởng Ví dụ, view([0 10 ]), view([0 -1 ]) vµ view(0, ) cho kết nh Các thông số azimuth elevation mà bạn quan sát lấy lại đợc cách dùng [az, e] = view VÝdô: >> view([-7 -9 7]) >> [az,el] = view az = -37.8750 el = 31.5475 Một công cụ hữu dụng khác quan sát đồ thị không gian chiều hàm rotate3d Các thông số Azimtuh elevation đợc tác động chuột, rotate3d on cho phép cht can thiƯp, rotate3d off kh«ng cho phÐp LƯnh hidden dấu nét khuất Khi bạn vẽ đồ thị, số phần bị che khuất phần khác, dùng lệnh nét khuất bị dấu đi, bạn nhìn phần tầm nhìn bạn Nếu bạn chuyển đến hidden off, bạn thấy phần khuất qua mạng lới Dới ví dụ: >> >> >> >> >> mesh(peaks(20)+7) hold on pcolor(peaks(20)) hold off title('Mesh with hiden on') 133 Hình 18.8 Bây hÃy bỏ chế độ dấu nét khuất ta sÏ thÊy sù kh¸c nhau: >> hidden off >> title('Mesh with Hidden Off ') Hình 18.9 134 18.4 Các đặc điểm khác đồ thị không gian chiều ã Hàm ribbon(x, y ) tơng tự nh plot(x, y ) ngoại trừ cột y đợc vẽ nh dải riêng biệt không gian ba chiều Dới đồ thị hình sine: >> x=linspace(0,10,50); >> y=sin(pi*x); >> ribbon(y,x) ã ã ã ã ã Hình 18.10 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), cs cấu trúc đờng viền đợc trả từ lệnh contour, cs=contour(z), lấy nhÃn tất đồ thị đờng viền với độ cao Vị trí 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 Nhấn phím Return kết thúc việc tạo nhÃn Hàm contourf vẽ đồ thị đờng viền kín, không gian đờng viền đợc lấp đầy màu Hai mẫu trạng thái lệnh mesh dùng với đồ thị lới là: meshc vẽ đồ thị lới thêm đờng viền bên dới, meshz vẽ đồ thị lới đồ thị có dạng nh che Hàm waterfall đợc xem nh mesh ngoại trừ điều hàm mesh chØ xt hiƯn ë h−íng x Cã hai mÉu tr¹ng thái lệnh surf, surfc vẽ đồ thị surf thêm đờng bao bên dới, surflvex vẽ đồ thị surf nhng thêm vào chiếu sáng bề mặt từ nguồn sáng Cấu trúc tổng quát surfl( X,Y, Z, S, K ) X, Y,và Z tơng tự nh surf, S vector tuỳ chọn hệ toạ độ decac (S=[Sx Sy Sz]) toạ độ cầu (S=[az,el]) hớng nguồn sáng Nếu không khai báo, giá trị mặc định S 45 độ theo chiều kim đồng hồ từ vị trí ngời quan sát, S vector tuỳ chọn phần đóng góp tuỳ thuộc vào nguồn sáng bao quanh, phản chiếu ánh sáng hệ sè ph¶n chiÕu (K=[ka,kd,ks,spread]) >> colormap(gray) >> surfl(peaks) >> title('surf1 plot of peaks with default lighting') 135 Hình 18.11 ã fill3, phiên chiều fill, vẽ đa giác không gian ba chiều Khuôn dạng tổng quát fill3(x, y, z, c), chiều đứng đa giác đợc ba thành phần x, y, z Nếu c kí tự, đa giác đợc lấp đầy màu nh bảng mµu c cịng cã thĨ lµ mét vector hµng cã thành phần ([r g b]) r, g b giá trị thay cho màu đỏ, xanh xanh da trời Nếu c vector ma trận, đợc sử dụng nh số sơ đồ màu Nhiều đa giác đợc tạo cách cho thêm nhiều đối số nh fill3 (x1, y1, z1,c1, x2, y2, z2, c2, ) VÝ dô sau vẽ ngẫu nhiên tam giác với màu: >> color(cool) >> fill3(rand(3,4),rand(3,4),rand(3,4),rand(3,4)) ã bar3 bar3h phiên chiều bar barh, bie3 phiên ban pie 18.5 Bảng màu Màu biểu đồ màu đợc đề cập đến số ví dụ phần trớc Trong phần nói rõ chúng MATLAB định nghĩa biểu đồ màu nh ma trận có cột Mỗi hàng ma trận định nghĩa màu riêng biệt sử dụng số dải Những số giá trị RGB, độ nhạy màu thành phần đỏ, xanh cây, xanh da trời màu thành phần tạo Một số mẫu đợc cho bảng dới đây: Đỏ 1 0 Xanh 1 Xanh da trời 0 màu đen trắng đỏ xanh xanh da trời vàng 136 -5 -5 -49 -5 -62 1 -5 -40 -83 tÝm ®á lam xám xám trung bình đỏ tối đỏ đồng ngọc xanh biển Dới số hàm MATLAB để tạo bảng màu trên: Function hsv hot gray bone copper pink white flag jet prism cool lines summe autumn winter spring Mô tả bảng màu Giá trị màu bÃo hoà (HSV) đen-đỏ-vàng-trắng xám cân tuyến tính xám có pha nhẹ với màu xanh sắc thái màu đồng màu hồng nhạt nhẹ trắng hoàn toàn xen kẽ đỏ, trắng, xanh da trời, đen thay đổi màu bÃo hoà có màu sắc lăng kính màu xanh tím màu nét vẽ Bóng xanh vàng Bóng đỏ vàng Bóng xanh xanh da trời Bóng magenta yellow 18.6 Sử dụng bảng màu Câu lệnh colormap(M) cài đặt ma trận M nh bảng màu đợc sử dụng hình Ví dụ: colormap(cool) cài đặt version 64 đầu vào bảng màu cool Hàm plot plot3 không dùng bảng màu trên, chúng sử dụng màu liệt kê bảng kiểu đờng, điểm đánh dấu, màu plot Phần lớn hàm vẽ khác nh mesh, surf, contour, fill, pcolor biến nó, sử dụng bảng màu Sau ví dụ dùng tham số màu cho hàm surf để hiển thị góc quan sát : >> >> >> >> >> [X,Y,Z]=peaks(30); surf(X,Y,Z,atan2(X,Y)) colormap(hsv),shading flat axis([-3 -3 -6.5 8.1]),axis off title('using a color Argument to surf') 137 Hình 18.12 18.7 Sử dụng màu để thêm thông tin Màu đợc dùng để thêm thông tin vào đồ thị chiều đợc sử dụng để tạo thành chiều thứ t Các hàm nh mesh surf biến đổi màu dọc theo trục z, trừ đối số màu đợc đa nh surf(X,Y,Z) hoàn toàn tơng đơng với surf(X,Y,Z,t ) thành phần thứ t đợc dùng nh số biêu đồ màu Điều khiến cho đồ thị đầy màu nhng lại không thông tin mà trục z đà tồn Dới số cách sử dụng đối số màu để thêm thông tin nhấn mạnh thông tin đà tồn đồ thÞ >> >> >> >> >> >> >> >> >> >> >> >> >> >> x=-7.5: 5:7.5; y=x % create a data set [X,Y]=meshgrid(x,y); %create plaid data R=sqrt(X.^2+Y.^2) +eps % create radial data Z=sin(R)./R; % create a sombrero subplot(2,2,1),surf(X,Y,Z), title('Color Varies with the Z_axis') subplot(2,2,2),surf(X,Y,Z,R), title('Color Varies With the Radius') subplot(2,2,3),surf(X,Y,Z,del2(Z)), title('Color Varies with Curvature') [dZdx,dZdy]=gradient(Z); %compute the slope dZ=sqrt(dZdx.^2+dZdy.^2) %compute the slope's manitude subplot(2,2,4),surf(X,Y,Z,dZ) title('Color Varies With the slope Magnitude') 138 Hình 18.13 18.8 Hiển thị bảng màu Bạn hiển thị bảng màu theo số cách sau Một cách xem tất phần tử trong ma trận bảng màu mét c¸ch trùc tiÕp: >> hot(8) ans = 0.3333 0.6667 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 0 0.3333 0.6667 1.0000 1.0000 1.0000 0 0 0 0.5000 1.0000 Thêm vào đó, hàm pcolor đợc sử dụng để biểu diễn bảng màu HÃy thử ví dụ vài lần cách dùng hàm colormap khác thay đổi tham số n: >> >> >> >> >> colormap(jet(n)) n=8; colormap(jet(n)) pcolor([1:n+1;1 :n+1]') title('using pcolor to display a colormap') 139 Hình 18.4 Hàm colorbar thêm màu đứng màu ngang (cân chỉnh màu ) vào cửa sổ hình vẽ bạn, đa biểu đồ màu cho trục colorbar( h) định vị màu ngang dới hình vẽ bạn colorbar( v) định vị màu đứng bên phải hình vẽ bạn colorbar đối số thêm màu ngang, màu không tồn cập nhËt nÕu nã tån t¹i >> [X,Y,Z] = peaks; >> mesh(X,Y,Z ); >> colormap(hsv) >> axis([-3 -3 -6 8]) >> colorbar Hình 18.5 18.9 Thiết lập thay đổi bảng màu Thực tế colormaps ma trận, có nghĩa bạn thao tác chúng giống nh ma trận khác Hàm brighten nhờ vào đăc điểm thay đổi colormap độ tăng giảm độ nhạy màu đậm bighten(n) với bighten(-n) phục hồi colormap ban đầu Lệnh newmap=brighten(n) tạo màu sáng tối colormap hiên mà không làm 140 thay đổi biêủ đồ màu Lệnh newmap=brighten(cmap,n) điều chỉnh phiên màu đà đợc khai báo mà không làm ảnh hởng đến colormap cmap brighten(gcf, n) làm sáng tất đối tợng hình vẽ Bạn tạo colormap riêng bạn cách đa ma trận mymap m hàng,3 cột cài đặt với colormap(mymap) giá trị ma trận colormap phải thuộc khoảng từ đến Nếu bạn cố gắng sử dụng ma trận với nhiều cột chứa giá trị bé thua lớn hơn1 colormap đa thông báo lỗi Bạn kết nối colormap theo kiểu toán học Mặc dù kết đoán trớc đợc Ví dụ, biểu đồ có tên gọi pink : >> pinkmap = sqrt (2/3*gray+1/3*hot); Bëi v× colormap ma trận, chúng đợc vẽ đồ thị Lệnh rgbplot vẽ đồ thị giá trị cđa colormap t−¬ng tù nh− lƯnh plot, nh−ng sư dơng màu đỏ, màu xanh xanh da trời cho nét vẽ rgbplot(gray) cho biết ba màu tăng tuyến tính đồng Lệnh rgbplot với số colormap khác nh jet, hsv, prism Giá trị cmin cmax đợc trả lại caxis đối số Chúng thờng giá trị lớn nhỏ liệu, caxis([cmin cmax ]) sử dụng colormap nguyên cho liệu dải cmin cmax, điểm liệu lớn cmax bị chia thành màu kết hợp với cmax Và điểm liệu có giá trị nhỏ cmin bị chia thành màu kết hợp với cmin Nếu cmin nhỏ min(data) cmax lớn max(data ), màu kết hợp với cmin cmax không đợc sử dụng ; phần nhỏ colormap đợc sử dụng caxis(auto) hồi phục giá trị mặc định cmin cmax Ví dụ sau đợc minh hoạ colorplate4 >> pcolor([1:17;1:17]') >> title('Default color range') >> colormap(hsv(8)) >> axis('auto') >> colorbar >> caxis ans = 17 H×nh 18.6 ... dới đây: Đỏ 1 0 Xanh 1 Xanh da trêi 0 màu đen trắng đỏ xanh xanh da trêi vµng 136 -5 -5 -4 9 -5 -6 2 1 -5 -4 0 -8 3 tím đỏ lam xám xám trung bình đỏ tối đỏ đồng ngọc xanh biển Dới số hàm MATLAB để... surf(X,Y,Z,atan2(X,Y)) colormap(hsv),shading flat axis( [-3 -3 -6 .5 8.1]),axis off title('using a color Argument to surf') 137 H×nh 18. 12 18. 7 Sử dụng màu để thêm thông tin Màu đợc dùng để thêm... tồn cập nhật tồn >> [X,Y,Z] = peaks; >> mesh(X,Y,Z ); >> colormap(hsv) >> axis( [-3 -3 -6 8]) >> colorbar H×nh 18. 5 18. 9 Thiết lập thay đổi bảng màu Thực tế colormaps ma trận, có nghĩa bạn thao