MỘT SỐ KỸ THUẬT CÀI ĐẶT HèNH HỌC PHÂN HèNH

Một phần của tài liệu Tổng quan về kỹ thuật đồ họa (Trang 151)

Trong phần này chỳng ta sẽ cựng nhau thảo luận cỏc fractal được phỏt sinh bằng cỏch sử

dụng đệ qui initiator / generator với kết quả là cỏc hỡnh tựđồng dạng hoàn toàn. Cỏc hỡnh này cú số chiều tự đồng dạng, số chiều fractal và số chiều Hausdorff-Besicovitch bằng nhau.

Số chiều được tớnh theo cụng thức sau:

Trong đú:

N: Là sốđoạn thẳng.

R: Là số chiều dài của mỗi đoạn.

Chỳng ta bắt đầu bằng một initiator, nú cú thể là một đoạn thẳng hay một đa giỏc. Mỗi cạnh của initiator được thay thế bởi một generator, mà là tập liờn thụng của cỏc đoạn thẳng tạo nờn bằng cỏch đi từ điểm bắt đầu đến điểm cuối của đường thay thế (Thụng thường cỏc điểm của generator là một lưới vuụng hay một lưới tạo bởi cỏc tam giỏc đều). Sau đú mỗi đoạn thẳng của hỡnh mới được thay thế bởi phiờn bản nhỏ hơn của generator.

