Tài liệu tham khảo Giáo trình cơ sở Matlab v5.3-1 - Phần 1 Cơ sở matlab - Chương 4 Đồ họa hai chiều trong Matlab
Chơng - Đồ hoạ hai chiều Chơng Đồ hoạ chiều Matlab 4.1 Các phép biến đổi đồ hoạ Nghịch đảo ma trận v định thức đợc giới thiệu phần ny đợc hình dung nh phép biến đổi tạo nên phép chuyển vị thực thể hình học hay vector cửa sổ đồ hoạ Matlab Nội dung phép biến đổi nhằm mô tả phơng pháp đợc sử dụng hầu hết lĩnh vực kỹ thuật khác nh đồ hoạ máy tính hay robotic Ngoi để khai thác tiềm đồ hoạ Matlab xin liệt kê hm tơng tác cửa sổ đồ hoạ Matlab cách chi tiết nhằm đem đến cho bạn th− viƯn c¸c hμm, hiƯu øng cđa c¸c hμm cịng nh phơng pháp tiếp cận hm 4.1.1 Quay hệ trục toạ độ mặt phẳng y y1 P x1 x Hình 4.1 Quay hệ trục mặt phẳng Phần - Cơ sở 50 Chơng - Đồ hoạ hai chiều Hình 4.1 hệ toạ độ điểm P đợc biểu diễn đờng liền nét x, y v điểm P hệ trục biểu diễn đờng đứt nét x1 v y1 x1 v y1 quay góc ngợc chiều kim đồng hå so víi trơc x, y Quan hƯ gi÷a hai cặp hệ trục toạ độ đợc biểu diễn c«ng thøc sau: x1 = x cosα + y sinα (4.1) y1 = - x sinα + y cosα (4.2) víi ⎡ x1 ⎤ cosα sinα ⎡x⎤ P = ⎢ ⎥ vμ P1 = ⎢ ⎥ ; A = -sinα cosα ⎣ y⎦ ⎣ y1 ⎦ ta cã thĨ viÕt 4.1 vμ 4.2 d−íi d¹n sau: P1 = AP (4.3) Quan hệ nghịch đảo hình 4.1 đợc thĨ hiƯn nh− sau: x = x1 cosα + y1 sinα (4.4) y = - x1 sinα + y1 cos (4.5) Điều có nghĩa ma trËn biĨu diƠn phÐp quay gãc -α tõ hƯ toạ độ x1, y1 đến hệ toạ độ x, y lμ: B = cos α − sin α sin α cos Lúc 4.4 v 4.5 đợc viết thnh P = B B1 (4.6) 4.1.2 Nghịch đảo ma trận Vậy quan hệ A v B đợc hiểu sao? Từ phơng trình (4.5), (4.6) ta thấy víi ®iĨm P bÊt kú, sau hai phÐp chun ta thu đợc P=BAP loại bỏ biÕn P ta cã thÓ viÕt nh− sau: B A = cosα − sinα sinα cosα = sinα cosα − sinα cosα 0 t−¬ng tù ta cã: P1 = ABP1 Một lần ta thấy AB ma trận đơn vị v phát triển ma trận B l ma trận nghịch ®¶o cđa A vμ chóng ta th−êng biĨu diƠn A-1 Định nghĩa đợc phát triển nh sau: Phần - Cơ sở 51 Chơng - Đồ hoạ hai chiều Cho ma trận vuông A, ma trận nghịch đảo A-1 cđa A lμ ma trËn cho nh©n phải hay trái với A cho ta kết l ma trận đơn vị I A A-1 = A-1 A = I nghịch đảo ma trận x dễ dng tìm đợc theo cách sau Ví dụ a l phần tử ma trận nghịch đảo từ A, việc nhân A B cho kÕt qu¶ nh− sau: ⎡a11 a12 ⎤ ⎡b11 b12 ⎤ ⎢a a ⎥ ⎢b b ⎥ ⎣ 21 22 ⎦ ⎣ 21 22 ⎦ = 0 (4.8) Từ phơng trình (4.8) cho kết sau: b11 = a 22 a11a 22 − a 21a 22 b12 = − a12 a11a 22 − a 21a12 (4.10) b 21 = − a 21 a11a 22 − a 21a12 (4.11) b 22 = a11 a11a 22 − a 21a12 (4.12) (4.9) Từ dễ dng thu đợ ma trận nghịch đảo B từ A Tuy Matlab hm nghịch đảo đợc viết sẵn th việc v đợc gäi th«ng qua lƯnh inv Víi lƯnh inv (A) cho ma trận nghịch đảo A Ví dụ: - Quay hệ trục toạ độ góc 300 đợc viết nh sau: >> alpha = 30 >> A=[cos(pi*alpha/180) -sin(pi*alpha/180) A= 0.866 -0.500 sin(pi*alpha/180) cos(pi*alpha/180)] 0.500 0.866 - Ma trận nghịch đảo B tạo thnh từ A >> B = inv(A) B = 0.866 -0.500 0.500 0.866 - Nhân ma trận A v, kết thu đợc nh− sau >> A * B ans = 1.000 0.000 Phần - Cơ sở 52 Chơng - Đồ hoạ hai chiều 0.000 1.000 - Quay trục qua điểm x = , y = >>P1 = A*[3 ; 7] P1 = 6.0981 4.5622 - Nghịch đảo lại ma trận hon trả lại toạ độ cho điểm >> P = B * P1 P= 4.1.3 Gãc Euler Góc Euler l thao số quy ớc để mô tả việc quay hệ không gian chiều hay hệ toạ độ trực giác Những tham số có rÊt nhiỊu øng dơng lÜnh vùc c¬ khÝ Cã vi cách định nghĩa khác góc Euler ®−ỵc biÕt ®Õn nh−: Meitrovitch (1970), Guggenheimer (1977) vμ Czichos (1989) bi toán toạ độ điểm P đợc xác định hệ giá trị x, y, z v phải xác định ®iĨm t−¬ng øng x1, y1, z1 sau quay hƯ toạ độ góc Việc xác định chiều quay âm/ dơng hệ trục toạ độ thông qua quy tắc bn tay phải Theo hình 4.2 với công thức đợc học phần đồ hoạ Khi ta qua hệ toạ độ xung quanh trục z với góc Điểm x*, y*, z* đợc tạo thnh đợc mô tả theo công thức sau: cos sin x* y * = X * = − sin ψ cos ψ z* 0 x y = A.X z (4.13) TiÕp theo quay hƯ trơc quanh trơc x với góc Hệ giá trị toạ độ điểm thu đợc đợc viết dới công thức: x ** 0 y * * = X * * = cosθ sinθ z ** - sinθ cosθ x* y * = B X * z* (4.14) B−íc quay hƯ trơc quanh trơc z h−íng ngợc lại góc Giá trị toạ độ cuối thu đợc l: Phần - Cơ sở 53 Chơng - Đồ hoạ hai chiều cos sin x * * x1 y1 = P1 = -sinφ cosφ y * * = CX * * z1 (4.15) z ** KÕt qu¶ tiÕn tr×nh quay: P1 = A B C X = DX (4.16) % Đoạn chơng trình ví dụ cho việc quay ma trËn d−íi c¸c gãc si, theta, fi function R = Elrotate (si, theta, fi) A = [cos(si) sin(si) -sin(si) cos(si) 0 1]; 0 cos(theta) sin(theta) -sin(theta) cos(theta)]; B = [1 C = [cos(fi) sin(fi) -sin(fi) cos(fi) 0 1]; R = C * B * A; PhÐp biÕn ®ỉi Czichos (1989) đợc biểu diễn dới công thức sau: Giả sử C = cos (θ), Sθ = sin(θ) ta cã ma trËn quay CφCψ − SφCθSψ R = − SφCψ − CφCθSψ CφCψ + SφCθSψ SφSθ − SφSψ + CφCθCψ CφSθ 4.17) SθSψ − S θ Cψ Cθ VÝ dô: Khi cho điểm P với giá trị toạ độ [2 3] cho c¸c gãc quay lμ 30, 45, 200 Việc biểu diễn Matlab đợc viết nh sau: >> R = Elrotate( 30*pi/180 , 45*pi/180 , 20*pi/180 ) R= 0.6929 0.6793 0.2418 -0.6284 0.4044 0.6645 0.3536 -0.6124 0.7071 >> X1 = R*[ ; ; ] X1 = Phần - Cơ sở 54 Chơng - §å ho¹ hai chiỊu 5.5077 2.7587 -0.2334 >> X = inv( R ) * X1 X= 2.0000 5.0000 3.0000 Trong hm Elrotate tạo biến A, B, C nhiªn kiĨm tra b»ng >> A hay dïng lệnh >>Who Các biến A, B, C không xuất A, B, C l tham biến cđa hμm Elrotate vμ chØ cã t¸c dơng hμm 4.2 Phép biến đổi Affine không gian 2D Các đối tợng hình hoạ đợc mô tả chơng ny cã mét ý nghÜa hÕt søc quan träng c¸c ứng dụng lĩnh vực kỹ thuật đại nh đồ họa my tính hay robotics Một nhóm lệnh đợc sử dụng thờng xuyên gọi l Affine transformation Chúng bao gồm: translation, rotation, scaling sÏ cïng xem xÐt viƯc thùc hiƯn chóng Matlab 4.2.1 Tọa độ Trong thực tế để biểu diễn phép biến đổi Affine ngời ta thờng sử dụng phép biến đổi ma trận Thờng đồ hoạ máy tính v kỹ thuật robotics đòi hỏi concatenation vi phép biến đổi Điều đợc thực loại phép nhân ma trận Việc nhân ma trận chuyển đổi đợc thực với việc sử dụng hệ toạ độ Để giới thiệu hệ toạ độ giả sử có điểm P hệ toạ độ Đề với giá trị toạ độ x, y Việc biểu diễn P dới dạng hệ toạ độ đợc viÕt nh− sau: x1 P = y1 z1 x = x1 / W y = y1 / W Nguyên nhân quan trọng việc biểu diễn theo hệ toạ độ l chúng cho phép biểu diễn điểm xa vô Phần - Cơ sở 55 Chơng - Đồ hoạ hai chiều ψ ψ ψ ψ ψ ψ ψ H×nh 4.2 Quay thực thể quanh trục x3 Trong hệ toạ độ không gian thờng (x, y) để biểu diễn điẻm vô hai giá trị điểm = Nhng hệ toạ độ nhất, việc biểu diễn thông qua cách cho giá trị W = với x1, y1 l số hữu hạn Tuy nhiên không sâu vo điểm ny, bạn đọc tham khảo ti liệu đồ hoạ máy tính v bi toán chiếu phối cảnh, nói phơng pháp tạo phép biến đổi không gian đồ hoạ Với Hình 4.3 điểm tạo nên hình vuông đợc cho giá trị nh sau: 0.5 P1 = , −0.5 0.5 P2 = , P3 = , 1 0.5 P4 = 1 Nh đà biết giá trị toạ ®é thø ba - W ®−ỵc cho b»ng 1, ë ®©y chóng ta ®· sư dơng ®Õn kü tht phỉ biến bi toán đồ hoạ v với Matlab dễ dng thể câu lệnh sau: >> P1 = [-0.5; 0; 1]; P2 = [-0.5; 1; 1]; >> P3 = [0.5; 1; 1]; P4 = [0.5; 0; 1]; (Chó ý r»ng ma trËn P chøa vector P1 dùng cho việc đóng hình vuông) Việc tạo ta hình vuông mn đồ hoạ thông qua biÕn square >> square = [ P1 P2 P3 P4 P1 ] ; >> plot ( square( 1,: ), square( 2,: ) ) >> axis([-4 -1 5]); >> title ('hình vuông với tỉ lệ trục [ -4 -1 ]'); Phần - Cơ sở 56 Chơng - Đồ hoạ hai chiều 0.8 hinh vuong voi ti le truc [ -4 -1 ] 0.6 0.4 0.2 0 -0.5 Hình 4.3 -1 -4 0.5 a Hình vuông chuẩn -2 b Hình vuông sau thay đổi tỉ lệ trục toạ độ việc tạo ta hình vuông mn đồ hoạ thông qua biến square >> square = [ P1 P2 P3 P4 P1 ] ; >> plot ( square( 1,: ), square( 2,: ) ) >> axis([-4 -1 5]); >> title ('hình vuông với tØ lƯ trơc [ -4 -1 ]') 4.2.2 Phép chuyển dịch Hm biến đổi chuyển vị với khoảng dx v dy song song trục x vμ y function T = Translate ( dx , dy ) T = [1 dx; dy; 0 1]; % ma trận dịch chuyển hệ toạ ®é ®ång nhÊt %T = 0 dx dy 0 Việc dịch chuyển hình vuông khoảng đơn vị theo x v khoảng đơn vị theo y đuợc thể dòng lệnh: >> P = translate ( , 2) * square >> plot ( P( , : ), P ( , : ) ); >> axis ( [-3 -1 3] ) >> title (' Hình vuông thay đổi vị trí theo dx v dy ') Phần - Cơ sở 57 Chơng - Đồ hoạ hai chiều hinh vuong dich theo dx= 1, dy= -1 -4 -2 H×nh 4.4 Hình vuông dịch chuyển theo độ di dx v dy 4.2.3 Phép quay Hm quay quanh gốc toạ độ với góc ngợc chiều kim đồng hồ đợc viết Function R = rotate (fi) c o s φ − s in φ %R = s i n φ cosφ R= 0 [cos(fi) sin(fi) -sin(fi) cos(fi) 0 1] H×nh vuông quay theo goc 45 Hình 4.5 Hình vuông quay góc 45 theo gốc toạ độ Phần - Cơ sở 58 Chơng - Đồ hoạ hai chiều Hình 4.5 thu đợc thông qua dòng lƯnh d−íi Matlab nh− sau, víi gãc quay θ = 450 >> P = rotate (45*pi/180)*square >> plot (P( , : ), P ( , : ) ), axis ([-3 -1 3]) >> title ('Hình vuông quay theo goc 45 ') Quay theo goc 60 dich chuyen tren doan dx=1, dy=2 -1 -4 -2 Hình 4.6 Tổ hợp hai phép biển đổi Hay hình 4.6 thu đợc cách dễ dng sở kết hợp phơng pháp chuyển đổi >> P = rotate (30*Pi/180)*translate(1,2)*square >> plot (P( , : ), P ( , : ) ), axis ([-4 -1 5]) >> title ('Hình vuông quay v dịch chuyển ') 4.2.4 Phép tỉ lệ (Scaling) Hm dới cho phép biến đổi tỷ lệ hình theo tỷ lệ định Việc biến đổi tỷ lệ đợc thực qua phép nhân ma trận S vơ Sx, Sy l hệ sè biÕn ®ỉi %S = Sx 0 0 Sy 0 function S = scale (Sx, Sy) S = [ Sx 0; Sy 0; 0 ] Ví dụ việc biến đổi hình vuông lần theo x v lần theo y đợc thùc hiƯn nhê c¸c lƯnh sau >> P = scale (2,3)*square >> plot (P( , : ), P ( , : ) ) >> title ('Hình vuông thay ®ỉi tØ lƯ theo x = theo y = 3) Phần - Cơ sở 59 Chơng - Đồ hoạ hai chiều c Vẽ hoạt hình ( comet ) LƯnh comet plot cho phÐp ng−êi sư dơng vÏ theo điểm mn hình gây hiệu ứng hoạt hoạ vẽ Dới l số lƯnh comet Comet (x, y) VÏ vector y trªn trơc x Nếu tham số vo hay thiếu chơng trình tự định số Comet (x, y, l) VÏ theo hμm comet víi phÇn kÐo dμi l không khai báo số l chơng trình tự lấy giá trị = 0.1 d.Hm đồ hoạ Dùng để vẽ hm toán học đợc khai báo mảng ký tự Mảng ký tự l hm chuẩn hay đợc định nghĩa ngời sư dơng file M fku.m fplot (fku,lim,str) Vector lim = [Xmin Xmax] dùng để giới hạn khoảng xác định đồ hoạ Nó bao gồm thnh phần thnh phần thứ v l khoảng xác định trục y Nếu biến str không khai báo hm chơng trình tự lấy giá trị mặc định kiểu đờng hay mầu cho phần đồ hoạ Vẽ đồ thị nh với sai số liên quan nhỏ giá trị fplot tol ( fcu, lim, str, tol ) VÝ dô: Dïng hμm fplot vẽ phơng trình sin x2 >> fplot( sin(x^2),[ , 10 ] ); 0.5 -0.5 H×nh 4.16 Phơng trình sin x2 qua hm fplot() 4.3.2.Các hệ toạ độ mặt phẳng Phần - Cơ sở 67 Chơng - Đồ hoạ hai chiều Hm plot cho phép ngời sử dụng vẻtên toạ đồ Đề Tuy nhiên số bi toán kỹ thuật lại yêu cầu hệ toạ độ khác Để đáp ứng nhu cầu Matlab cung cấp loạt hm cho phép tạo dựng đồ họa loại hệ toạ ®é polar ( thet, r ) - VÏ trªn hƯ tọa độ cực Các phần từ vector theta l biến đo radian v phần tử vector r l khoảng cách đến điểm gốc semilogx ( x, y ) - Cho phép vẽ hệ toạ ®é nưa trơc loga, thay log10 ®−ỵc sư dơng cho trục x Điều tơng đơng với việc viết plot (log10(x,y) nhng lỗi với trờng hợp log10(0) semilogy ( x,y ) - Vẽ hệ toạ độ trục loga Thang đo log10 đợc sử dụng cho trục y Điều tơng đơng plot (x,log10(y) v không báo lỗi viÕt log10(0) loglog ( x,y ) - Hμm cho phÐp vẽ hệ toạ độ loga trục hệ toạ độ dựa thang đo log10 Điều tơng đơng với việc plot(log10(x), log10(y)) v không báo lỗi ta sử dụng log10(0) Ví dụ: a) >> x = linespace (0,7); % tạo giá trị x >> y = exp(x) % t¹o y theo x >> subplot (x,1,1); plot( x,y ); % vÏ hμm chuÈn >> subplot(2,1,2); semilogy( x,y ); % vÏ hμm loga 1200 10 1000 10 800 600 10 400 10 Hình 4.16 b)Vẽ hm sau toạ độ cực theo công thức sau: Phần - Cơ sở 68 Chơng - Đồ hoạ hai chiều R = ecost - 2cos4 + ⎜ sin ⎝ t5 ⎞ ⎟ 12 ⎠ >> t = linspace (0,22*pi,1100); >> r = exp ( cos( t ) ) - 2*cos (u*t)+sin ( t./12) ).^5; >> subplot (2,1,1); >> p = polar(t,r); % vẽ hệ toạ độ cực >> subplot (2,1,2) >> [ x , y ] = pol2cart(t,r) % giá trị từ hệ toạ độ cực sang hệ Đề >> plot(x,y); % polar_to_carttesian 120 150 90 60 30 180 210 240 270 0 330 -1 -2 300 -3 -4 -5 Hình 4.17 hệ toạ độ cực 4.3.3 Mặt phẳng ®å ho¹ cho sè phøc quiver ( x , y ) Vẽ mũi tên cho cặp hệ toạ ®é cho bëi xij vμ yij cïng biÕn sè vμ ®é lín lμ dxi vμ dyi quiver VÏ mịi tên với tọa độ xi yi biến số v ®é lín lμ tËp dxij vμ dyij ( x , y , dx , dy ) quiver VÏ mịi tªn nh nhng hệ số tỷ lệ đợc cho giá Phần - Cơ sở 69 Chơng - Đồ hoạ hai chiều trị s ( x, y , , s ) Nếu s không đợc khai báo giá trị mặc định l quiver ( x, y, , str ) VÏ mịi tªn víi kiểu mẫu đờng đợc xác định thông qua biến str Vẽ mũi tên phần thực v ảo phần tử hay ma trận số ảo z feather ( z ) feather ( x, y ) T−¬ng tù víi feather(x+y*i) feather ( z, str ) VÏ mũi tên với việc sử dụng kiểu đờng thẳng str Vẽ mũi tên khởi tạo từ gốc phần thực v ảo phần tử ma trận số ảo z compass ( z ) Tơng đơng hm compass (x + y*i) compass ( x, y ) compass (z, str) Vẽ mũi tên sử dụng kiểu đờng v mẫu sắc đợc định nghĩa str rose ( v ) Vẽ biểu đồ biểu đồ tròn cho phép thể tần suất đối số vector v Tơng tự nhng với khoảng xác định u rose ( u ) VÏ biĨu ®å ®èi sè víi x l vector khoảng xác định rose ( x ) Ví dụ: Ma trận z đợc xác định nh sau: 1+ i % z = − + 3i −1− i 2−i − 5i − 5i i − 3i −1 (2 - i) (3 - 5*i) clf; z= [ (1 + i) (-4 + 3*i) (5 -5*i) (i) (-1 - i) (-1) (3 - 3*i) subplot(2,2,1); quiver(real(z), imag(z)); title('hμm quiver’); subplot(2,2,2);feather(z); title('hμm feather’); subplot(2,2,3); compass(z); PhÇn - Cơ sở 70 ] Chơng - Đồ ho¹ hai chiỊu title('hμm compass’); subplot(2,2,4); rose(angle(z(:))); title ( 'ham rose ‘); hµm quiver hµm feather 2 -2 0 hµm compass 0 -5 10 ham rose 90 120 60 30 150 180 210 330 240 270 300 H×nh 4.18 Đồ hoạ thu đợc từ hm Quiver, Teather, Compass, Rose 4.3.4 LƯnh kiĨm so¸t figure ( gef ) HiĨn thÞ cưa sỉ graphics hiƯn hμnh LƯnh figure cịng dùng để kích hoạt cửa sổ graphic hay tạo cửa sổ đồ hoạ clf Lệnh dùng để xoá cửa sổ đồ hoạ thời Việc xoá thực kể đà dùng lệnh hold on clg Lệnh xoá tơng tự nh elf v không tồn version Matlab clc Lệnh xoá mn hình lệnh home Chuyển trỏ đến vị trí 'home' l vị trí bên trái mn hình hold on Giữ lại tất mn hình đà vẽ Các lệnh sau thêm vo mn hình đồ hoạ không xoá mn hình cũ Phần - Cơ sở 71 Chơng - Đồ hoạ hai chiều hold off L trạng thái mặc định mn hình đồ hoạ trạng thái ny thừ thể đồ hoạ thay thực thể cũ mn hình Chuyển trạng thái từ on sang off v ngợc lại hold Trả giá trị vi trạng thái hold l on trờng hợp lại = ishold off subplot Lệnh subplot đợc sử dụng để vẽ nhiều đồ thị lên mn hình đồ hoạ subplot không dùng để vẽ m dùng để xác định hay chia vùng mu đồ hoạ subplot Chia mn hình đồ hoạ lm m hμng, n cét vμ p lμ phÇn cưa sỉ hiƯn thời Các cửa sổ mn hình đồ hoạ đợc đánh số theo hm từ trái sang phải, từ xuống dới ( m, u, p ) subplot Đa mu đồ hoạ chế độ mặc định l mn hình đơn Điều tơng đờng subplot(1,1,1) Ví dụ: a) Tạo ma trận với số ngẫu nhiên Đoạn chơng trình đợc ghi vo file *.m clc; cfg; % xoá mn hình tơng tác v mn đồ hoạ for i = : 25 home % ®−a trỏ vị trí 'home' A = rand(5) % tạo vμ in ma trËn end b) T¹o hμm sè sau: % f(x) = -xsinx % f'(x) = -xcosx-sinx x = linspace (-10,10,1000) % t¹o ma trËn x y11 = (-x) *sin(x); % tạo giá trị f y12 = (-x) * cos(x) - sin (x); % đạo hm y21 = diff(y11)./(x(2)-x(1)); % đạo hm xấp xỉ y22 = (y21 - y12 (1:999))./norm(y12); subplot(2,2,1); plot (x,y11); title ('hamf(x) = -xsin(x)'); PhÇn - Cơ sở 72 Chơng - Đồ hoạ hai chiều subplot(2,2,2); plot (x,y12); title ('đạo hm'); subplot (2,2,3); plot (x(1:999),y21); title ('đạo hm xấp xỉ'); subplot(2,2,u); plot (x(1:999),y22); title('sai sè liªn quan') 10 m f ( x) = - xs in 10 -1 -10 10 d a o m -1 -1 0 10 -4 x 1s0a i s o lie n q ua n 10 10 d a o m xa p xi 0 -1 -10 -5 -1 10 10 H×nh 4.19 Hμm -xsin(x) v hm liên quan Hm subplot sử dụng cho đồ hoạ chiều v subplot thay ®ỉi kÝch th−íc VÝ dơ: Hμm Mandelbrot vμ viƯc hiển thị phơng pháp khác với giá trị đặc trng phù hợp z0 = zi+1 = z i + c NÕu zi lμ sai sè c l tậo Mandelbrot Số lặp lại điểm c mặt phẳng phức đợc ghi vμo ma trËn Madelbrot cïng víi viƯc gi¶i vector clear; epsilon = 1e-14; % sai sè renum=input('sè ®iĨm thực renum = '); imnum=input('số điểm ảo imnum = ' ); Phần - Cơ sở 73 Chơng - Đồ hoạ hai chiều remin=-2; immin=-15; % khoảng chặn dới remax=1; immax = 1.5; % khoảng chặn reval1 = linspace ( remin, remax, renum ); imval1 = linspace( immin, immax, imnum ); [reval, imval] = meshgrid(reval1,imval1); % t¹o l−íi grid kho¶ng imvalreal =i mval; imval = imval*i ; cgrid = reval + imval; % -for reind =1: renum % Vòng lặp cho phần thực số disp( [' reind = ', int2str( reind )] ); for imind = : imnum % Vòng lặp cho phần thực c¸c sè c = cgrid (reind, imind); numc = 0; zold = 0.0 + i * 0.0; z = zold^2 + c; while( ( abs(z) = epsilon ) & ( numc < 100 ) ) numc = numc + 1; zold = z; z = zold^2 + c; end; % End còng lặp while Mandelbrot (reind, imind) = numc; end end % C¸c chức đồ hoạ hiển thị hm Mandelbrot với % phơng pháp khác % -clf; % xo¸ mu đồ hoạ whitebg ( 'k' ); % thiết lập mn hình đen subplot ( 2, 2, ); mesh ( reval1, imval1, Mandelbrot ); axis( [-2 -1.5 1.5 100] ) subplot ( 2, 2, ); contour (reval1, imval1, Mandelbrot, 100); Phần - Cơ sở 74 Chơng - Đồ hoạ hai chiều grid; subplot ( 2, 1, 2) surf ( reval, imvalreal, Mandelbrot ); view ( ); shading flat; colormap ( flipud ( jet ) ); % Xác lập hệ mầu JET colorbar; % Hiển thị bar mầu axis ( [-2 -1.5 1.5] ); 1 0 5 0 -0 -1 -1 -2 -1 -1 -2 -1 H×nh 4.15 hm Madelbrot hiển thị cách a In theo lới b Theo contour 100 80 60 40 c In theo phỉ mÇu Phần - Cơ sở 75 Chơng - Đồ hoạ hai chiều 4.3.5 Thao tác v kiểm soát mn hình đồ hoạ Axes , scaling v zooming Các trục vẽ thờng đợc tự động biến đổ tỷ lệ kÝch th−íc cho khÝt víi viƯc thĨ hiƯn c¸c điểm mn hình cho phép có khung nhìn tốt Các giá trị thu đợc qua hm vμ max VÝ dô: [ min(x), min(y), max(x),min(y), min(x), max(y), max(x), max(y) ] Tuy nhiên số trờng hợp mục đích hiển thị ngời sử dụng khác so với việc tự động dn xếp Matlab Chính vËy lƯnh axis cho phÐp chóng ta thay ®ỉi tû lệ trục hay zoom sở sử dụng mouse a Axis: axis - Trả lại giá trị khoảng giới hạn lệnh in thời vo mảng Víi kh«ng gian 2D ta cã [xmin xmax ymin ymax] vμ [xmin xmax ymin ymax zmin zmax] cho kh«ng gian 3D axis ( υ ) - XÐt tû lÖ theo vector υ víi xmin υ 1, xmax = υ 2, ymin = υ ymax = υ víi kh«ng gian 3D zmin = υ vμ zmax = υ axis (axis) - Khoá tỷ lệ giữ không cho Matlab tự động thay đổi tỷ lệ thêm thực thể vo mn hình đồ hoạ axis (str) - Đa kết khác phụ thuộc vo chuỗi str 'auto' - Cho phép Matlab tự động thay đổi tỷ lệ 'equal' - Đa trục toạ ®é cã tû lƯ x,y t−¬ng ®−¬ng 'ij' 'x,y' 'image' - Quay trơc y víi h−íng d−íi cho chiỊu d−¬ng, cho chiều âm - Xét lại trục y với hớng ban đầu (ngợc với 'ij') - Thay đổi kích thớc mn hình đồ hoạ cho điểm cã kÝch th−íc trªn chiỊu dμi vμ bỊ réng nh− 'square' - Thay đổi mn hình đồ hoạ để tạo cửa sổ vuông 'normal' - Thay đổi mn hình đồ hoạ cho kích thớc ban đầu 'off' - Dấu trục ghi kích thớc, không cho hiển thị 'on' - Hiển thị trục bị dấu b Grid grid on - Bật lới vẽ mn hình đồ hoạ grid off - Tắt lới Phần - Cơ sở 76 Chơng - Đồ hoạ hai chiều - Chuyển trạng thái lới từ on sang off hay ngợc lại grid c.zoom - Cho phép ngời sử dụng phóng to đồ hoạ chiều cách kích trái chuột lên mn hình, phải chuột sử dụng ®Ĩ thu nhá, nã cịng cho phÐp lùa chän vïng b»ng "click vμ drag" (kÐo th¶) Tû lƯ sÏ thay đổi để vùng lựa chọn phù hợp với mn hình ®å ho¹ zoom on zoom off - Lo¹i bá lƯnh zoom zoom out - Thay đổi cho đầy khít mn hình zoom - Chuyển trạng thái on v off VÝ dơ: a) VÝ dơ cho viƯc biĨu diƠn ®−êng trßn >> t = : 0.2 : 2*pi + 0.2; >> x = sin (t); >> y = cos (t); >> plot ( x,y,1,-1 ); grid on b) Thay đổi để tạo đờng tròn hình dạng >>axis ('square'); >>grid on c) Bé lÖnh sau cho mμn h×nh 13.15b >> axis ('normal'); >> grid on; >> axis ( [-2 -3 3] ) 1 0.5 0.5 0 Hình 4.20 a) Trớc lúc chuẩn Phần - Cơ sở 77 b) Sau chuẩn square Chơng - Đồ hoạ hai chiều -1 -2 -3 -2 -1 c) Sau trả lại trạng thái normal 4.3.6 Văn mn hình đồ hoạ Trong phần ny đề cập đến lệnh tạo text lên mn hình đồ hoạ Tập lệnh nh title, zlabel cho phép viết chữ chuẩn Còn với text cho phép viết chữ lên nơi thuộc mn hình đồ hoạ Các lệnh viết chữ áp dụng së lÖnh subplot title ( txt ) ViÕt mÊy ký tự txt nh dòng tiêu đề đỉnh mn đồ hoạ xlabel ( txt ) Viết mảng ký tự txt nh nh trục x ylabel ( txt ) ViÕt m¶ng ký tù txt nh− nh− trục y zlabel ( txt ) Viết mảng ký tự txt nh nh trục z text( x, y , txt ) Viết chuỗi txt lên mn đồ hoạ vị trí x, y Giá trị toạ độ x,ycó tỷ lệ với lệnh plot Nếu x v y l vector giá trị txt đợc viết vị trí (xi, yi) Nếu txt l vector giá trị txt đợc viết vị trí xi, yi text(x,y,txt,'sc') Viết chuỗi ký tự txt vị trí x, y hệ toạ ®é víi ®iĨm giíi h¹n lμ 0,0 vμ 1, gtext ( txt ) Viết chuỗi ký tự txt vị trí đợc xác định dấu+ hay trỏ đợc điều khiển chuột legend (st1,st2, ) Đa mn hình chuỗi ký tự st1, st2 hình hộp box m vị trí box đợc điều khiển bở chuột Dùng nh lệnh legend(st1, st2, ) víi l1 vμ l2 lμ kiĨu legend (l1, st1, l2, đờng thẳng st2 ) legen off Loại bỏ chức legend khỏi mn hình đồ hoạ Lệnh chuyển đổi từ số sang chuỗi đợc dïng viƯc in bao gåm sprinf, num2str, int2str PhÇn - Cơ sở 78 Chơng - Đồ hoạ hai chiều Ví dụ: Chơng trình mô tả chuyển động hỗn loạn bớc chuyển động tự n = input (' Nhap gia tri n = '); x = cumsum( rand ( n,1) - 0.5 ); y = cumsum( rand ( n,1 ) - 0.5 ); clf; plot (x,y); hold on; plot (x(1), y(1), '0', x(n), y(n),'0'); axs = axis; % lấy giá trị max scale = axs(2) - axs(1); text(x(1) + scale/30, y(1), 'start'); text(x(n) + scale/30, y y(n), 'kÕt thóc'); hold off; xlabel('trơc x'); ylabel('trơc y'); title ('chuyển độn hỗn loạn'); Vi du ve chuyen dong hon loan Start -1 End truc y -2 -3 -4 -5 H×nh 4.21 cho víi sè bớc hoạt động n = 200 Phần - Cơ sở 79 Chơng - Đồ hoạ hai chiều 4.3.7 Đọc liệu từ mn đồ hoạ Lệnh ginput đợc sử dụng để lấy liệu từ mn hình đồ hoạ Lệnh ny dùng để thay trỏ cửa sổ Con trỏ đợc dịch chuyển thông qua cht hay bμn phÝm bëi ng−êi sư dơng Khi ấn chuột hay phím enter giá trị toạ độ đợc chuyển vo Matlab Nếu giá trị toạ độ điểm không xác định Matlab giữ lại có lần liệu khác *[ x, y ] = ginput Đọc toạ độ điểm từ mn hình đồ hoạ v trao kết cho vector x, y Vị trí điểm đợc xác định mouse hay bμn phÝm *[ x, y ] = ginput ( n ) Đọc n toạ độ điểm từ mn hình đồ hoạ *[ x, y, t ] = ginput ( ) Trả giá trị toạ độ cho x v y; t l mảng ký tự tơng ứng với l phím trái chuột, l phím phải, l phím Nếu bn phím đợc sử dụng t nhận giá trị cho mà ASCII phÝm *[ x, y ] = ginput( , 's' ) Đọc giá trị toạ độ với giới hạn mn ®å häa kho¶ng tõ ®Õn *Waitforbuttonpress Dõng Matlab tác động lên chuột hay bn phím Nếu ấn chuột lệnh trả giá trị bn phím trả giá trị Ví dụ: Ví dụ cho sau minh hoạ cho việc dùng ginput v waitforbuttonpress lập trình Matlab để tạo nên nhiều tơng tác đơn giản mn đồ họa n = figure; % tạo cửa sổ đồ hoạ disp ('vẽ đờng mn đồ hoạ'); disp ('bằng trái chuột'); disp ('kết thúc phím phải chuột'); [x, y, t] = input(1); % đọc toạ độ từ mn đồ hoạ plot (x, y, '0'); x = x; yφ = y; hold; axis ( [0 1] ) % kho¸ trơc while t ~= % nÕu không ấn phải chuột [x, y, t] = ginput(1); plot ( x,y,'0' ); xφ = [xφ x]; yφ = [yφ y]; Phần - Cơ sở 80 Chơng - §å ho¹ hai chiỊu end line ( xφ, yφ ); disp ( ' Ên vμo h×nh vÏ ' ); waitforbuttonpress; % đợi ấn vo phím delete ( n) 0.8 0.6 0.4 0.2 0 0.2 0.4 0.6 0.8 Hình 4.22 Tơng tác mn hình đồ hoạ chuột v bn phím Phần - Cơ së 81 ... sau: ⎡a 11 a12 ⎤ ⎡b 11 b12 ⎤ ⎢a a ⎥ ⎢b b ⎥ ⎣ 21 22 ⎦ ⎣ 21 22 ⎦ = 0 (4. 8) Từ phơng trình (4. 8) cho kết sau: b 11 = a 22 a11a 22 − a 21a 22 b12 = − a12 a11a 22 − a 21a12 (4 .10 ) b 21 = − a 21 a11a 22... ( [-2 -1 .5 1. 5] ); 1 0 5 0 -0 -1 -1 -2 -1 -1 -2 -1 Hình 4 .15 hm Madelbrot hiển thị c¸ch a In theo l−íi b Theo contour 10 0 80 60 40 c In theo phổ mầu Phần - Cơ sở 75 Chơng - Đồ hoạ hai chiều 4. 3.5... Scale(2,2)*roate(30*Pi /18 0)translate (1, 1)*square >> plot (P( , : ), P ( , : ) ), axis ( [ -4 -1 5]) >> title ('Hình vuông quay') 5 4 3 2 1 0 -1 -3 -2 -1 -1 -3 -2 Hình 4. 8 -1 Hình 4. 9 ảnh 4. 8 khác với ảnh 4. 9 với