Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 117 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
117
Dung lượng
2,4 MB
Nội dung
TRƯỜNG……………………… KHOA…………………… ĐỒ ÁN TỐT NGHIỆP: " Nghiên cứu hình học practal Viết chương trình cài đặt số đường mặt practal " LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ĐỒ ÁN TỐT NGHIỆP SVTH: Nguyễn Ngọc Hùng Cường LỜI NÓI ĐẦU Trong năm gần đây, toán học khoa học tự nhiên bước lên bậc thềm mới, mở rộng sáng tạo khoa học trở nghiệm liên ngành Cho đến đưa khoa học tiến bước dài Hình học phân hình đơng đảo người ý thích thú nghiên cứu Với người quan sát tình cờ màu sắc cấu trúc phân hình sở vẽ đẹp chúng tạo nên lơi hình thức nhiều lần so với đối tượng toán học biết đến Hình học phân hình cung cấp cho nhà khoa học môi trường phong phú cho thám hiểm mơ hình hố tính phức tạp tự nhiên Những ngun nhân lơi hình học phân hình tạo chỉnh sửa khái niệm lỗi thời giới thực thông qua tập hợp tranh mạnh mẽ Những thành công to lớn lĩnh vực khoa học tự nhiên kỹ thuật dẫn đến ảo tưởng giới hoạt động chế đồng hồ vĩ đại, quy luật cịn phải chờ đợi để giải mã bước Một quy luật biết, người ta tin tiến hoá phát triển vật dự đoán trước xác nhiều, mặt nguyên tắc Những bước phát triển ngoạn mục đầy lôi lĩnh vực kỹ thuật máy tính hứa hẹn cho việc điều khiển thông tin nhiều làm gia tăng hy vọng nhiều người máy móc có máy móc tương lai Nhưng ngày người ta biết xác dựa cốt lỗi khoa học đại khả xem xét tính xác phát triển tương lai không đạt Một kết luận thu từ lý thuyết non trẻ : xác định có tính nghiêm túc với phát triển có tính ngẫu nhiên khơng khơng có loại trừ lẫn mà chúng tồn quy luật tự nhiên Hình học phân hình lý thuyết hỗn độn xác định kết luận Khi xét đến phát triển tiến trình khoảng thời gian, sử dụng thuật ngữ lý thuyết hỗn độn, quan tâm nhiều đến dạng có cấu trúc mà tiến trình hỗn độn để lại đường nó, dùng thuật ngữ hình học phân hình mơn hình học cho phép “sắp xếp thứ tự” hỗn độn Trong ngữ cảnh hình học phân hình ngơn ngữ để mơ tả, mơ hình hố phân tích dạng phức tạp tìm thấy tự nhiên Nhưng phần tử ngơn ngữ truyền thống (Hình học Euclide) dạng hiển thị đoạn thẳng, đường trịn hình cầu hình học phân hình thuật tốn biến đổi thành dạng cấu trúc nhờ máy tính Việc nghiên cứu ngơn ngữ hình học tự nhiên mở nhiều hướng cho khoa học ứng dụng Trong đề tài thực nghiên cứu phần nhỏ hình học phân hình ứng dụng Nội dung đề tài gồm có ba chương trình bày sau: Đề tài : Hình học Fractal Trang LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ĐỒ ÁN TỐT NGHIỆP SVTH: Nguyễn Ngọc Hùng Cường Chương I: Trình bày kiến thức tổng quan lịch sử hình học phân hình, kết sở lý thuyết Chương II: Trình bày kỹ thuật hình học phân hình thơng qua khảo sát cấu trúc Fractal sở thuật toán chi tiết để tạo nên cấu trúc Chương III: Kết cài đặt chương trình vẽ số đường mặt fractal hiệu ứng Nhân đây, em xin chân thành cảm ơn thầy T.S Huỳnh Quyết Thắng tận tình hướng dẫn, dạy giúp đỡ em suốt thời gian thực đề tài nghiên cứu Em xin chân thành cảm ơn quý thầy cô khoa công nghệ thông tin tận tình giảng dạy, trang bị cho chúng em kiến thức cần thiết suốt trình học tập, em xin gởi lòng biết ơn đến gia đình, cha, mẹ, bạn bè ủng hộ, giúp đỡ động viên em lúc khó khăn Đề tài thực thời gian tương đối ngắn, nên dù cố gắng hồn thành đề tài chắn khơng thể tránh khỏi thiếu sót định Rất mong nhận thơng cảm đóng góp ý kiến vô quý báu Thầy Cô, bạn bè, nhằm tạo tiền đề thuận lợi cho việc phát triển đề tài tương lai Sinh viên thực Nguyễn Ngọc Hùng Cường Đề tài : Hình học Fractal Trang LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ĐỒ ÁN TỐT NGHIỆP SVTH: Nguyễn Ngọc Hùng Cường MỤC LỤC Trang LỜI NÓI ĐẦU Chương I:SỰ RA ĐỜI VÀ CÁC KẾT QUẢ CỦA HÌNH HỌC PHÂN HÌNH I.1 Sự đời lý thuyết hình học phân hình Tính hỗn độn trình phát triển có quy luật tự nhiên Sự mở rộng khái niệm số chiều độ đo lý thuyết hình học Eulide cổ điển I.2 Sự phát triển c l ý thuyết hình học phân hình I.3 Các ứng dụng tổng quát hình học phân hình 10 Ứng dụng vấn đề tạo ảnh máy tính 11 Ứng dụng công nghệ nén ảnh 11 Ứng dụng khoa học 13 I.4 Các kiến thức sở hình học phân hình 13 I.4.1 Độ đo Fractal 13 I.4.2 Các hệ hàm lặp IFS 17 Chương II : MỘT SỐ KỸ THUẬT CÀI ĐẶT HÌNH HỌC PHÂN HÌNH 21 II.1 Họ đường Von Kock 21 Đường hoa tuyết Von Kock-Nowflake 21 Đường Von Kock-Gosper 26 Đường Von Kock bậc hai 3-đoạn 28 Đường Von Kock bậc hai 8-đoạn 30 Đường Von Kock bậc hai 18-đoạn 32 Đường Von Kock bậc hai 32-đoạn 33 Đường Von Kock bậc hai 50-đoạn 35 Generator phức tạp 38 II.2 Họ đường Peano 44 Đường Peano nguyên thuỷ 44 Đường Peano cải tiến 45 Tam giác Cesaro 49 Tam giác Cesaro cải tiến 51 Một dạng khác đường Cesaro 54 Tam giác Polya 56 Đường Peano-Gosper 58 Đường hoa tuyết Peano 7-đoạn 62 Đường hoa tuyết Peano 13-đoạn 66 II.3 Đường Sierpinski 70 II.4 Cây Fractal 73 Các thực tế 73 Biểu diễn toán học 73 II.5 Phong cảnh Fractal 77 II.6 Hệ thống hàm lặp (IFS) 84 Các phép biến đổi Affine không gian R2 84 Đề tài : Hình học Fractal Trang LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ĐỒ ÁN TỐT NGHIỆP SVTH: Nguyễn Ngọc Hùng Cường IFS pháp biến đổi Affine không gian R2 85 Giải thuật lặp ngẫu nhiên 86 II.7 Tập Mandelbrot 88 Đặt vấn đề 98 Cơng thức tốn học 88 Thuật toán thể tập Mandelbrot 89 II.8 Tập Julia 94 Đặt vấn đề 94 Cơng thức tốn học 94 Thuật toán thể tập Julia 95 II.9 Họ đường cong Phoenix 97 Chương III : GIỚI THIỆU VỀ NGÔN NGỮ CÀI ĐẶT VÀ KẾT QUẢ CHƯƠNG TRÌNH 100 III.1 Giới thiệu ngôn ngữ cài đặt 100 III.2 Kết chương trình 111 TÀI LIỆU THAM KHẢO 116 Đề tài : Hình học Fractal Trang LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ĐỒ ÁN TỐT NGHIỆP SVTH: Nguyễn Ngọc Hùng Cường CHƯƠNG I: SỰ RA ĐỜI VÀ CÁC KẾT QUẢ CỦA HÌNH HỌC PHÂN HÌNH I.1 SỰ RA ĐỜI CỦA LÝ THUYẾT HÌNH HỌC PHÂN HÌNH: Sự đời lý thuyết hình học phân hình kết nhiều thập kỷ nổ lực giải vấn đề nan giải nhiều ngành khoa học xác, đặc biệt vật lý tốn học Một cách cụ thể, lý thuyết hình học phân hình xây dựng dựa vấn đề lớn quan tâm thập niên đầu kỷ 20 Các vấn đề bao gồm: Tính hỗn độn q trình phát triển có quy lực tự nhiên Sự mở rộng khái niệm số chiều độ đo lý thuyết hình học Euclide cổ điển □ TÍNH HỖN ĐỘN CỦA CÁC Q TRÌNH PHÁT TRIỂN CĨ QUY LUẬT TRONG TỰ NHIÊN: Các cơng thức lặp có dạng: Xn+1=f(Xn) thường sử dụng ngành khoa học xác để mơ tả q trình lặp lặp lại có tính xác định Các q trình xác định cơng thức trên, f thể mối liên hệ phi tuyến hai trạng thái nối tiếp Xn Xn+1, quan tâm đặc biệt Các khảo sát thập niên gần phát cư xử kỳ dị tiến trình lặp Khảo sát chi tiết nhà khí tượng học Edward N Lorenz tiến hành vào năm 1961 nghiên cứu hệ tốn học mơ dự báo thời tiết Về mặt lý thuyết, hệ cho kết dự đốn xác thời tiết khoảng thời gian dài Tuy nhiên, theo Lorenz quan sát, bắt đầu tính tốn lại dựa vào liệu cho hệ thời điểm tiếp sau khơng giống với kết dự đốn ban đầu Hơn sai số tính tốn tăng lên nhanh chóng theo thời gian Điều dẫn đến kết luận tiến trình dự đốn lại từ thời điểm tiến trình dự báo, khoảng thời gian để kết dự báo cịn xác bị thu hẹp lại tức khơng thể dự báo xác thời tiết khoảng thời gian lớn Vấn đề Lorenz tìm thấy ngày gọi diện tính chất hỗn độn tiến trình lặp xác định Tiếp theo sau phát Lorenz, vào năm 1976 Robert May viết với tựa đề “Các mơ hình tốn học đơn giản với hệ động lực phức tạp” đề cập đến vấn đề tương tự Đó hỗn độn trình phát triển dân số tự nhiên, vốn xem xác định rõ ràng chi tiết nhờ mơ hình dân số Verhulst xây dựng Nếu ký hiệu: Đề tài : Hình học Fractal Trang LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ĐỒ ÁN TỐT NGHIỆP - SVTH: Nguyễn Ngọc Hùng Cường R tốc độ gia tăng dân số năm Po lượng dân số khởi điểm (của quốc gia, thành phố,…) Pn lượng dân số có sau n năm phát triển Ta có quan hệ sau: Pn+1 - Pn , n > (1) R= Pn Để ý dân số phát triển đều, tức R không đổi từ năm sang năm khác, từ (1) ta có: Pn+1 = f(Pn) = (1+R)Pn Do sau n năm, lượng dân số khảo sát là: Pn = (1+R)n P o Công thức gia tăng dân số theo hàm mũ điều không thực tế Vì Verhulst đề nghị R thay đổi với lượng dân số khảo sát Một cách cụ thể, Verhust cho R tỉ lệ với tốc độ phát triển dân số theo mơi trường (P-Pn) / N Trong N lượng dân số tối đa có ứng với điều kiện môi trường cho trước Như biểu diễn R dạng: N - Pn R=r (2) N Với r hệ số tỷ lệ gọi tham số phát triển theo môi trường Từ (1) (2) suy ra: Pn+1 - Pn N - Pn =r Pn N Do đó: Pn+1 - Pn N Pn = r Pn N N Pk Đặt: Pk = ta có: N P n+1 - Pn = r(1 - Pn) Pn Đề tài : Hình học Fractal Trang LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ĐỒ ÁN TỐT NGHIỆP SVTH: Nguyễn Ngọc Hùng Cường Suy ra: Pn+1 = Pn + rPn(1 – Pn) Phương trình gọi phương trình dân số Verhust Rõ ràng phương trình xác định đơn giản Do đó, kể từ đưa người ta áp dụng mà khơng nghi ngờ tính ổn định Tuy nhiên May khảo sát phương trình với r thay đổi phạm vi lớn, ông khám phá bất ổn định tỉ lệ phát triển dân số theo môi trường Pk Các kết quan sát chi tiết cho thấy số lần lặp n trở nên lớn ta có trường hợp sau: - Với < r < 2: Dãy (Pn) tiến đến 1, tức phát triển dân số đạt mức tối đa - Với < r < 2,449: Dãy (Pn) dao động tuần hoàn hai giá trị, tức phát triển dân số biến động hai mức xác định Hình vẽ (I.1) minh hoạ cho trường hợp r = 2.3 Po Dân số: - Thời gian Hình vẽ I.1 với r = 2.3 P0 = 0.01 Với 2,449 < r < 2,570: Dãy (Pn) dao động ổn định với giá trị lặp lại theo chu kỳ nhân giá trị r chạy từ 2,449 đến 2,570 Hình vẽ (I.2) minh hoạ trường hợp r = 2,5 dao động có chu kỳ Dân số: Thời gian - Hình vẽ I.2 với r = 2.5 Với r > 2.570: Dãy (Pn) khơng cịn tuần hồn mà trở nên hỗn độn, theo nghĩa giá trị dãy chọn cách hồn tồn xác định khơng dự đốn xác Hình vẽ (I.3) minh hoạ trường hợp r = 3.0 P o = 0.1 Đề tài : Hình học Fractal Trang LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ĐỒ ÁN TỐT NGHIỆP SVTH: Nguyễn Ngọc Hùng Cường Dân số Thời gian Hình vẽ I.3 với r = 3.0 Po = 0.1 Một kết lý thuyết chứng minh Jame York Tiên Yien Li viết ”Các chu kỳ chứa đựng hỗn độn” vào tháng 12/1975 York Li hàm số xác định tương tự phương trình dân số có chu kỳ tuần hồn có chu kỳ tuần hoàn n, với n số tự nhiên khác Điều dẫn đến kiện vơ số tập giá trị tuần hồn khác sản sinh loại phương trình Vào năm 1976, Mitchell Feigenbaum nghiên cứu phương trình cách độc lập với May York Feigenbaum xét phương trình dân số dạng đơn giản: y = x(1- x) thể sơ đồ phân nhánh Nếu gọi rn giá trị tham số phát triển theo mơi trường mơ hình Verhulst lần rẻ nhánh thứ n (là lúc ứng với rn đó, chu kỳ 2n trở nên khơng ổn định chu kỳ 2n+1 đạt ổn định), tỷ số khoảng liên tiếp n xác định bởi: rn - rn-1 n = rn+1 - rn Sẽ tiến giá trị = 4.669 n Tính chất tìm thấy tiến trình có chu kỳ nhân đơi khác với tiến trình Verhulst Do giá trị ngày gọi số phổ dụng Feigenbaum (trong lý thuyết hỗn độn) □ SỰ MỞ RỘNG KHÁI NIỆM SỐ CHIỀU VÀ ĐỘ ĐO TRONG LÝ THUYẾT HÌNH HỌC EULIDE CỔ ĐIỂN: Vào năm 1890 & 1891, tìm kiếm đặc trưng bất biến đối tượng hình học qua phép biến đổi đồng phơi lý thuyết topo, nhà tốn học Peano & Hilbert phát minh đường cong có tính chất đặc biệt Đó đường cong không tự cắt theo quy luật Peano Hilbert, chúng lấp đầy miền hữu hạn mặt phẳng Hình học Euclide cổ điển quan niệm đường cong Đề tài : Hình học Fractal Trang LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ĐỒ ÁN TỐT NGHIỆP SVTH: Nguyễn Ngọc Hùng Cường đối tượng chiều đường thẳng Tuy nhiên trực quan cho thấy cách nhìn số chiều gị bó Do người ta bắt đầu nghĩ đến phân lớp mới, đường có số chiều đại diện đường thẳng, đối tượng hai chiều đại diện mặt phẳng, đường cong lấp đầy mặt phẳng đại diện cho đối tượng có số chiều Ý tưởng cách mạng dẫn đến việc hình thành giải toán số chiều hữu tỷ gây nhiều tranh luận toán học thập kỷ gần Tiếp sau đó, vào năm 1904 nhà toán học Thụy Điển Helge Koch đưa loại đường cong khác với đường cong Peano Hilbert Các đường cong Von Koch không lấp đầy mặt phẳng lại có độ dài thay đổi cách vô hạn chúng chứa miền hữu hạn Những đường cong có nhiều tự nhiên, ví dụ đường bờ biển, đường biên hoa tuyết, đám mây, vv… Tất vả đường cong tính chất đặc trưng đồng dạng Nó biểu giống phần nhỏ đường cong phóng lớn với phần khác lớn đường cong Tính chất giữ vị trí quan trọng việc hình thành nên dạng cấu trúc vô phức tạp tự nhiên, vào thời Von Koch lại hiểu biết sơ lược Chỉ với giúp đỡ máy tính điện tử, chất tính đồng dạng nghiên cứu đầy đủ chi tiết tác phẩm “Hình học phân hình tự nhiên” Benoit B Mandelbrot xuất năm 1982 Trong tác phẩm mình, Mandelbrot phân rã dạng cấu trúc phức tạp tự nhiên thành thành phần gọi fractal Các fractal chứa đựng hình dáng tự đồng dạng với nhiều kích thước khác Mandelbrot tạo nên tranh fractal trừu tượng nhận thấy đằng sau đối tượng tự nhiên đám mây, dãy núi, khu rừng, vv… cấu trúc tốn học tương tự Chúng có khuynh hướng hài hồ màu sắc cân đối hình thể Ngoài Mandelbrot thiết lập cách xác định số chiều độ dài dạng fractal sở Chính với định nghĩa số chiều này, tốn số chiều không nguyên giải cách hồn chỉnh Có thể nói cơng trình Benoit B.Mandelbrot thức khai sinh lý thuyết hình học phân hình sau nửa kỷ nghiên cứu liên tục I.2 SỰ PHÁT TRIỂN CỦA LÝ THUYỂT HÌNH HỌC PHÂN HÌNH: Kể từ đời cách thức vào năm 1982 nay, lý thuyết hình học phân hình học phân hình phát triển cách nhanh chóng Sau đặt móng cho lý thuyết phân hình, Mandelbrot với nhà tốn học khác A Douady J.Hubbard phát triển lý thuyết mặt fractal Các kết đạt chủ yếu tập trung tính chất cấu trúc fractal sở tập Mandelbrot tập Julia Ngồi nghiên cứu cố gắng tìm kiếm mối liên hệ cấu trúc này, ví dụ mối liên hệ tập Mandelbrot Julia Đề tài : Hình học Fractal Trang LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ĐỒ ÁN TỐT NGHIỆP SVTH: Nguyễn Ngọc Hùng Cường CclientDC dc (this); dc.FloodFill(x, y, color); Tạo đường vẽ: Để tạo đường vẽ ta xét đến hàm createPen lớp Cpen hàm có dạng sau: Cpen *pPen = new Cpen; pPen → CreatePen (typeline, width, color); Trong : typeline kiểu đường vẽ có giá trị định nghĩa sau: PS-SOLID : Đường thẳng đồng PS-DASH : Đường thẳng gồm gạch ngang đứt nét PS-DOT : Đường thẳng gồm nét chấm đứt PS-DASHDOT : Đường thẳng gồm gạch ngang chấm đứt PS-NULL : Đường thẳng vô hiệu lực không vẽ PS-INSIDEFRAME : Đường thẳng nằm bên đường viền Tham số width cho ta độ rộng nét vẽ tính pixel Tham số color cho ta màu vẽ Một số hàm sử dụng chương trình: Giới thiệu số hàm sử dụng chương trình: Hàm Point (X1, Y1, X2, Y2): Hàm tính góc rùa trục x (tức tính góc đoạn thẳng có hai đầu mút có toạ độ (X1, Y1) (X2, Y2) ) theo độ đo góc thơng thường Sau đoạn mã mô tả cách cài đặt hàm: /* EDIT CODE */ #include”stdafx.h” #include”math.h” #define PI 3.141593 double Point(double X1, double Y1, double X2, double Y2) double Theta,Temp=180/PI; if((X2-X1)= = 0) if(Y2 > Y1) Theta= 90; else Theta = 270; else Theta= atan((Y2 -Y1) / (X2 -X1)) * Temp; if (X1 > X2) Theta += 180; return Theta; Hàm Turn (Angle, Turtle-Theta): Hàm cộng thêm vào Turtle-Theta góc Angle (tức quay rùa góc theo chiều ngược chiều kim đồng hồ Angle > 0, cịn Đề tài : Hình học Fractal Trang 102 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ĐỒ ÁN TỐT NGHIỆP SVTH: Nguyễn Ngọc Hùng Cường Angle < quay chiều kim đồng hồ) Đoạn mã sau minh hoạ cách cài đặt: void Turn(double Angle, double &Turtle_Theta) Turtle_Theta+=Angle; Hàm Step (Turtle-X, Turtle-Y, Turtle-R, Turtle-Theta): Hàm di chuyển rùa bước Chiều dài bước Turtle-R Ở hàm sử dụng vị trí rùa có toạ độ (Turtle-X, TurtleY) góc định hướng Turle-Theta để xác định vị trí toạ độ sau di chuyển bước Đoạn mã sau minh hoạ cho cách cài đặt: void Step(double &Turtle_X, double &Turtle_Y, double Turtle_R, double Turtle_Theta) Double Temp=PI/180; Turtle_X+=Turtle_R*cos(Turtle_Theta* Temp); Turtle_Y+=Turtle_R*sin(Turtle_Theta* Temp); Giả sử initiator gồm N điểm, điểm có toạ độ (x[i], y[i] ) đường hoa tuyết có mức Level (mức bắt đầu 1), việc tạo đường hoa tuyết sau (các đường sau tạo giống vậy): For(i= ; i< N ;++i) -Generator(x[i],y[i],x[i+1],y[i+1],Level); Với hàm –Generator tương ứng với đoạn mã sau: Hàm phát sinh họ đường Vonkock: void Generator(CDC *pDC,double X1, double Y1, double X2, double Y2, int Level,int NumLines,double LineLen,double Angles[]) Hàm áp dụng cho việc phát sinh đường khác họ Hàm phát sinh họ đường Von Kock Generator phức tạp: void ComplexVonKockGenerator( CDC *pDC,double X1,double Y1[],double X2,double Y2,int Level,int Type,int Sign, int NumLines, double LineLen,double Angles[]) Hàm có thêm hai tham số Sign Type Sygn dùng để nhân với góc quay Nếu Type = khơng có thay đổi, tham số Sign trì giá trị củ generator sinh bên generator trước Khi type = 1, Sign nhân với -1 tất góc quay theo chiều đảo ngược cho generator xuất bên đối diện với đoạn thẳng từ generator trước Khi Type = 2, tạo đoạn thẳng mà toạ độ đầu điểm cuối đoạn thẳng khác ngược lại cho generator vẽ theo chiều ngược lại Chúng ta Đề tài : Hình học Fractal Trang 103 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ĐỒ ÁN TỐT NGHIỆP SVTH: Nguyễn Ngọc Hùng Cường cần đảo tất dấu generator đảo ngược để generator xuất bên với generator trước Cuối cùng, Type = 3, đảo ngược toạ độ cho generator vừa đảo ngược vừa di chuyển sang phía đối diện Hàm làm việc sau: Xác định Type thuộc loại nào? Xác định toạ độ generator lớn nhỏ Nếu Level = hàm vẽ đoạn thẳng Nếu Level khác hàm xác định loại cho tham số Type đoạn thẳng, sau gọi đệ quy Mảng Angle là:{60, 0, -60, -60, -60, 0, 60, 60, 0, 0, -60} NumLines = 11 Hàm áp dụng cho việc phát sinh đường khác, với mức khác Chẳng hạn sau minh hoạ cho hình vẽ trình bày mức đường Complex_Von Kock_Generator Hàm phát sinh đường cong Peano cải tiến: void ModifiedPeanoGenerator(CDC *pDC, double X1, double Y1,double X2, double Y2, int Level, int NumLines, double LineLen, double Angles[],double &XTemp, double &YTemp) Đối với Level > hàm giống hàm –Generator đường Peano gốc Với Level = 1, hàm có khác chút Thay định nghĩa bước rùa (là biến Turtle_R) 1/3 chiều dài đoạn thẳng ban đầu ta định nghĩa 1/18 chiều dài đoạn thẳng ban đầu, generator viết cho rùa qua đường giống generator đường Peano gốc, sử dụng góc quay giống nhau, dùng bước thay bước generator Peano gốc Tuy nhiên, điểm lưu trữ mảng toạ độ có thay đổi Sau lưu trữ toạ độ thứ nhất, ta lưu trữ vị trí sau bước 5, vị trí lưu trữ cuối bước sau quay góc Các vị trí cịn lại lưu trữ sau bước sau bước đoạn thẳng kế, ngoại trừ bước đoạn thẳng cuối không lưu trữ lại Kết đoạn thẳng vẽ, chúng tạo nên đường xiên nối điểm 1/6 khoảng cách đoạn thẳng gặp góc (Ở NumLines = 19) Hàm phát sinh đường cong Tam Giác Cesaro: void CesaroTriangleGenerator(CDC *pDC,double X1, double Y1, double X2, double Y2, int Level,int NumLines, double LineLen, double Angles[],int Sign[]) Hàm –Generator tam giác Cearo cải tiến sau: Đề tài : Hình học Fractal Trang 104 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ĐỒ ÁN TỐT NGHIỆP SVTH: Nguyễn Ngọc Hùng Cường void ModifiedCesaroGenerator(CDC *pDC,double X1, double Y1, double X2, double Y2, int Level,int NumLines, double LineLen, double Angles[],int Sign[]) Hàm giống với hàm đường Cesaro gốc lúc mảng Angle {0, -170, 0, 85, } NumLines = 4, đồng thời chiều dài đoạn generator có khác Chúng chia làm hai loại: Loại chiều dài thứ nhất: Bằng nửa chiều dài đoạn thẳng ban đầu Loại chiều dài thứ hai: Bằng nửa chiều dài đoạn ban đầu nhân với 0.9128442 Hàm –Generator dạng khác đường Cesaro sau: void OtherCesaroGenerator(CDC *pDC,double X1, double Y1, double X2, double Y2, int Level,int NumLines, double LineLen, double Angles[],int Sign) Hàm phát sinh Polya-Generator sau: void PolyaGenerator(CDC *pDC,double X1, double Y1, double X2, double Y2, int Level,int NumLines, double LineLen, double Angles[],int Sign[]) Chúng ta sử dụng kỹ thuật sử dụng đường Cesaro tức dùng mảng Sign sau gọi đệ quy hàm – Generator Mảng Angles có giá trị {45, } NumLines = Hàm Peano-Gosper-Generator: void PeanoGosperGenerator(CDC *pDC, double X1, double Y1, double X2, double Y2, int Level, int Type, int NumLines, double LineLen,double Angles[ ]) Hàm giống hàm –Generator đường Gosper, khác thêm hai tham số Sign Type họ Generator phức tạp trình bày phần Complex Von Kock Generator trước Ở NumLines = mảng Angles là: 19.1,60,120,60,120,0,0 Hàm phát sinh đường hoa tuyết Peano 7-đoạn: void Peano7-DoanGenerator(CDC *pDC,double X1,double Y1 ,double X2,double Y2,int Level,int Type,int Sign,int NumLines,double LineLen,double Angles[]) Giống trường hợp generator phức tạp, có khả lựa chọn cho vị trí generator phải chọn cách cẩn thận mức, đoạn thẳng để đảm bảo đường cong tạo thành không tự giao hay tự chồng lên Ở NumLines = mảng Angles là: 60,0,60,60,60,0,60 Đề tài : Hình học Fractal Trang 105 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ĐỒ ÁN TỐT NGHIỆP SVTH: Nguyễn Ngọc Hùng Cường Hàm phát sinh đường hoa tuyết Peano 13-đoạn sau: void Peano13-DoanGenerator(CDC *pDC,double X1,double Y1,double X2,double Y2,int Level,int Type,int Sign,int NumLines,double LineLen,double Angles[]) Đối với đường có khả lựa chọn cho vị trí generator phải chọn cách cẩn thận mức, đoạn thẳng để đảm bảo đường cong tạo thành không tự giao hay tự chồng lên Ở NumLines = 13 mảng Angle là: 60,0,60,60,60,0,60,60,60,0,60,0,60 Hàm Generator đường Sierpinski sau: void Generator_SierpinskiCurve(CDC *pDC,double X1,double Y1, double X2,double Y2,int Level, int Sign,int NumLines,doubleLinelen, double Angles[],COLORREF color) Hàm Generator fractal sau: void Generator (float X, float Y,float Width, float Height, unsigned char Level) Hàm phát sinh để vẽ phong cảnh fractal sau: Trong hàm có đoạn mã sau: void Node(double X1, double Y1, double X2, double Y2, double X3, double Y3, double X4, double Y4, double X5, double Y5, double X6, double Y6, unsigned char Level, int Color1, int Color2) { if(!Level) return; Generate(X1,Y1, X4,Y4, X6,Y6,Level-1,Color1,Color2); Generate(X6,Y6, X5,Y5, X3,Y3,Level-1,Color1,Color2); Generate(X4,Y4, X2,Y2, X5,Y5,Level-1,Color1,Color2); Generate(X4,Y4, X5,Y5, X6,Y6,Level-1,Color1,Color2); } void Generate(double X1, double Y1, double X2, double Y2, double X3, double Y3, unsigned char Level, int Color1, int Color2) { double X4,Y4,X5,Y5,X6,Y6,Ax,Ay,Bx,By,Cx,Cy; Đề tài : Hình học Fractal Trang 106 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ĐỒ ÁN TỐT NGHIỆP SVTH: Nguyễn Ngọc Hùng Cường X=X2-X1; Y=Y2-Y1; MidPoint(); X4=X1+Xz-Xp; Y4=Y1+Yz-Yp; Ax=-Xp; Ay=-Yp; X=X3-X1; Y=Y3-Y1; MidPoint(); X6=X1+Xz; Y6=Y1+Yz; Cx=Xp; Cy=Yp; X=X3-X2; Y=Y3-Y2; MidPoint(); X5=X2+Xz; Y5=Y2+Yz; Bx=-Xp; By=-Yp; if(Level) { PlotTriange(X1,Y1,X4+Ax,Y4+Ay,X6+Cx,Y6+Cy,Color1,Color 2); PlotTriange(X6+Cx,Y6+Cy,X5+Bx,Y5+By,X3,Y3,Color1,Color 2) PlotTriange(X4+Ax,Y4+Ay,X5+Bx,Y5+By,X6+Cx,Y6+Cy,Col or1, Color2); PlotTriange(X4+Ax,Y4+Ay,X2,Y2,X5+Bx,Y5+By,Color1,Color 2); Node(X1,Y1,X2,Y2,X3,Y3,X4,Y4,X5,Y5,X6,Y6,Level, Color1, Color2); } else { PlotTriange(X1,Y1,X4,Y4,X6,Y6,Color1,Color2); PlotTriange(X6,Y6,X5,Y5,X3,Y3,Color1,Color2); PlotTriange(X4,Y4,X5,Y5,X6,Y6,Color1,Color2); PlotTriange(X4,Y4,X2,Y2,X5,Y5,Color1,Color2); } } void PlotTriange(double X1, double Y1, double X2, double Y2, double X3, double Y3, int Color1, int Color2) { Đề tài : Hình học Fractal Trang 107 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ĐỒ ÁN TỐT NGHIỆP SVTH: Nguyễn Ngọc Hùng Cường int Color; double C1=0.35; double C2=0.92; double Ytt,Zt; Ytt=(Y1>Y2)?Y1:Y2; if(Ytt= 0) Result+=LimitStart; else Result-=LimitStart; Return Result; } Đề tài : Hình học Fractal Trang 108 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ĐỒ ÁN TỐT NGHIỆP SVTH: Nguyễn Ngọc Hùng Cường void Gen_Quad(double X1, double Y1, double X2, double Y2, double X3, double Y3, double X4, double Y4, unsigned char Level, int Color1, int Color2) { Generate(X1,Y1, X2,Y2, X3,Y3,Level,Color1,Color2); Generate(X1,Y1, X4,Y4, X3,Y3,Level,Color1,Color2); } void Cactus(double X1, double Y1, int Scale, unsigned char Level, int Color1, int Color2) { Gen_Quad(X1, Y1, X1, Y1+21*Scale, X1+1.6*Scale, Y1+22*Scale,X1+1.6*Scale,Y1,Level,Color1, Color2); Gen_Quad(X1+1.4*Scale, Y1, X1+1.4*Scale, Y1+22*Scale, X1+3*Scale, Y1+21*Scale,X1+3*Scale, Y1,Level,Color1,Color2); Gen_Quad(X1, Y1+9*Scale, X1+7*Scale, Y1+9*Scale, X1+7*Scale,Y1+12*Scale,X1, Y1+12*Scale, 0, Color1,Color2); Gen_Quad(X1, Y1+9*Scale, X1+6*Scale, Y1+9*Scale, X1+7*Scale,Y1+12*Scale,X1, Y1+12*Scale, Level,Color1,Color2); Gen_Quad(X1+7*Scale, Y1+9*Scale, X1+7*Scale, Y1+16*Scale, X1+8.5*Scale, Y1+17*Scale, X1+8.5*Scale, Y1+9*Scale, Level, Color1, Color2); Gen_Quad(X1+8.4*Scale, Y1+9*Scale, X1+8.4*Scale, Y1+16*Scale,X1+10*Scale, Y1+17*Scale, X1+10*Scale,Y1+10*Scale, Level, Color1,Color2); Gen_Quad(X1, Y1+7*Scale, X1-6*Scale, Y1+7*Scale, X1 - 6*Scale, Y1+10*Scale, X1, Y1+10*Scale,0, Color1,Color2); Gen_Quad(X1, Y1+7*Scale, X1-6*Scale, Y1+7*Scale, X1 -6*Scale,Y1+10*Scale, X1,Y1+10*Scale, Level,Color1,Color2); Gen_Quad(X1-7*Scale, Y1+8*Scale, X1-7*Scale, Y1+12*Scale, X1+5.4*Scale, Y1+13*Scale, X1+5.4*Scale, Y1+7*Scale, Level,Color1,Color2); Gen_Quad(X1-5.6*Scale,Y1+7*Scale,X1-5.6*Scale, Y1+13*Scale,X1-4*Scale,Y1+12*Scale, X1-4*Scale, Y+7*Scale, Level,Color1,Color2); } Đề tài : Hình học Fractal Trang 109 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ĐỒ ÁN TỐT NGHIỆP SVTH: Nguyễn Ngọc Hùng Cường Để vẽ phong cảnh này, sử dụng kỹ thuật lấp đầy tam giác chia nhỏ Michael Batty giai đoạn trung gian nhằm tránh lổ hỏng Các hàm phong cảnh fractal trình bày phần II bên Đầu tiên, xem qua hàm Generator Hàm xác định chiều dài theo hướng x y cho đoạn tam giác có toạ độ (X1, Y1), (X2, Y2), (X3,Y3), sau gọi hàm MidPoint để xác định phép thay trung điểm theo hướng x y Toạ độ trung điểm thay lưu trữ phép thay cần xác định tam giác chia nhỏ lấp đầy mức mức thấp nhất, đỉnh tam giác lưu trữ vị trí Ax, Ay, Bx, By, Cx, Cy Nếu mức thấp (mức 0), hàm gọi hàm PlotTriange để xác định màu lấp đầy thực việc lấp đầy tam giác mới, mức thấp chưa đạt đến, gọi hàm PlotTriange để lấp đầy tam giác chia nhỏ sau gọi hàm Node, hàm gọi đệ quy hàm Generator để phát sinh tam giác từ tam giác vừa tạo Đối với hàm Node, Level = thốt, cịn trường hợp khác gọi hàm Generator cho tam giác tam giác vừa tạo thành Hàm Gen_Quad chạy Generator hai tam giác tạo thành hình thang Hàm Random_No sử dụng việc xác định thay ngẫu nhiên, hàm có tham số giới hạn (Cả giá trị số dương) số ngẫu nhiên phát sinh Số ngẫu nhiên trả số âm nằm hai giá trị âm hai số giới hạn dương nằm hai giá trị dương hai số giới hạn Còn hàm MidPoint ban đầu lấy số ngẫu nhiên chọn biểu diễn cho việc thay trung điểm dọc theo đường trung trực với khoảng cách theo chiều x lưu trữ giá trị X khoảng cách theo chiều y lưu trữ giá trị Y Khoảng cách nửa độ dài cạnh ứng với trung trực cộng hay trừ với giá trị ngẫu nhiên 1/6 lần chiều dài cạnh Kế đến tính độ dịch chuyển vng góc với cạnh Nó độ dài cạnh xét nhân với số ngẫu nhiên 0.03 0.07 hay -0.07 0.03 Hàm PlotTriange có tham số đỉnh tam giác hai giá trị màu, dùng biến Y_Max giá trị độ cao điều khiển việc chọn lựa màu Đầu tiên hàm chọn giá trị y đỉnh cao tam giác Sau tạo biến Zt theo cơng thức: 2 Ytt YWMax Zt (Y _ Max YWMax)1 Y _ Max YWMax Đề tài : Hình học Fractal Trang 110 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ĐỒ ÁN TỐT NGHIỆP SVTH: Nguyễn Ngọc Hùng Cường Với Y_Max độ cao điều khiển Ytt độ cao đỉnh cao tam giác Khi giá trị Zt xác định, hàm PlotTriange chọn số ngẫu nhiên Y_Max so sánh giá trị với Zt Nếu giá trị nhỏ hay Zt, màu thứ chọn, ngược lại màu thứ hai chọn Cuối độ cao Ytt giới hạn chọn màu chọn màu thứ nhất, ngược lại chọn màu thứ hai Sau hàm gọi hàm FillTriange để lấp đầy tam giác với màu chọn Hàm Cactus có tham số toạ độ, hệ số vị tự, mức hai màu Nhiệm vụ phát sinh xương rồng Đoạn mã chạy phong cảnh bắt đầu chạy vòng for để gọi hàm Generator 22 lần để tạo vách đá màu đỏ Sau gọi hàm Gen_Quad để vẽ sa mạc màu vàng màu nâu, cuối gọi hàm Cactus bốn lần để tạo xương rồng với vị trí kích thước khác Hàm phát sinh mặt Mandelbrot: void Mandelbrot(int Mandelbrot_Iterated,int Mandelbrot_Size) Hàm phát sinh mặt Julia: void Julia(int Julia_Iterated,int Julia_Size) Hàm phát sinh đường cong Phoenix: void Phoenix(int Phoenix_Iterated,int Phoenix_Size) III.2 Kết cài đặt cách sử dụng chương trình: Trong phần giới thiệu cách sử dụng tác vụ việc thực vẽ đường mặt Fractal Giao diện chương trình: Giao diện chương trình sau: Đề tài : Hình học Fractal Trang 111 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ĐỒ ÁN TỐT NGHIỆP SVTH: Nguyễn Ngọc Hùng Cường Màn hình làm việc có: - Thanh Menu bar - Thanh Tool bar - Vùng hình ảnh vẽ - Thanh Status bar Menu bar gồm đề mục sau: File Edit SelectPoint Color Lines Surface Other Windows About Mỗi đề mục gồm DropDown menu kích hoạt cách gõ Enter dùng phím tổ hợp Các menu Drop down gồm số chức sau: File New: Khởi gán lại Document hữu Open:Mở file Close: Đóng file Save: lưu file Save as… Print: In ấn Print Preview Print setup Recent File Exit: Thốt khỏi chương trình Edit Undo: Quay lại file trước Copy: Sao chép file Paste: Dán file Đề tài : Hình học Fractal Trang 112 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ĐỒ ÁN TỐT NGHIỆP SVTH: Nguyễn Ngọc Hùng Cường Selectpoint User select point: Color List Color: Bảng màu cho người sử dụng chọn Lines Von Kock: Vẽ đường thuộc họ đường Von Kock Snowflake: Vẽ đường Von Kock hoa tuyết Gosper: Vẽ đường Von Kock Gosper Segment: Vẽ đường Von Kock bậc II đoạn Segment: Vẽ đường Von Kock bậc II đoạn 18 Segment: Vẽ đường Von Kock bậc II 18 đoạn 32 Segment: Vẽ đường Von Kock bậc II 32 đoạn 50 Segment: Vẽ đường Von Kock bậc II 50 đoạn Complex: Vẽ đường Von Kock phức tạp Peano Peano: Vẽ đường Peano nguyên thuỷ Modified Peano: Vẽ đường Peano cải tiến Cearo Triangle: Vẽ đường tam giác Peano Modified Cesaro: Vẽ đường tam giác Cesaro cải tiến Other Cesaro: Vẽ dạng khác đường cesaro Polya Triangle: Vẽ đường tam giác polya Peano Gosper: Vẽ Peano Gosper Peano 7-Segment: Vẽ đường hoa tuyết Peano đoạn Peano 13-segment: Vẽ đường hoa tuyết Peano 13 đoạn Đề tài : Hình học Fractal Trang 113 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ĐỒ ÁN TỐT NGHIỆP SVTH: Nguyễn Ngọc Hùng Cường Sierpinski Sierpinski Curve: Vẽ đường tam giác Sierpinski Surfaces Julia Set: Vẽ tập Julia Mandelbrot Set: Vẽ tập Mandelbrot Phoenix: Vẽ đường cong Phoenix Other Fractal Tree: Vẽ Fractal Landscape: Vẽ cảnh vách núi đá IFS:Vẽ phép biến đổi 2D 3D 2D Fern Leaf: Vẽ ảnh 2D 3D Fern Leaf: Vẽ ảnh 3D Window New window: Mở cửa sổ Cascade: Thu nhỏ cửa sổ Tile Arrange Icons About fractal…: Giới thiệu chương trình Index: Dự trù cho hướng dẫn Hạn chế: Hình học Fractal bao gồm nhiều cấu trúc đường mặt khác Do thời gian có hạn nên chương trình cịn số đường mặt chưa kịp cài đặt Bên cạnh chương trình chưa thể hiệu ứng lửa mây v.v… Kết số đường mặt cài đặt được: i) Các đường thuộc họ đường Von Kock như: - Đường hoa tuyết Von Kock - Đường Gosper - Đường Von Kock bậc hai đoạn - Đường Von Kock bậc hai đoạn - Đường Von Kock bậc hai 18 đoạn - Đường Von Kock bậc hai 32 đoạn - Đường Von Kock bậc hai 50 đoạn - Đường Generator phức tạp ii) Các đường thuộc họ đường Peano như: - Đường Peano nguyên thuỷ - Đường Peano cải tiến - Tam giác Cesaro Đề tài : Hình học Fractal Trang 114 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ĐỒ ÁN TỐT NGHIỆP SVTH: Nguyễn Ngọc Hùng Cường - Tam giác Cesaro cải tiến - Một dạng khác đường Cesaro - Tam giác Polya - Đường Peano Gosper - Đường hoa tuyết Peano đoạn - Đường hoa tuyết Peano 13 đoạn iii) Đường Sierpinski iv) Cây Fractal v) Phong cảnh Fractal vi) Cây dương xỉ chiều đương xỉ chiều vii) Mặt Mandelbrot viii) Mặt Julia ix) Đường cong Phoenix Hướng phát triển đề tài: Hình học Fractal cài đặt thêm số đường mặt sau: - Tạo đường Hilbert - Tạo đường tròn Apolo - Tạo đường cong Dragon - Tạo hiệu ứng lửa, mây… - Tạo dãy núi… Đề tài : Hình học Fractal Trang 115 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ĐỒ ÁN TỐT NGHIỆP SVTH: Nguyễn Ngọc Hùng Cường TÀI LIỆU THAM KHẢO The Fractal Geometry of Nature Benoit B.Mandelbrot Fratal Geometry in Digital Imaging Martin J.Turner Jonathan M.Blackledge Patrick R Andrews Fractal Everywhere Michale Barnsley Advanced Fractal Programming in C Roger T.Stevens Tự học lập trình Visual C++ 6.0 Nguyễn Văn Hồng & Nhóm tác giả Elicom Đề tài : Hình học Fractal Trang 116 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ... kiến thức sở hình học phân hình 13 I.4.1 Độ đo Fractal 13 I.4.2 Các hệ hàm lặp IFS 17 Chương II : MỘT SỐ KỸ THUẬT CÀI ĐẶT HÌNH HỌC PHÂN HÌNH 21 II.1 Họ đường Von Kock... II.9 Họ đường cong Phoenix 97 Chương III : GIỚI THIỆU VỀ NGÔN NGỮ CÀI ĐẶT VÀ KẾT QUẢ CHƯƠNG TRÌNH 100 III.1 Giới thiệu ngôn ngữ cài đặt 100 III.2 Kết chương trình ... truyền thống (Hình học Euclide) dạng hiển thị đoạn thẳng, đường trịn hình cầu hình học phân hình thuật tốn biến đổi thành dạng cấu trúc nhờ máy tính Việc nghiên cứu ngơn ngữ hình học tự nhiên