⎟ ⎠ ⎞ ⎜ ⎝ ⎛ = R N D 1 log ) log(

Quỏ trỡnh này tiếp tục khụng xỏc định được. Sau đõy là một số đường Von Kock quan trọng.

9.2.1.1. Đường hoa tuyết VON KOCK-NOWFLAKE:

Đường hoa tuyết được xõy dựng bởi nhà toỏn học Helge Von Kock vào năm 1904. Ởđõy chỳng ta bắt đầu với initiator là một đoạn thẳng. Cũn generator được phỏt sinh như sau:

Hỡnh 9.1 Generator của đường von kock

Chỳng ta chia đoạn thẳng thành ba phần bằng nhau. Sau đú thay thế một phần ba

đoạn giữa bằng tam giỏc đều và bỏ đi cạnh đỏy của nú. Sau đú chỳng ta lặp lại quỏ trỡnh này cho mỗi đoạn thẳng mới. Nghĩa là chia đoạn thẳng mới thành ba phần bằng nhau và lặp lai cỏc bước như trờn.

Ta thấy quỏ trỡnh xõy dựng là tựđồng dạng, nghĩa là mỗi phần trong 4 phần ở bước thứ k là phiờn bản nhỏ hơn 3 lần của toàn bộđường cong ở bước thứ (k–1).

Như vậy mỗi đoạn thẳng của generator cú chiều dài R = 1/3 (giả sử chiều dài đoạn thẳng ban đầu là 1) và số đoạn thẳng của generator N = 4. Do vậy số chiều fractal của

đường hoa tuyết là:

Để viết một đoạn mó cho việc phỏt sinh ra đường hoa tuyết, chỳng ta cần phải trỡnh bày vềđồ hoạ con rựa (turtle graphic).

Chẳng hạn sau đõy là một minh hoạ cho hỡnh vẽ trỡnh bày ở mức 3 của đường Von Kock-Snowflake.

Hỡnh 9.2 Đường Von Kock-Snowflake mức 3

9.2.1.2. ĐƯỜNG VON KOCK-GOSPER:

Một dạng khỏc của đường Von Kock được phỏt hiện bởi W.Gosper. Trong đường mới này, initiator là một lục giỏc đều và generator chứa ba đoạn nằm trờn một lưới của cỏc tam giỏc đều. Hỡnh sau cho chỳng ta thấy generator bố trớ trờn lưới:

2618 , 1 3 log 4 log 1 log ) log( = ≈ = ⎟ ⎠ ⎞ ⎜ ⎝ ⎛ R N D

Hỡnh 9.3 dạng của đường Von Kock

Ta thấy đường này cú chỳt khỏc biệt so với đường hoa tuyết ở chổđoạn thẳng được thay thế khụng nằm trờn bất kỳ cỏc đường nào của lưới.

Để tớnh số chiều fractal của đường Gosper trước hết ta tớnh chiều dài mỗi đoạn của generator. Giả sử chiều dài từđầu mỳt của generator đến đầu mỳt khỏc là 1.

Đặt: (adsbygoogle = window.adsbygoogle || []).push({});

AC = R => AE = 3AC = 3R

AB2 = AE2 + EB2 – 2AE.EB.Cos(600) Ta cú:

Mà AB = 1, AE = 3R, EB = AC = R

Vỡ N = 3 nờn số chiều fractal của đường Gosper là:

Hỡnh sau là mức đầu tiờn của đường Gosper. ' 1 19 94491 0 14 7 5 7 1 6 7 1 8 1 6 8 1 1 3 2 9 1 2 cos cos 2 7 1 7 2 / 3 2 9 1 0 2 2 2 2 2 2 2 2 2 2 2 2 ≈ ⇒ ⋅ ≈ = + = + = ∗ ∗ − + = − + = ⇒ − + = = ⇒ = ∗ ∗ − + = ⇒ α α α R R R R R AEAB EB AE AB AEAB AB AE EB R R R R R R 1291 . 1 7 log 3 log ≈ = D

Hỡnh 9.4 đường Gosper

Đoạn mó đối với đường Gosper giống nhưđoạn mó của đường hoa tuyết, trong đú: NumLines = 3

Mảng Angle cú giỏ trị sau: {19.1, -60.0 }

Ngoài ra, đường Gosper cú cỏc mức khỏc nhau thỡ tương ứng với cỏc hỡnh dạng khỏc nhau.

Hỡnh sau là mức 3 của đường Gosper.

Hỡnh 9.5 Đường Gosper ở mức 3.

9.2.2. Đường SIERPINSKI

Đường Sierpinski được trỡnh bày sau đõy là một đường cong rất đặc biệt, bởi vỡ cú rất nhiều cỏch phỏt sinh ra nú với cỏc khởi động ban đầu hoàn toàn khỏc nhau nhưng lại kết thỳc ở việc sinh ra một loại đường cong duy nhất.

Chỳng ta đó quen với phương phỏp đầu tiờn để phỏt sinh ra tam giỏc Sierpinski bằng cỏch sử dụng kỹ thuật initiator / generator được mụ tả ở cỏc phần trước. Đối với đường này, initiator là một đoạn thẳng.

Generator đối với đường cong này và cỏc đường được sinh ra ở mức 1, 2 và 3 được minh hoạ như sau:

Hỡnh 9.7 Generator của tam giỏc Sierpinski Mức 1

Hỡnh 9.8 Mức 3

Và đõy là đường Sierpinski ở mức 4 và 8:

Hỡnh 9.9 Mức 4 và 8

Để phỏt sinh ra đường này ta dựng kỹ thuật giống như cỏc đường họ Von Kock và Peano.

9.3. CÂY FRACTAL

Trong cỏc phần trước, chỳng ta đó tạo ra cỏc đường fractal bằng cỏch thay thế một cỏch lặp lại của cỏc đoạn thẳng với cỏc mẫu thu nhỏ của một generator mẫu, kết quả là cỏc

đường cú tớnh tựđồng dạng. Bõy giờ, chỳng ta sẽ tạo ra đường cong theo một hướng khỏc. Chỳng ta sẽ bắt đầu với một thõn cõy tại đầu mỳt của nú chỳng ta tỏch thõn cõy thành hai hướng và vẽ hai nhỏnh. Chỳng ta sẽ lặp lại quỏ trỡnh này tại cỏc đầu mỳt của mỗi nhỏnh. Kết quả chỳng ta sẽđược một cõy. Trước khi chỳng ta biểu diễn cỏc cõy tự nhiờn, đầu tiờn chỳng ta thảo luận vài điều về cỏc cõy thực tế.

9.3.1. CÁC CÂY THỰC TẾ:

Chỳng ta phỏc thảo quỏ trỡnh tạo cõy được cho ở trờn. Tại mỗi nỳt trong quỏ trỡnh tạo cõy, chỳng ta tỏch làm hai hướng. Kết quả ta được một cõy hai chiều. Chỳng ta hy vọng nú cú một số quan hệ với cõy thực tế 3 chiều. Trước khi đi xa hơn, chỳng ta quan sỏt một vài cõy tự nhiờn. Đầu tiờn, cú hai lớp cõy là lớp cõy rụng lỏ (deciduous) mỗi năm và lớp cõy tựng bỏch (conifers). Hai lớp cõy này hoàn toàn khỏc nhau. Cõy tựng bỏch cú khuynh hướng cú cỏc vũng của cỏc nhỏnh ở tại cỏc độ cao khỏc nhau vũng quanh trung tõm của

thõn cõy. Điều này dường như khụng thớch hợp với tất cả cỏc quỏ trỡnh rẽ nhỏnh nhị phõn và chỳng ta sẽ thấy cỏc cõy sau đõy do chỳng phỏt sinh khụng bao giờ giống với cõy tựng bỏch thật sự.

Thứ hai, đối với cõy rụng lỏ mặc dự sự xuất hiện của chỳng rất gần với mụ hỡnh của chỳng ta, thế nhưng vẫn cũn rất nhiều phức tạp trong cấu trỳc của chỳng. Trong khi đú, việc rẽ nhỏnh nhị phõn thường cú qui luật và đơn giản hơn nhiều, chỉ ngoại trừ một vài thõn cõy cú khả năng tỏch ra nhiều hơn hai nhỏnh.

9.3.2. BIỂN DIỄN TOÁN HỌC CỦA CÂY:

Theo Leonardo da Vinci quan sỏt, kết quả đú là do tổng số cỏc vựng cắt ngang của cỏc nhỏnh cõy ở một độ cao cho trước là hằng số. Điều này khụng gõy ngạc nhiờn vỡ cõy đũi hỏi chuyển dinh dưỡng từ gốc đến lỏ và cho trước một lượng dinh dưỡng, một người nghĩ (adsbygoogle = window.adsbygoogle || []).push({});

rằng thiết diện cần thiết cho sự vận chuyển sẽ khụng đổi bất kể chiều cao hay sốống dẫn. Khi chỳng ta chuyển sự quan sỏt này vào cỏc đường kớnh (hay cỏc chiều rộng khi chỳng ta vẽ thành cõy hai chiều ) thỡ chỳng ta cú được biểu thức sau:

Ởđõy D0, D1, D2 là đường kớnh của hai nhỏnh chia cõy làm đụi, α = 2 theo da Vinci. Do đú cỏc dạng cỏc dạng cấu trỳc giống cõy, mụ hỡnh đơn giản được cho ở trờn cú khả

năng ỏp dụng cho cỏc hệ thống sụng tốt hơn cỏc cõy, vỡ thường cú nhiều hơn hai con sụng nhỏnh của một hệ thống sụng sẽ nối với nhau ở cựng một nơi. Cỏc cõy khỏc được tỡm thấy trong cơ thể con người là hệ thống động mạch và cuống phổi dựng để vận chuyển mỏu và oxy, trong đú αđối với hệ thống cuống phổi là 3 và đối với động mạch là 2.7.

Khi chỳng ta xõy dựng cõy chỳng ta sẽ sử dụng biểu thức:

(a)

Ởđõy Bn là đường kớnh của nhỏnh ở mức thấp hơn. Bn+1 biểu diễn đường kớnh mỗi nhỏnh con khi Bn tỏch thành hai nhỏnh.

Chỳng ta cũng cần xem xột chiều dài mỗi nhỏnh. McMahon nghiờn cứu cỏc loại cõy kiểu mẫu khỏc nhau và đưa ra cụng thức như sau cho chiều dài:

(b)

Với Ln là chiều dài của nhỏnh trước đú và Ln+1 chiều dài của mỗi nhỏnh trong hai nhỏnh kế sau khi nhỏnh trước đú được tỏch ra làm hai.

Để tạo thành một cõy, ởđõy chỳng ta sử dụng đồ hoạ con rựa. Gọi:

(X,Y) là toạđộ của gốc cõy.

Height, Width là chiều cao và chiều rộng của cõy.

α α α 2 1 0 D D D = + n B n B 2α1 1 − = + n L n L 23α2 1 − = +

Letf_Alpha, Right_Alpha là gúc Alpha bờn trỏi và gúc Alpha bờn phải. Left_Angle, Right_Angle là gúc rẽ bờn trỏi và gúc rẽ bờn phải của nhỏnh. Level là mức của cõy.

Color1 là màu của thõn cõy. Color2 là màu của tước cõy. Color3 là màu của lỏ cõy. Thuật toỏn:

(i) Tớnh cỏc hệ số:

+ Chiều rộng trỏi và phải theo cụng thức (a).

Left_Width_Factor = pow (2, -1.0 / Left_Alpha ); Right_Width_Factor = pow (2, -1.0 / Right_Anpha ); + Chiều cao trỏi và phải theo cụng thức (b)

Left_Height_Factor = pow (2, -2.0 / (3 * Left_Alpha)); Right_Height_Factor = pow (2, -2.0 / (3 * Right_Alpha)); (ii) Xỏc định toạđộ ngọn của thõn cõy:

X1 = X;

Y1 = Y + Height;

(iii) Vẽ thõn cõy từ (X, Y) đến (X1, Y1) với màu Color1 và chiều rộng là Width. DrawLine (X, Y, X1,Y1, Color1, Width);

(iv) Phỏt sinh nhỏnh bờn trỏi:

Xỏc định gốc giữa thõn cõy và trục x (tức là gúc của con rựa) Turtle_Theta = Point (X, Y, X1, Y1);

Quay con rựa về phớa bờn trỏi một gúc Left Turn (Left_Angle, &Turtle_Theta);

Sau đú gọi hàm Generator để phỏt sinh ra nhỏnh bờn trỏi.

Generator (X1, Y1,Left_Width_Factor * Width, Left_Height_Factor * Height, Level);

v) Phỏt sinh bờn nhỏnh bờn phải:

