Các phép biến đổi hình học cơ sở

44 1.7K 9
Các phép biến đổi hình học cơ sở

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Các phép biến đổi hình học cơ sở

Chương III Các phép biến hình Các phép biến đổi hình học sở bao gồm: - tịnh tiến /dời hình (translation) - quay (rotation) - tỷ lệ /vị tự / (scaling) Ví dụ: - báo cáo viên muốn thu nhỏ biểu đồ báo cáo - kiến trúc sư muốn nhìn tịa nhà góc nhìn khác - nhà thiết kế muốn quan sát, tách rời chỉnh sửa chi tiết mẫu thiết kế - Có hai quan điểm phép biến đổi hình học, có liên quan với có lợi riêng: - Biến đổi đối tượng (object transformation): tọa độ điểm đối tượng biến đổi theo công thức phép biến hình, tạo ảnh đổi tượng qua phép biến hình - Biến đổi hệ tọa độ (coordinate transformation): tạo hệ tọa độ mới, sau tất điểm đối tượng chuyển hệ tọa độ Phép biến hình affin Ánh xạ T: R2  R2 P(x,y) Q(x*,y*)  x* = f ( x, y) đó:   y* = g ( x, y) f() g() hai hàm tuyến tính gọi phép biến hình Affin (affine) Ta khảo sát phép biến hình loại Phép biến hình affin có tính chất sau: - Bảo toàn đường thẳng: ảnh đường thẳng qua phép biến hình affine đường thẳng - Bảo tồn tính song song đường thẳng: ảnh đường thẳng song song qua phép biến hình affine đường thẳng song song - Bảo toàn tỷ lệ khoảng cách: giả sử C điểm chia đoạn AB theo tỷ lệ x A’,B’,C’ ảnh A,B,C qua phép biến hình affin Khi C’ chia đoạn A’B’ theo tỷ lệ x 4.1 Các phép biến hình phẳng 4.1.1 Các phép biến hình hệ tọa độ Decac Phép tịnh tiến Ảnh phép tịnh tiến theo vector (a,b) điểm P(x,y) điểm Q(x*,y*)  x* = x + a   y* = y + b Vector tịnh tiến (a,b) gọi “vector độ dời” Chúng ta áp dụng quy tắc cho điểm đối tượng để dịch chuyển Đơn giản hơn, để tịnh tiến đa giác cần tịnh tiến đỉnh vẽ lại đa giác Tương tự, đường tròn, ellip ta tịnh tiến tâm chúng tới vị trí vẽ lại Phép tịnh tiến mặt phẳng Phép tỷ lệ Làm thay đổi kích thước đối tượng  x* = tx.x   y* = ty y ty, tx hệ số co dãn theo trục tung trục hoành Khi tx,ty nhỏ 1, phép biến đổi thu nhỏ đối tượng Khi tx,ty lớn 1, phép biến đổi phóng to đối tượng Khi tx=ty: ta gọi phép đồng dạng (uniform scaling), bảo tồn tỷ lệ kích thước vật thể tx=ty=3 tx=3; ty=1 1 Phép tỷ lệ Phép quay Phép quay làm thay đổi hướng đối tượng Để xác định phép quay, ta cần biết tâm quay góc quay Phép quay điểm P(x,y) quanh gốc tọa độ góc α tạo thành điểm ảnh Q(x*,y*) có công thức sau:  x* = x cos α − y sin α   y* = x sin α + y cos α 1800 Phép quay quanh điểm 4.1.2 Ma trận phép biến hình Nếu ta biểu diễn điểm P,Q dạng vector dòng (x,y) (x*,y*) ma trận phép biến sau: Phép tịnh tiến: (x*,y*) = (x,y) + (a,b) Q = P + T T = (a,b) Phép tỷ lệ:  tx 0 ( ,yx ** ) = (x,y)   ty Q = P×S  tx 0 S =    ty  ma trận phép đồng dạng Phép quay quanh gốc tọa độ:  cosα sinα  (x*,y*) = ( ,yx )   − sinα cosα  hay Q=P×R  cosα sinα  R =    − sinα cosα  ma trận phép quay Tuy nhiên, cách biểu diễn gặp khó khăn kết hợp phép biến đổi lại với biểu diễn phép tịnh tiến (cộng ma trận) khác với hai phép biến hình cịn lại (nhân ma trận) Chẳng hạn, thiết kế động cơ, ta muốn tháo riêng chi tiết ngồi (tịnh tiến), xoay góc (quay) lắp vào chỗ cũ (tịnh tiến) Khi ta phải thực phép tính ma trận (+ × + ) Người ta tìm cách biểu diễn hệ tọa độ nhất, nhờ rút gọn chuỗi biến đổi phép tính 4.1.3 Hệ tọa độ (homogeneous coordinates) Tọa độ (đơi cịn gọi “đồng nhất”) điểm (x,y) mặt phẳng biểu diễn ba (xh,yh,h) liên hệ với tọa độ (x,y) công thức x= xh , h yh h y= Nếu điểm có tọa độ (x,y,z) khơng gian Decac có tọa độ (x.h,y.h,z.h) h số thực khác khơng Ngược lại điểm (x,y,z) hệ tọa độ có tương ứng với điểm (x/z,y/z) hệ tọa độ Decac Tọa độ điểm không gian chiều hay nhiều chiều xác định theo cách tương tự Để đơn giản hóa, người ta thường chọn h=1, lúc điểm P(x,y) biểu diễn dạng tọa độ (x,y,1) 4.1.4 Ma trận phép biến hình hệ tọa độ Phép tịnh tiến: 1  ( x*, y*,1) = ( x, y,1) ×0 a  Hay Q = P × T T ma trận phép tịnh tiến 0  0 b 1  1  T = 0 a b  0  0 1  Phép tỷ lệ: tx  ( x*, y*,1) = ( x, y,1) × 0  Hay Q = P × S S ma trận phép tỷ lệ 0  0 1  0  ty  1  ty tx  S =0 0  Phép quay quanh gốc tọa độ:  cos α  ( x*, y*,1) = ( x, y,1) ×− sin α   Hay Q = P × R R ma trận phép quay sin α cos α  cos α  R =  − sin α   0  0 1  sin α cos α 0  0 1  4.1.5 Kết hợp phép biến hình Bất kỳ phép biến hình kết hợp từ phép tịnh tiến, tỷ lệ quay Khi áp dụng liên tiếp phép biến hình đối tượng, ta phải thực nhiều phép nhân với ma trận tương ứng Thay vào đó, ta chuẩn bị sẵn ma trận tích sử dụng ma trận phép biến hình tổng thể Kết hợp phép tịnh tiến Ta thực phép tịnh tiến T1 với vector tịnh tiến (a,b) lên điểm P(x,y) thu ảnh Q’, sau thực tiếp phép tịnh tiến T2(c,d) Q’ thu Q(x*,y*) P( x, y ) T ( a→ Q' ( x' , y ' ) T ( c→ Q( x*, y*)  ,b )  ,d ) Kết hợp hay nhiều phép tịnh tiến cho kết phép tịnh tiến có ma trận tổng ma trận hành phần: T1 (a, b).T2 (c, d ) = T (a + c, b + d ) 1  0 a  b  1    ×0  c   d 0    0 =   a + c   b +d 0  0 1  Kết hợp phép tỷ lệ Tương tự phép tịnh tiến, kết hợp nhiều phép tỷ lệ phép tỷ lệ Giả sử ta kết hợp hai phép tỷ lệ sau: S = S1 S2 Ma trận kết hợp  tx1  0 0  ty1 0   tx   0 ×  1    ty1 0   tx1tx   0 =  1    ty1ty 0  0 1  Kết hợp phép quay Tương tự phép tịnh tiến, kết hợp nhiều phép quay quanh gốc tọa độ phép quay quanh gốc tọa độ Giả sử phép quay R1có góc quay α1, phép quay R2 có góc quay α2, ma trận kết hợp hai phép quay R1 R2  cos α sin α   cos α sin α   cos( α + α ) sin ( α + α )         − sin α cos α  ×  − sin α cos α  =  − sin ( α + α ) cos( α + α )    0 1    0 1    0 1  Phép quay với tâm quay Phép quay quanh tâm quay A(x,y) góc quay α phân tích thành phép biến hình sở sau: - Tịnh tiến theo vector (-x,-y) để đưa tâm quay gốc tọa độ - Quay quanh gốc tọa độ góc α - Tịnh tiến theo vector (x,y) để đưa đối tượng chỗ cũ 0   cos α sin α  1 0          ×− sin α cos α  ×  =  − x − y   0 1 x y 1       cos α sin α 0    = − sin α cos α 0  x(1 − cos α) + y sin α − sin α.x + (1 − cos α) y    Phép đối xứng Phép đối xứng trục xem phép quay 1800 quanh trục đối xứng Phép đối xứng qua trục hoành trục tung có ma trận M Ox 1  = 0 0  −1 0  , 1  M Oy  −1  = 0  0  0 1  Phép biến dạng Là phép biến hình làm thay đổi tỷ lệ kích thước, nói cách khác làm méo mó đối tượng Hai phép biến dạng là: - Phép biến dạng theo trục hoành làm thay đổi hồnh độ cịn tung độ giữ ngun - Phép biến dạng theo trục tung làm thay đổi tung độ cịn hồnh độ giữ ngun M Ox (1,3) 1  = t 0  (3,3) (1,1) (3,1) 0  , 1  M Oy (10,3) (4,1) 1  = 0 0  t 0  0 1  (12,3) (6,1) Phép biến dạng theo trục Ox, hệ số biến dạng t =3 Phép biến đổi ngược Một ví dụ cho phép biến đổi ngược thao tác Undo mà phần mềm vẽ thiết kế ln có Giả sử phép biến hình M có ma trận sau: a  M = c e  b d f 0  0 1  giả thiết ad-bc ≠ Khi phép biến đổi ngược M, ký hiệu M-1, biểu diễn sau: M −1  d  =  −c ad − bc   cf − de −b a be − af 0  0 1  -1 Gọi S (tx,ty) phép đồng dạng, S biểu diễn sau: 1   tx −1 S ( tx, ty ) =   0    0  0  1   ty Phép quay quanh gốc tọa độ R(α) có biến đổi ngược sau:  cos α  R −1 (α ) =  sin α   − sin α cos α 0   = R ( −α) 1  4.2 Các phép biến hình khơng gian chiều Hồn tồn tương tự mặt phẳng, ta sử dụng ma trận hệ tọa độ để biểu diễn phép biến hình: tịnh tiến, quay đồng dạng Phép tịnh tiến Ma trận phép tịnh tiến T(a,b,c) 1  0 T ( a, b, c ) =   a  0 b c b 0 0 c 0  0 0  1  Phép tỷ lệ Ma trận phép tỷ lệ S(a,b,c) a  0 S ( a , b, c ) =   0  0  0 0  1  a,b,c hệ số tỷ lệ tương ứng theo trục tọa độ Ox,Oy,Oz y y x x z z Phép tỷ lệ Phép tịnh tiến Phép quay Nếu mặt phẳng ta có phép quay quanh tâm quay khơng gian chiều ta có phép quay quanh trục Ký hiệu ma trận phép quay quanh trục Ox, Oy, Oz R(x,α), R(y,α), R(z,α) với α góc quay Ta có  cos α   − sin α R( z, α ) =      cos α   R( y, α ) =  sin α    sin α cos α 0 0 0  0 0  1  − sin α 0 cos α 0  0 0  1  1  0 R ( x, α ) =   0  0 cos α − sin α sin α cos α 0  0 0  1  y y x z x z Phép quay quanh trục Oy Phép quay quanh trục Ox y x z Phép quay quanh trục Oz Chú ý: trước, góc quay α có giá trị đại số Chiều quay dương xác định theo quy tắc sau: - Quay quanh trục Ox: chiều quay dương chiều quay từ trục y đến trục z - Quay quanh trục Oy: chiều quay dương chiều quay từ trục z đến trục x - Quay quanh trục Oz: chiều quay dương chiều quay từ trục x đến trục y Nói cách khác, đặt mắt nhìn thẳng vào trục tọa độ tới chiều quay dương ngược chiều kim đồng hồ Hoặc dùng quy tắc bàn tay phải: ngón chiều tới (vector pháp tuyến), bốn ngón khum lại chiều quay dương 10 readln(F2,A2,D); {có thể thử với:: 3, 1, 3.14} {thử với f1=f2, d=0: ⇒ độ lệch pha =0} End; FUNCTION Func1(X:real) : real; Begin Func1:=A1*sin(F1*x); End; FUNCTION Func2(X:real) : real; Begin Func2:=A2*sin(F2*x+D); End; FUNCTION FuncSum(X:real) : real; Begin FuncSum:=Func1(x)+Func2(x); End; PROCEDURE VeHam1; Begin Cuaso(0,2*pi,-A1,A1); TamNhin(10,getmaxX-10,3*cy,4*cy); Truc; DoDo(1,0); x:=0;mausac(white); Diem(x,Func1(x)); Repeat x:=x+Pas; Veden(x,func1(x)); Until x>=2*pi; End; PROCEDURE VeHam2; Begin Cuaso(0,2*pi,-A2,A2); TamNhin(10,getmaxX-10,2*cy,3*cy); Truc; DoDo(1,0); x:=0;mausac(Green); Diem(x,Func2(x)); Repeat x:=x+Pas; Veden(x,func2(x)); Until x>=2*pi; End; PROCEDURE VeHamTong; Begin Cuaso(0,2*pi,-A1-A2,A1+A2); TamNhin(10,getmaxX-10,0,2*cy); 30 Truc; DoDo(1,0); x:=0;mausac(Magenta); Diem(x,FuncSum(x)); Repeat x:=x+Pas; Veden(x,FuncSum(x)); Until x>=2*pi; End; BEGIN NhapSolieu; Mhdohoa; cy:=getmaxY div 4; Veham1; Cho; Veham2; Cho; VehamTong;Cho; { TamnhinDay; Cho; } Mhvanban; END Chương V Hình học Fractal I Sự cần thiết hình học Fractal Hình học ngôn ngữ đặc biệt để mô tự nhiên, hình học Euclide ngự trị thời gian dài lĩnh vực mô tả, xử lý hình dạng tự nhiên Tuy nhiên giới thực có lớp hình dạng khơng dễ dàng mơ tả hình học Euclide như: núi, mây, trời, biển Đặc tính đối tượng phóng to phần chi tiết có dạng lặp lại tồn hình, đặc tính gọi tự tương tự (self- similarity) Hình học Fractal (viết tắt Fractional – phân đoạn) đời để thích nghi với việc mơ lớp hình dạng đó: lớp hình có đặc tính “Fractal” – tự tương tự (Xem chạy thử file fractal.exe) Đường cong Fractal mô tả đường hai chiều thông thường, mặt Fractal mô tả mặt chiều mà đối tượng Fractal có thêm chiều hữu tỷ Mặc dù đối tượng Fractal trường hợp cụ thể chứa số hữu hạn chi tiết, chứa đựng chất cho phép mô tả vô hạn chi tiết, tức thời điểm xác định hữu hạn, xét tổng thể vơ hạn chất Fractal cho phép phóng đại lên mức độ chi tiết tùy ý Hiện hình học Fractal khái niệm trở thành cơng cụ trung tâm lĩnh vực khoa học tự nhiên như: vật lý, hóa học, sinh học, địa chất học, khí tượng học, khoa học vật liệu Để hiểu hình học Fractal, ta so sánh với hình học Euclide cổ điển Hình học Euclide 1) Xuất từ lâu, 2000 năm trước Hình học Fractal 1) Xuất năm 1975 (năm nhà tốn học Benoit Mandelbrot cơng bố cơng trình tập Mandelbrot) 31 2) Vật thể hình học Euclide có kích thước đặc trưng 2) Khơng có kích thước xác định 3) Thích hợp với việc mơ tả thực thể tạo người 3) Thích hợp để mô tả vật thể tự nhiên 4) Được mơ tả cơng thức (phương trình tham số, phương trình bề mặt, quỹ đạo ) 4) Được mơ tả thuật tốn lặp Hình học Euclide cho mơ tả gọn gàng, xác vật thể tạo người (khối lập phương, mặt trụ, mặt cầu ) khơng thích hợp dùng để mơ tả hình dạng tự nhiên địi hỏi khối lượng tính tốn (số bậc phương trình, ố lượng biến ) cồng kềnh mà khơng xác Cịn mơ tả hình học Fractal (các thuật lặp) lại đặc biệt thích hợp với việc tạo sinh máy tính Thực thể Fractal kết trình lặp theo thuật toán xác định, tạo sinh lý tưởng máy tính khó tạo cách thủ công II Một số khái niệm Các thực thể Fractal có đặc tính quan trọng: • Tự tương tự (self-similarity) • Tự tương tự đa phần (statistical self-similarity) • Tự Affine Chúng ta khảo sát đặc tính quan trọng nhất: đặc tính tự tương tự (selfsimilarity) Một thực thể có đặc tính tự tương tự hợp N tập không giao nhau, tập tạo sinh từ tập gốc qua phép biến đổi như: co dãn, dịch chuyển, quay Phát biểu cách hình thức hơn, xét tập S gồm điểm: x = (x1, x2, xE) không gian E chiều Dưới phép đồng dạng với hệ số co < T < 1, tập S biến thành tập TS với điểm: Tx = (Tx1, Tx2, TxE) Tập S tự tương tự S hợp N tập không giao nhau, tập tương đương với TA (có thể sai khác phép tịnh tiến, quay vị tự) Khi số chiều S định nghĩa log N log T D= Tập S gọi tự tương tự tập tạo sinh từ tập gốc theo hệ số co Ti khác Trong trường hợp số chiều D tính từ cơng thức sau N ∑T i =1 i D =1 III Ví dụ minh họa Ta xét ví dụ minh họa tính tự tương tự thực thể Fractal kinh điển: đường Von-Koch Đường Von- Koch (cịn gọi “Bơng hoa tuyết Von-Koch” Wikipedia) đường Fractal cơng bố sớm nhất, vào năm 1904 nhà tốn học Thụy Điển Helge Von Koch Thuật toán lặp cho đường Von-Koch gồm bước sau: a) Một đoạn thẳng cho trước chia làm phần 32 b) Đoạn thay đoạn có chiều dài tương đương c) Mỗi đoạn số đoạn lại thay đoạn có chiều dài 1/3 đoạn trước d) Quá trình lặp lại a) b) c) Đặc điểm đường Von-Koch 33 • Đường cong có tính tự tương tự, phần nhỏ phóng to tạo sinh lại giống phần lớn hơn, nói cách khác bất biến phóng to hình • Qua bước lặp, độ dài đường von-Koch tăng lên 4/3 lần • Đường cong (sau vơ hạn bước) có độ dài vơ hạn chiếm phần diện tích hữu hạn mặt phẳng • Khơng tự cắt • Thuật tốn tạo sinh đường Von-Koch đơn giản, khơng có cơng thức đại số để xác định điểm đường cong • Số chiều đường Von-Koch hữu tỷ: D= log N log(4) = ≈ 1,26   log(3) log  T  D phản ánh mức độ lan tỏa đường cong Khi D biến thiên từ đến 2, đường cong biến thiên từ đường thẳng lan dần đến lấp đầy mặt phẳng Số bước lặp 10 25 50 100 Độ dài phân đoạn Số phân đoạn Tổng chiều dài đường Koch 1 1.00 1/3 1.33 1/9 16 1.77 1/27 64 2.37 1/81 256 3.16 1/243 1024 4.21 1/19683 262144 13.31 1/2.82e+11 2.81e+14 996.62 1/2.39e+23 3.17e+29 1324335.72 1/1.71e+47 4.02e+59 2338486807656.00 34 Chương trình vẽ đường Von-Koch { Vẽ đường Von Koch giáp tạo thành hình tuyết} Uses crt,graph; { hệ số đổi từ độ sang radian } Const RADS = 0.017453293; Var i,gd,gm:integer; temp:real; Procedure Koch(dir:integer; len:real; n:integer); Begin if (n>0) then begin Koch(dir, len / 3, n-1); dir := dir + 60; Koch(dir, len / 3, n-1); dir := dir - 120; Koch(dir, len / 3, n-1); dir := dir + 60; Koch(dir, len / 3, n-1); end else linerel(round(len * cos(RADS * dir)), round(len * sin(RADS * dir))); End; Begin gd:=detect; initgraph(gd,gm,''); 35 for i:=1 to begin setcolor(White); rectangle(0, 0, getmaxx, getmaxy); moveto(100,350); Koch(0, 420 , i); setcolor(blue); Koch(-120, 420 , i); setcolor(yellow); Koch(120, 420 , i); readln; cleardevice; end; closegraph; End Đường Hilbert nhà toán họa Đức David Hilbert cơng bố năm 1891 Độ dài bước lặp thứ n Ln = n − 2n tức độ dài tăng theo hàm mũ n 36 Cả quy tắc (rules) thực chất Quay 900 Chương trình vẽ đường Hilbert {Vẽ đường Hilbert} Uses Crt,Graph; Var gd,gm,h:integer; Procedure A (i:integer);FORWARD; Procedure B (i:integer);FORWARD; Procedure C (i:integer);FORWARD; Procedure D (i:integer);FORWARD; Procedure A(i:integer); Begin if (i>=0) then Begin D(i-1); linerel(-h, 0); A(i-1); linerel(0, -h); A(i-1); linerel(h, 0); B(i-1); End; End; 37 Procedure B(i:integer); Begin if (i>=0) then Begin C(i-1); linerel(0, h); B(i-1); linerel(h, 0); B(i-1); linerel(0, -h); A(i-1); End; End; Procedure C(i:integer); Begin if (i>=0) then Begin B(i-1); linerel(h, 0); C(i-1); linerel(0, h); C(i-1); linerel(-h, 0); D(i-1); End; End; Procedure D(i:integer); Begin if (i>=0) then Begin A(i-1); linerel(0, -h); D(i-1); linerel(-h, 0); D(i-1); linerel(0, h); C(i-1); End; End; Procedure Hilbert; Var i:integer; Begin for i:=0 to begin h:= 30 - * i; moveto(getmaxx - 130, getmaxy - 50); A(i); readln; cleardevice; end; End; Begin gd:=detect; 38 initgraph(gd,gd,''); setcolor(YELLOW); rectangle(0, 0, getmaxx, getmaxy); Hilbert; closegraph; End Chương trình vẽ Nhân sư (Sphinx) { Vẽ nhân sư Sphinx } Uses Crt,Graph; { hệ số đổi từ độ sang radian } Const RADS = 0.017453293; Var curangle,curx, cury:real; gd,gm:integer; Procedure lineforward(angle, length:real); Begin curangle :=curangle+ angle; curx := curx + length*cos(curangle*RADS); cury := cury + length*sin(curangle*RADS); lineto(round(curx), round(cury)); End; Procedure moveforward(angle,length:real); 39 Begin curangle := curangle + angle; curx := curx + length*cos(curangle*RADS); cury := cury + length*sin(curangle*RADS); lineto(round(curx), round(cury)); End; Procedure Sphinx(angle, length: real; level,leftright:integer); Var len4, len2, len1, oldx, oldy, oldangle: real; Begin if (leftright0) then Begin if (level = 0) then begin len1 := length / 3; lineforward(angle, length); lineforward(-120,len1*2); lineforward(-120,len1); lineforward(+60,len1); lineforward(-60,len1); end else begin Sphinx(angle, length, 0, leftright); len4 := length / 4; Sphinx(240, len4, 0, 1); moveforward(240, len4); Sphinx(0, len4, 0, 1); moveforward(240, len4); Sphinx(0, len4, 0, 1); moveforward(240, len4); Sphinx(0, len4, 0, 1); moveforward(240, len4); moveforward(-120, len4*2/3); Sphinx(0, len4, 0, 0); moveforward(240, len4); Sphinx(0, len4, 0, 0); moveforward(-180, len4*2/3); Sphinx(-120, len4, 0, 0); moveforward(240, len4/3); Sphinx(-240, len4, 0, 1); moveforward(240, len4); Sphinx(0, len4, 0, 1); moveforward(240, len4); Sphinx(-60, len4, 0, 0); moveforward(-180, len4*2/3); lineforward(-60, len4); 40 moveforward(60, len4/3); moveforward(-120, len4); Sphinx(-180, len4, 0, 0); end; end else begin if (level = 0) then begin len1 := length / 3; lineforward(angle, length); lineforward(-120,len1); lineforward(-60,len1); lineforward(60,len1); lineforward(-120,len1*2); end else begin Sphinx(angle, length, 0, leftright); len4 := length / 4; end; end; End; Begin curangle := 0.0; gd:=detect; initgraph(gd,gm,''); moveto(10, 470); curx := 10; cury := 470; Sphinx(0, 600, 1, 1); readln; closegraph; End Chương trình vẽ Phong cảnh (Fractal.exe) Uses crt,graph; Const CLIP_ON = 1; Var n,c,t,mau:integer; hs,go:real; i,gd,gm:integer; ch:char; Function dau:integer; Begin 41 if (random(2) = 0) then dau:= -1 else dau:= 1; End; Procedure cay(x,y:integer; h,g,gw:real; k:integer); Var x1,y1,i,j,d,leaf,c:integer; dg,tt:real; Begin if (k > 0) then for j:= to (random(t) + t) begin x1:= x + round(h * cos(g)); y1:= y + round(h * sin(g)); setcolor(DARKGRAY); for i:= to round((h/35)*(h/35)) begin line(x + i, y, x1 + i, y1); delay(10); {Ve cay cham de quan sat } for d:= to round((h/5)) begin tt:= random(1); putpixel(round((1-tt)*x+tt*x1+i), round((1-tt)*y+tt*y1), LIGHTGRAY); end; end; dg := gw/(2*n+1); for i:= -n to n if (random(1000)*0.001 > 0.5) then cay(x1,y1,h*(0.5+(random(1000)*0.001)/3),g+i*dg,gw*hs,k-1); x := x1; y := y1; g := g + PI/18; end else begin setfillstyle(1,random(15)); setcolor(random(15)); for leaf:= to fillellipse(x+random(8)*dau,y+random(5)*dau,random(5)+2,random(2)+1); for leaf:= to 70 begin case leaf of 20: begin putpixel(x+random(15)*dau,y+random(5)*dau,BLUE); 42 break; end; 21 25: begin putpixel(x+random(15)*dau,y+random(5)*dau,LIGHTBLUE); break; end; 26 49: begin putpixel(x+random(15)*dau,y+random(5)*dau,LIGHTGREEN); break; end; End; End; End; End; Procedure cloud(x,y:integer; Rx,Ry:real; k:integer); Var i:integer; Begin if (k > 0) then for i:= to cloud(x+random(round(Rx)),y+random(round(Ry)),Rx*0.8,Ry*0.6,k-1) else for i:= to round(sqrt(Rx*Ry)/3.5) putpixel(x+random(round(Rx)),y+random(round(Ry)),WHITE); End; Procedure phong; Var l,i:integer; Begin l := (getmaxy div 7) * 5; mau:=random(15); setfillstyle(1,mau); bar(0,0,getmaxx,l); setfillstyle(1,LIGHTGRAY); bar(0,l,getmaxx,getmaxy); for i:= to 20000-1 case (random(8)) of 4: begin putpixel(random(getmaxx),l+random(getmaxy-l),GREEN); break; end; 5,6: begin putpixel(random(getmaxx),l+random(getmaxy-l),YELLOW); 43 break; end; 7: begin putpixel(random(getmaxx),l+random(getmaxy-l),LIGHTRED); break; end; end; if (mauRED) then Begin if (mauBLACK) then begin setfillstyle(1,RED); setcolor(RED); end; end else begin setfillstyle(1,YELLOW); setcolor(YELLOW); end; fillellipse(random(getmaxx div 2)+300,100,30,30); for i:= to cloud(random(getmaxx),random(150)+10,random(60)+60,random(40)+20,5); End; BEGIN randomize; gd:=detect; initgraph(gd,gm,''); setviewport(0,0,getmaxx,getmaxy,CLIPON); repeat n := 1; hs := 1.2; go := PI /2.8; t := 2; phong; cay(((getmaxx-100) div 5)+random(60),(getmaxy div 7)*6 +random(30)*dau,getmaxy div 6,-PI/2,go,5); ch:=readkey; until (ch=#27); closegraph; END 44 ... lĩnh vực khoa học tự nhiên như: vật lý, hóa học, sinh học, địa chất học, khí tượng học, khoa học vật liệu Để hiểu hình học Fractal, ta so sánh với hình học Euclide cổ điển Hình học Euclide 1)... 0  0 1  Phép biến dạng Là phép biến hình làm thay đổi tỷ lệ kích thước, nói cách khác làm méo mó đối tượng Hai phép biến dạng là: - Phép biến dạng theo trục hoành làm thay đổi hồnh độ cịn... (12,3) (6,1) Phép biến dạng theo trục Ox, hệ số biến dạng t =3 Phép biến đổi ngược Một ví dụ cho phép biến đổi ngược thao tác Undo mà phần mềm vẽ thiết kế ln có Giả sử phép biến hình M có ma trận

Ngày đăng: 15/01/2013, 10:53

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan