Đệ quy cùng hình học

2 637 2
Đệ quy cùng hình học

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

Thông tin tài liệu

Đệ quy cùng hình học

Cung được đĩnh nghĩa đệ quy, quy tắc và cách vẽPhạn Xuân BáchCung là một đối tượng cơ bản trong đồ học vi tính. Cung cho ta những hình ảnh đơn giản nhưng khá bắt mắt (trừ những khung phức tạp như Fratal). Các cung thường có quy tắc và được định nghĩa dưới dạng tham số hay đệ quy.ở đây chúng ta chỉ xét các cung được định nghĩa đệ quy. Cũng có thể bạn không hứng thú lắm với hình ảnh các cung nhưng mình nghĩ thuật toán để vẽ có thể giúp ích được cho bạn trong khi lập trình đấy. Chúng ta xét 4 cung cơ bản là cung koch, cung C, cung Hilbel và cung Sierpinski. 1. Cung Koch Cung này được nhà toán học Helge von Koch tìm ra năm 1904, nó có thể tạo ra một đường dài vô hạn trong một vùng hữu hạn. Nó được định nghĩa như sau: Từ một đoạn thẳng ban đầu, nó được thay thế 4 đoạn thẳng có cùng chiều dài và bằng 1/3 chiều dài đoạn thẳng ban đầu. Cách bố trí như hình vẽ.(hình) Đó là cung Koch bậc 1. Để vẽ cung Koch bậc 2 ta thay mỗi đoạn của cung Koch bậc 1 theo quy tắc đó. Cũng theo quy tắc đó cho mỗi đoạn của cung Koch bậc n-1, ta có cung bậc n. Đây là thuật giải để vẽ. Procdure Koch(dir, len:real; n: byte); Const rads=0,017453292; {pi/180} Begin If n>0 then Begin Koch(dir,len/3,n-1);{đoạn 1} Koch(dir+60,len/3,n-1);{đoạn 2} Koch(dir-60,len/3,n-1);{đoạn 3} Koch(dir,len/3,n-1);{đoạn 4} End ElseLineRel(Round(len*cos(Rads*dir)),-Round(len*sin(Rads*dir))); End; Với dir,len là hướng (góc) và độ dài ban đầu; n: độ sâu của đệ quy. Một đoạn thẳng bất kỳ có thể vẽ được thành cung Koch. Chúng ta có thể vẽ cung Koch cho các cạch của một đa giác bất kỳ miễn là biết được đỉnh, góc bắt đầu và độ dài của một cạnh. Bằng hình học giải tích vectơ, bạn có thể biết được những yếu tố đó nhưng phải quy ước chiều quay của các cạnh là cùng chiều với kim đồng hồ. Và lúc đó bạn sửa tham số thế nào cho hợp? Đây là đoạn chương trình vẽ cung Koch trên ba cạnh của tam giác đều với đỉnh đầu là (xs,ys), độ dài len theo phương có góc bắt đầu là As Procedure UDKoch(xs,ys:integer;As,len:real;n:byte); Begin MoveTo(xs,ys); Koch(As+60,len,n); Koch(As-60,len,n); Koch(As+180,len,n); End; Bạn thử vẽ cung Koch cho đa giác đều m đỉnh thử xem. 2. Cung C. Cung C hình thành dựa vào việc tinh chế một đoạn thẳng và tiến trình đó được định nghĩa như sau: Dựa vào cách định nghĩa, bạn thử xây dựng thủ tục vẽ cung C xem. Ta có được cung C bậc n bằng việc thay mỗi đoạn thẳng của cung C bậc n-1 theo cùng quy tắc. Từ cung C, cung rồng được định nghĩa như sau: (hình) Tinh chế đoạn thứ hai trong cung C theo chiều ngược với đoạn thứ nhất, ta thu được cung rồng. Đây là thủ tục vẽ cung rồng với h là biểu điều khiển hướng quay. Procedure CungR(dir, len: real;h :shortint; n:byte); Const fct=0.707106781; {1/sqrt(2)} Begin If n>0 then Begin cungR(dir+h*45,len*fct,1,n-1); cungR(dir-h*45,len*fct,-1,n-1); end else LineRel(Round(len*cos(rads*dir)),-Round(len*sin(rads*dir))); End; Lúc gọi thủ tục, bạn gọi với tham số h=1; Khi vẽ bạn nhớ đến điểm khởi đầu, hướng bắt đầu, độ dài và độ sâu đệ quy. Bạn có thể tạo điểm dừng đệ quy cho chiều dài của cạnh, chỉ thực hiện khi len còn lớn hơn Minlen (tuỳ độ phân giải thiết bị). Hẹn gặp lại bạn khi chúng ta tìm hiểu về cung Hilbert và cung SierpinaSki, những cung được định nghĩa phức tạp hơn. . Cung được đĩnh nghĩa đệ quy, quy tắc và cách vẽPhạn Xuân BáchCung là một đối tượng cơ bản trong đồ học vi tính. Cung cho ta những hình ảnh đơn giản nhưng. Fratal). Các cung thường có quy tắc và được định nghĩa dưới dạng tham số hay đệ quy. ở đây chúng ta chỉ xét các cung được định nghĩa đệ quy. Cũng có thể bạn không

Ngày đăng: 07/09/2012, 11:40

Từ khóa liên quan

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

Tài liệu liên quan