a) Xỏc định gốc giữa thõn cõy và trục x (tức là gúc của con rựa) Turtle_Theta = Point (X, Y, X1, Y1);

b) Quay con rựa về phớa phải một gúc Right_Angle Turn (-Right_Angle, &Turtle_Theta); (adsbygoogle = window.adsbygoogle || []).push({});

c) Sau đú gọi hàm Generator để phỏt sinh ra nhỏnh bờn phải

Generator (X1, Y1, Right_Width_Factor * Width, Right_Height_Factor * Height, Level);

Generator (float X, float Y,float Width, float Height, unsigned char Level){ (i) Xỏc định vị trớ con rựa hiện tại và chiều dài một bước của con rựa Turtle_X = X;

Turtle_Y = Y; Turtle_R = Height;

(ii) Xỏc định ngọng của tước mới phỏt sinh và giảm mức đi một đơn vị. Step (&Turtle_X, &Turtle_Y, Turtle_R, Turtle_Theta);

X2 = Turtle_X; Y2 = Turtle_Y; Level--;

(iii) Vẽđoạn thẳng từ (X, Y) đến (X2, Y2) với độ rộng là Width và màu được xỏc định như sau:

+ Nếu Level < 3 thỡ màu hiện thời là Color2. + Nếu Level >= 3 thỡ màu hiện thời là Color3. If (Level < 3)

DrawLine (X, Y, X2, Y2, Width, Color2); Else

DrawLine (X, Y, X2, Y2, Width, Color3);

iv) Nếu Level > 0 thỡ chỳng ta tiếp tục phõn làm hai nhỏnh trỏi và phải. if (Level > 0){

Turtle_Theta = Point(X, Y, X2, Y2); Turtle (Left_Angle, &Turtle_Theta);

Generator (Turtle_X, Turtle_Y, Left_Width_Factor * Width, Left_Height_Factor * Height, Level )

Turntle_Theta = Point (X, Y, X2, Y2); Turn (- Right_Angle, &Turtle_Theta);

Generator (X2, Y2, Right_Width_Factor * Width, Right_Height_Factor * Height, Level);

} }

Sau đõy là hỡnh minh hoạ một cõy fractal với Level = 14, Height = 80, Width = 20, Left_Alpha = 2.0, Right_Alpha = 2.2, Left_Angle = 20, Right_Angle = 28.

Hỡnh 9.10 Minh hoạ cõy Fractal 9.4. TP MANDELBROT

9.4.1. Đặt vấn đề

Trong nhiều thập niờn của thế kỷ XX, cỏc nhà toỏn học đó để tõm nghiờn cứu đến một loại biểu thức phức tạp xỏc định bởi:

zn+1 = zn2 + c, trong đú zi∈ C, ∀i ∈ N & c ∈ C (1)

Đểđơn giản hoỏ vấn đề, trước hết ta xột trường hợp c = 0 và z0 ∈ R. Khi đú cú 3 trường hợp sau:

+ z0 = 1 : khi đú zn = 1, ∀n ≥ 1. + z0 < 1 : khi đú zn → 0 khi n →∞. + z0 > 1 : khi đú zn→∞ khi n →∞.

Ởđõy tốc độ tiến đến 0 hay tiến đến ∞ của dóy (zn) được quyết định bởi giỏ trị ban

đầu z0 của dóy. Trong trường hợp z0 < 1, giỏ trị z0 càng nhỏ thỡ dóy (zn) tiến đến 0 càng nhanh. Ngược lại khi z0 > 1, giỏ trị z0 càng lớn thỡ dóy (zn) càng tiến nhanh ra ∞.

Trong trường hợp tổng quỏt, dóy (zn) được xỏc định bởi cụng thức (1) ở trờn rất khú khảo sỏt về mặt lý thuyết. Chỉđến năm 1979, Mandelbrot mới thành cụng trong việc quan sỏt dóy này với sự hỗ trợ của mỏy tớnh điện tử. Kết quảđược Mandelbrot quan sỏt thấy là một trong những cấu trỳc fractal phức tạp và đẹp. Nú đó được đặt tờn Mandelbrot để ghi nhớ cụng lao của tỏc giả, người đó khai sinh ra lý thuyết hỡnh học phõn hỡnh.

9.4.2. CễNG THỨC TOÁN HỌC

Ký hiệu zn = ( xn , yn), c = (p,q), trong đú:

xn = Re(zn), p = Re(c), yn = Im(zn), q = Im(c), ∀n ≥ 0 thỡ hệ thức truy hồi xỏc định ở

(1) cú thểđược viết lại theo dạng đơn giản hơn như sau: xn+1 = xn2 – yn2 + p (adsbygoogle = window.adsbygoogle || []).push({});

yn+1 = 2xn .yn + q (2)

Tớnh chất về sự hội tụ của dóy (zn):

Nếu tồn tại k ∈ N sao cho | zk | > 2 thỡ dóy (zn) hội tụđến vụ cực.

Nếu tồn tại k ∈ N sao cho | zt | < 2, ∀t : k ≤ t ≤ 1, với 1 là hằng số hữu hạn thỡ cũng cú | zn | < 2, ∀n ≥ k. (Ký hiệu | z | chỉ modul của số phức z).

9.4.3. THUẬT TOÁN THỂ HIỆN TẬP MANDELBROT

9.4.3.1. Xõy dng thut toỏn:

Tập Mandelbrot là hỡnh ảnh của dóy (zn), với giỏ trị khởi đầu z0 = 0. Khi đú màn hỡnh mỏy tớnh sẽ chuyển đổi thành một mặt phẳng phức thu hẹp với:

Trục x biểu diễn phần thực của số phức c (giỏ trị p được nờu ở phần 2/). Trục y biểu diễn phần ảo của số phức c (giỏ trị q được nờu ở phần 2/).

Từ tớnh chất về sự hội tụ của dóy (zn) ở phần 2 chỳng ta cú thể chia tập cỏc giỏ trị

của c trờn mặt phẳng phức thành 2 lớp: Lớp 1:

Gồm cỏc giỏ trị c làm cho dóy (zn) khụng tiến ra vụ cực mà được giới hạn trong một vũng trũn bỏn kớnh 2. Một cỏch cụ thể, đú là cỏc giỏ trị c sao cho khi xuất phỏt từ chỳng, ta luụn cú | zi | < 2, ∀i = 1, 2, …, l, trong đú l do ta chọn trước. Để ý là giỏ trị l càng lớn thỡ tớnh hội tụ của dóy (zn) tương ứng với một giỏ trị cụ thể càng được kiểm tra chặt chẽ và chớnh xỏc. Tuy nhiờn khi đú thời gian tớnh toỏn để xỏc định tớnh hội tụ sẽ tăng lờn gấp nhiều lần.

Lớp 2:

Gồm cỏc giỏ trị phức c làm cho dóy (zn) hội tụ về vụ cực. Cụ thể đú là cỏc giỏ trị c khởi đầu dẫn đến | zn | > 2 ở một ngưỡng k hữu hạn nào đú.

Vấn đề đặt ra ở đõy là cần quan sỏt tớnh hỗn độn của dóy (zn). Do đú chỳng ta tập trung cỏc quan sỏt vào cỏc giỏ trị c thuộc lớp 2. Muốn như vậy cỏc giỏ trị này phải được thực hiện một cỏch nổi bật trờn màn hỡnh mỏy tớnh bởi cỏc màu khỏc nhau. Chỳng ta sẽ tụ màu mặt phẳng phức màn hỡnh theo qui tắc sau:

Cỏc giỏ trị c thuộc lớp 1 được tụ màu đen vỡ khụng cú tớnh chất gỡ đỏng chỳ ý. Cỏc giỏ trị c thuộc lớp 2 được tụ bằng cỏc màu khỏc nhau ứng với cỏc ngưỡng tiến ra vụ hạn k khỏc nhau. Do số lượng màu cú thể hiển thị trờn một màn hỡnh đồ hoạ

là hữu hạn, việc tụ màu cỏc giỏ trị này sẽđược thực hiện theo kỹ thuật tụ màu xoay vũng được chỉ ra ở cỏc phần tiếp sau đõy.

9.4.3.2. Thut toỏn tng quỏt để th hin tp Mandelbrot:

Thuật toỏn gồm cỏc bước sau: Bước 1:

Xuất phỏt với một giỏ trị khởi đầu c = (p,q). Bước 2:

Kiểm tra c thuộc lớp 1 hay lớp 2. Bước 3:

Nếu c thuộc lớp 1 thỡ tụ điểm ảnh tương ứng với c trờn màn hỡnh bằng màu đen, ngược lại tụ điểm ảnh này bởi màu tương ứng xỏc định từ kỹ thuật tụ xoay vũng.

Một phần của tài liệu Tổng quan về kỹ thuật đồ họa (Trang 151)