Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 59 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
59
Dung lượng
1,4 MB
Nội dung
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC MỞ TP.HỒ CHÍ MINH KHOA CƠNG NGHỆ THƠNG TIN KHĨA LUẬN TỐT NGHIỆP Đề tài: Vẽ đồ thị cấu trúc logic GV Hướng Dẫn : TRƯƠNG HOÀNG VINH SV Thực : VŨ QUANG HUY MSSV : 0851010110 Lớp : TH08A1 Thành phố Hồ Chí Minh – Tháng Năm 2012 Lời cảm ơn Tôi xin chân thành gửi lời cảm ơn đến tồn thể thầy giáo phụ trách giảng dạy trường Đại học Mở Thành Phố Hồ Chí Minh nói chung q thầy khoa CƠNG NGHỆ THƠNG TIN nói riêng Trong suốt q trình học tập trường, q thầy tận tình giảng dạy truyền đạt cho kiến thức lý thuyết đến kiến thức thực hành Hơn nữa, q thầy tận tình truyền đạt kinh nghiệm quý báu kiến thức ứng dụng thực tế, kĩ thuật chun mơn, qua góp phần lớn việc tạo điều kiện thuận lợi cho q trình học tập, giúp tơi dễ dàng nắm vững kiến thức học ứng dụng thực tiễn Đặc biệt, xin chân thành gửi lời cảm ơn sâu sắc đến thầy Trương Hoàng Vinh trực tiếp hướng dẫn định hướng để chọn, thực đề tài cho đồ án môn học Thầy giúp đỡ dẫn trực tiếp kinh nghiệm thực tế cung cấp tài liệu cho tham khảo, tạo điều kiện cho tơi hồn thành khóa luận thời hạn Do chưa có nhiều kinh nghiệm, nên q trình thực đề tài nhiều thiếu sót Tơi mong muốn nhận đóng góp ý kiến q thầy bạn để đề tài hồn thiện Cuối cùng, tơi gửi lời chúc tốt đẹp đến quý thầy cô khoa CƠNG NGHỆ THƠNG TIN tồn thể thầy dạy trường Đại học Mở Thành Phố Hồ Chí Minh Mục lục Giới thiệu đề tài, lý chọn kết mong đợi 1.1 Giới thiệu đề tài 1.2 Lý chọn đề tài 1.3 Phương pháp nghiên cứu 1.4 1.5 Kết mong đợi Kết cấu khóa luận Nội dung nghiên cứu 2.1 2.2 2.3 Cơ sở lý thuyết đề tài 2.1.1 Tóm tắt đề tài 2.1.2 Các khái niệm sử dụng đề tài 2.1.3 2.1.4 Phạm vi nghiên cứu Cấu trúc logic đồ thị 11 2.1.5 Các quan hệ đồ thị logic 12 Cơ sở kĩ thuật đề tài 13 2.2.1 Ngơn ngữ lập trình: Java SE 13 2.2.2 Thư viện đồ họa hỗ trợ: OpenGL 15 2.2.3 Thư viện API JOGL giúp tương tác với OpenGL thông qua Java 16 Hiện thực đề tài 16 2.3.1 Cấu trúc chương trình 16 2.3.2 Minh họa sử dụng 19 2.3.3 Cài đăt 28 Triển vọng ứng dụng đề tài 59 Danh sách hình vẽ 2.1 Ví dụ minh họa điều kiện trường hợp D1 10 2.2 Ví dụ minh họa điều kiện trường hợp D2 10 2.3 Ví dụ minh họa điều kiện trường hợp D3 11 2.4 Minh họa đồ thị logic với tập đỉnh V = {A, B, C, D, E} tập cạnh E = {a, b, c, d, e} 11 2.5 Minh họa đồ thị logic với tập đỉnh V = {A, B, C, D, E} tập cạnh E = {a, c, b, d, e} 12 2.6 Quan hệ đỉnh A,B cạnh e 12 2.7 Quan hệ cắt crossG ⊆ EG × EG 13 2.8 Quan hệ thứ tự (e,f,g) với (e,g,f) 13 2.9 Caption for LOF 14 2.10 Caption for LOF 15 2.11 Lưu đồ hoạt động chương trình vẽ đồ thị 17 2.12 Sơ đồ lớp chương trình 18 2.13 Sơ đồ lớp hỗ trợ sử dụng chương trình 19 2.14 Giao diện chương trình - menu vùng vẽ 20 2.15 Chương trình chạy lần 21 2.16 Hộp thoại yêu cầu nhập số đỉnh 21 2.17 Hộp thoại yêu cầu chọn quan hệ cạnh đồ thị 21 2.18 Đồ thị vẽ từ thông tin cung cấp 22 2.19 Menu "Thao tác" chương trình 22 2.20 Đồ thị vẽ lại, giữ nguyên thông số trước 23 2.21 Hộp thoại cho phép chỉnh sửa lại đồ thị, ta bỏ bớt cạnh AC đồ thị 23 2.22 Đồ thị vẽ lại với thông tin mới, cạnh AC loại bỏ so với Hình 2.18 24 2.23 Menu cho phép chọn dạng đồ thị - Đồ thị tự hay đồ thị thường 24 2.24 Minh họa đồ thị vẽ theo dạng tự 25 2.25 Minh họa đồ thị vẽ theo dạng thường 25 2.26 Menu cho phép chuyển qua lại không gian chiều chiều 2.27 Đồ thị không gian chiều 26 27 2.28 Đồ thị không gian chiều tương tác 28 2.29 Minh họa hoạt động chương trình vẽ đồ thị khơng gian chiều 29 2.30 Caption for LOF 30 2.31 Caption for LOF 39 2.32 Đồ thị chương trình thực 40 2.33 Minh họa việc sinh ngẫu nhiên đỉnh 40 2.34 Minh họa điểm nằm nằm tam giác 41 2.35 Minh họa đa giác lồi 42 2.36 Minh họa đa giác lõm 42 2.37 Đồ thị thường 44 2.38 Minh họa vẽ cạnh trường hợp góc preEdge = DAC góc xét α = DAB với α > preEdge 45 2.39 Minh họa vẽ cạnh trường hợp góc preEdge = DAC góc xét α = DAB với α < preEdge 45 2.40 Đồ thị tự 47 2.41 Minh họa cơng thức (2.20) (2.21) đường tròn 50 2.42 Hai hình ellipse, hình to hình nhỏ 51 2.43 Hai hình ellipse chồng lên 51 2.44 Xóa nửa bên hình ellipse nhỏ 51 2.45 Xóa nửa bên hình ellipse lớn 52 2.46 Sự dao động đáng kể hình dạng đường cong phép nội suy Lagrange tăng số lượng điểm sử dụng 55 2.47 Đồ thị biểu diễn phép nội suy tuyến tính Lagrange tập hợp điểm cho trước 56 2.48 Các menu có chương trình 58 Chương Giới thiệu đề tài, lý chọn kết mong đợi 1.1 Giới thiệu đề tài Vấn đề ứng dụng lý thuyết đồ thị ứng dụng nhiều hệ thống đồ số hay GIS (hệ thống thông tin địa lý) Do đó, vấn đề giảm thiểu sở lưu trữ liệu đồ (đồ thị) đến mức tối đa mà giữ nguyên trạng đồ (đồ thị) cấp thiết Đề tài nghiên cứu ứng dụng kết Emeric Bên cạnh mong muốn phát triển kết cho số trường hợp riêng đặc biệt 1.2 Lý chọn đề tài Vấn đề nêu đề tài vấn đề mới, có tiềm mở rộng tương lai Tuy nhiên, vấn đề dừng lại việc nghiên cứu lý thuyết mà chưa có ứng dụng thực tiễn để minh họa vấn đề Chính thế, chúng tơi mong muốn thực vấn đề nêu đề tài, giới hạn số trường hợp đặc biệt Thơng qua việc thực nó, chúng tơi dựa vào tiếp tục phát triển mở rộng lý thuyết 1.3 Phương pháp nghiên cứu Dựa kết việc nghiên cứu lý thuyết đề tài, đề phương pháp nghiên cứu sau: - Tiếp tục đào sâu nghiên cứu lý thuyết - Nghiên cứu ứng dụng, công cụ để thực đề tài - Dựa nghiên cứu được, thực kết đạt thành mơ hình 2D - 3D 1.4 Kết mong đợi Xây dựng ứng dụng minh họa từ kết Phát triển lý thuyết cho số trường hợp đặc biệt 1.5 Kết cấu khóa luận Khóa luận bao gồm phần sau • Chương 1: Giới thiệu đề tài • Chương 2: Nội dung nghiên cứu • Chương 3: Triển vọng ứng dụng đề tài Chương Nội dung nghiên cứu 2.1 2.1.1 Cơ sở lý thuyết đề tài Tóm tắt đề tài Biễu diễn hình vẽ đồ thị cấu trúc logic monadic bắt đầu phát triển Courcelle cộng vào năm 1998 Cơng trình mối liên hệ thành phần cấu trúc đồ thị như: mối quan hệ giao nhau, thứ tự cạnh đỉnh đồ thị theo chiều nhằm giúp vẽ đồ thị hoàn chỉnh cho dạng đồ thị đầy đủ (graph complete) Tiếp nối công việc Courcell, Gioan công bố công trình vẽ đồ thị phẳng cấu trúc logic bậc bậc hai Bài báo giới thiệu kết biểu diễn đồ thị cấu trúc logic số trường hợp đặc biệt 2.1.2 Các khái niệm sử dụng đề tài - Đỉnh (vertex) - Cạnh (edge) - Cấu trúc đồ thị (logical structure) - Tam giác biến (triangle mutations) Đồ thị mà chúng tơi trình bày giới thiệu báo hữu hạn, không khuyên liên thông Ta ký hiệu tập hợp đỉnh đồ thị G VG hay V , tập hợp cạnh đồ thị EG hay E Một cách hình thức, ta xem mặt phẳng S mặt phẳng biểu diễn hình học 2D ( cách tương tự biểu diễn hình máy tính PC ) 2.1.3 Phạm vi nghiên cứu Ta gọi hình vẽ đồ thị mặt phẳng S ánh xạ điểm tương ứng với đỉnh đồ thị G =< V, E >, đường cong tương ứng với cạnh theo ràng buộc sau để tránh việc đồ thị dạng tự rơi vào lớp tốn NP-Complex - khơng giải được: • D1: Hai đỉnh đồ thị không biểu diễn điểm B Courcelle, The monadic second-order logic of graphs XIII: graph drawings with edge crossings, Th Comp Sci 244, pp 63-94 (2000) E Gioan – Complete graph drawings up to triangle mutations - LNCS, 2005, Volume 3787/2005, 139 − 150 Hình 2.1: Ví dụ minh họa điều kiện trường hợp D1 Trên hình ví dụ minh họa cho điều kiện D1, ta thấy hình bên trái, đỉnh có trùng tên, điều sai với điều kiện đề tài • D2: Một đường cong biểu diễn cạnh đồ thị đường nối liền hai đỉnh đồ thị Hai đường cong cắt tối đa lần Hai đường cong giao cắt Hình 2.2: Ví dụ minh họa điều kiện trường hợp D2 Ở hình bên trái, cạnh đồ thị cắt điểm, hình bên phải, có cạnh cắt điểm • D3: Ba đường cong khơng giao (cắt) điểm Chúng có điểm chung xuất phát từ đỉnh 10 Hình 2.3: Ví dụ minh họa điều kiện trường hợp D3 Như hình bên, ta thấy đồ thị bên trái vi phạm điều kiện đề tài, cạnh cắt điểm Còn bên phải đỉnh A đỉnh xuất phát cạnh, phù hợp với điều kiện đề tài 2.1.4 Cấu trúc logic đồ thị Ví dụ minh họa cấu trúc logic đồ thị Hình 2.4: Minh họa đồ thị logic với tập đỉnh V = {A, B, C, D, E} tập cạnh E = {a, b, c, d, e} 11 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 } } drawEdge ( graphics2d , e , preEdge , preAngle ) ; if ( preEdge != null ) { // neu nam cung dinh preAngle = angle2Edge (e , preEdge ) ; if ( preAngle > 0) { preEdge = e ; } else { preEdge = null ; preAngle = 0; } } else { preEdge = e ; preAngle = 0; } } Đoạn mã minh họa cho việc vẽ cạnh trước cạnh sau: 10 11 12 13 14 15 16 17 18 19 if ( preEdge == null ) // neu truoc no khong co canh nao g2d drawLine ( from , to ) ; else { // tinh goc giua canh moi va canh cu double angle = angle2Edge (e , preEdge ) ; if ( angle > preAngle || angle < 0) g2d drawLine ( from , to ) ; else { // ve kieu cong L a g r a n g e // nam sau -> ve binh thuong // g2d drawLagrange ( arrP ) ; } } Với đồ thị tự do, công việc đơn giản cần vẽ cạnh nối với đỉnh mà không cần quan tâm đến thứ tự cần vẽ Đoạn code sau minh họa cho việc vẽ nối cạnh đồ thị tự if ( m _ is F re eD r aw in g ) { Random r = new Random () ; if ( r nextBoolean () ) g2d drawSpings ( from , to ) ; // ve theo kieu xoan oc lo xo else 46 10 11 g2d drawLine ( from , to ) ; return ; } Sau thực thao tác vẽ, kết ta thu Hình 2.40: Đồ thị tự Các lớp hỗ trợ Cũng tương tự không gian chiều, với không gian chiều xây dựng số lớp hỗ trợ để giúp cho việc cài đặt đồ thị Các lớp hỗ trợ gồm có phần lớp hỗ trợ đồ họa lớp hỗ trợ toán học Cac lớp hỗ trợ bao gồm lớp sau • Các lớp hỗ trợ đồ họa: GLCanvas2D, GLGraphics2D • Các lớp hỗ trợ tốn học: Geometry2D, LineEq, Polymonial, Term • Các lớp khác: EdgeDlg2D Trong khơng gian chiều, số lớp có thay đổi như: Các lớp hỗ trợ toán học • Lớp LineEq giúp thực đối tượng đường thẳng không gian chiều theo công thức A.x + B.y + C = Ngoài ra, đối tượng đường thằng cho phép người dùng vào điểm để xem điểm thuộc miền đường thẳng với công thức public double resubs tituti on ( Point p ) { return A * p x + B * p y + C ; } 47 • Lớp Geometry2D tương tự lớp Geometry3D, lớp cung cấp phương thức ỗ trợ tinh toán như: xoay điểm khơng gian, tính góc điểm, đoạn thẳng, tính diện tích tam giác, chuyển đổi từ radians sang độ ngược lại Một số phương thức tiêu biểu lớp kể đến như: - Tính khoảng cách điểm khơng gian chiều theo công thức sau: d= (Bx − Ax )2 + (By − Ay )2 (2.8) - Xoay điểm quanh điểm trục cho trước Giả sử ta có điểm P, điểm xoay quanh điểm C cho trước với góc α ta có cơng thức sau dx = Px − Cx (2.9) dy = Py − Cy (2.10) Px = dx cos α − dy sin α + Cx (2.11) Py = dy sin α + dy cos α + CY (2.12) (2.13) - Lấy góc điểm cho trước Giả sử ta có điểm A, B, C góc α = ABC tính cơng thức sau a = distance(B, A) (2.14) b = distance(B, C) (2.15) c = distance(A, C) a2 + b2 − c2 α = arccos 2ab (2.16) (2.17) • Lớp Term: lớp thực cho khái niệm số hạng Một số hạng gồm có thành phần là: hệ số số mũ Ví dụ 2x3 số hạng Ngồi ra, có chức số vào số hạng • Lớp Polymonial 11 thực cho khái niệm đa thức biến Một đa thức biến gồm có nhiều số hạng, có dạng sau p(x) = a0 + a1 x + a2 x2 + + an−1 xn−1 + an xn (2.18) Các hệ số ∈ R đa thức biến R Nếu an = p(x) đa thức biến bậc n Đa thức viết ngắn gọn nhờ kí hiệu σ (sigma) i=0 p(x) = xi (2.19) n Với việc cài đặt đa thức, chức nhập đa thức, lớp đa thức có chức tính tốn, rút gọn cộng, trừ, nhân đa thức GLCanvas2D Đây lớp thực vùng vẽ Tương tự không gian chiều, lớp có chức nơi để ta vẽ lên Việc vẽ lên thông qua đối tượng GL, thực thư viện đồ họa OpenGL Việc cài đặt, khởi tạo giống môi trường không gian chiều 11 Có tham khảo thêm Wikipedia: Polymonial 48 GLGraphics2D Đây lớp giao tiếp với thư viện đồ họa OpenGL bên để thực thao thác vẽ hình học phẳng Bản chất GLGraphics2D tương tự GLGraphics3D giới hạn vùng nhìn sử dụng phép chiếu song song để thực môi trường không gian chiều Trong lớp hỗ trợ này, cài đặt số thành phần bao gồm • Phần khởi tạo: người dùng cần phải cung cấp thông số để khởi tạo đối tượng GLGraphics2D phần Thuộc tính GLGraphics2D gồm có: GL2 m_gl ; GLU m_glu ; GLUT m_glut ; TextRenderer m_tr ; Dimension Color3f Color3f dimension ; m_drawColor = new Color3f ( Color BLACK ) ; m_fillColor = new Color3f ( Color WHITE ) ; Phương thức khởi tạo bao gồm thông tin đối tượng vẽ kích thước vùng vẽ: // // dat che ve d m_gl glMatrixMode ( GL2 GL_PROJECTION ) ; m_gl glOrtho (0 , dimension getWidth () , dimension getHeight () , , , 1) ; m_gl glMatrixMode ( GL2 GL_MODELVIEW ) ; // cai dat mot so thuoc tinh khac Chế độ vẽ không gian chiều thực qua phép chiếu song song glOrthor với thơng tin (left, right, bottom, top, nearVal, farVal) • Các phương thức vẽ: giống GLGraphics3D, GLGraphics2D ta cần định nghĩa số phương thức vẽ khác Trong không gian chiều, phương thức vẽ gồm có: vẽ đường thẳng, đường tròn, ellipse, vẽ cung, vẽ đường benzier, đường cong dựa việc nội suy đa thức Lagrange - Vẽ đường thẳng: đường thẳng đường OpenGL hỗ trợ Do đó, ta cần dựa vào hàm OpenGL cung cấp sẵn thực phương thức Phương thức nhận vào tọa độ hai điểm A, B tiến hành vẽ đường thẳng nối tọa độ hai điểm Cài đặt sau: 10 11 12 13 14 public void drawLine ( Point2D A , Point2D B ) { m_gl glPushMatrix () ; // dat mau cho duong thang m_gl glColor3f ( m_drawColor R , m_drawColor G , m_drawColor B ) ; m_gl glBegin ( GL2 GL_LINES ) ; m_gl glVertex2d ( A getX () , A getY () ) ; m_gl glVertex2d ( B getX () , B getY () ) ; m_gl glEnd () ; m_gl glPopMatrix () ; } - Vẽ đường tròn: Với đường tròn, thư viện đồ họa OpenGL khơng hỗ trợ sẵn Vì vậy, ta phải tự cài đặt phương thức để vẽ đường tròn Giả sử, ta có đường tròn có bán kính r = 1, P 49 điểm nằm đường tròn Gọi PO đường thẳng nối từ gốc tọa độ O(0,0) tới điểm P Đưởng thẳng PO tạo với trục Ox góc α Ta có tọa độ điểm P suy từ công thức sau: Px = cosα (2.20) Py = sinα (2.21) Hình 2.41: Minh họa cơng thức (2.20) (2.21) đường tròn Từ đó, dựa vào (2.20) (2.21), ta vẽ vòng tròn cách cho góc α chạy từ 0◦ đến 360◦ Ta tìm tập điểm P, nối tập điểm lại, ta có đường tròn Tuy nhiên, áp dụng cơng thức này, đường tròn ln ln vẽ với tâm trùng với gốc tọa độ O(0,0) bán kính r = Vì vậy, ta cần dời tâm đến điểm cần vẽ, tính tốn lại cho đường tròn có bán kính mong muốn Với C tâm đường tròn, r bán kính, ta có cơng thức tổng qt sau Px = r.cosα + Cx (2.22) Py = r.sinα + Cy (2.23) Phương pháp vẽ nêu cài đặt sau: 10 11 12 13 14 15 16 17 18 19 public void drawCircle ( Point2D center , double radius ) { double angle , x , y ; // ve duong thang chinh m_gl glColor3f ( m_drawColor R , m_drawColor G , m_drawColor B ) ; m_gl glBegin ( GL GL_LINE_LOOP ) ; for ( int i =0; i B y -> doi vi tri A va B Point tmpA , tmpB ; if ( A y ve duong thang noi toi tmp1 x = x + ( D E FA UL T _W _L A RG E - D EF AU L T_ W _S MA L L ) - 5; tmp1 y = y ; if ( Geometry2D distance ( tmp1 , tmp ) < ( D E FA UL T _W _L A RG E ) ) { drawLine ( tmp1 , tmp ) ; break ; } } else { // ve duong cong len drawArc (x , y , DEFAULT_W_SMALL , DEFAULT_H_LARGE , 180 , 360) ; s = false ; } } // rotate back rotateR ( - angle , tmpA x , tmpA y ) ; } 53 - Vẽ đường cong Lagrange: đường cong Lagrange thực dựa theo khái niệm cách tính trình bày Đa thức Lagrange 12 Xét dãy điểm mặt phẳng (x0 , y0 ), (x1 , y1 ), , (xn , yn ) đó, xi < xj với i < j Đa thức nội suy bậc n xác định sau: n fn (x) = yi Li,n (x) (2.24) i=0 đó, Li,n (x) = (x − x0 ) (x − xi−1 )(x − xi+1 ) (x − xn ) (xi − x0 ) (xi − xi−1 )(xi − xi+1 ) (xi − xn ) (2.25) Cơng thức biểu diễn ngắn gọn sau: n fn (x) = i=0 n yi ( j=0 j=i x − xj ) xi − xj (2.26) có nghĩa tích n phần tử với j biến thiên từ đến n ngoại trừ j = 12 Đồ họa máy tính mơ hình hóa hình học – Vera B.Anand – Người dịch: TS Nguyễn Hữu Lộc – Nhà xuất Tổng hợp TP.HCM – 2000 54 ... Thanh menu có chức nhập đồ thị, chỉnh sử đồ thị, lựa chọn môi trường vẽ hay kiểu đồ thị • Vùng hiển thị: hiển thị đồ thị tương ứng với cấu trúc định sẵn Ngồi ra, với đồ thị vẽ khơng gian chiều,... ra, với đồ thị chiều, ta chọn dạng đồ thị Hình 2.23: Menu cho phép chọn dạng đồ thị - Đồ thị tự hay đồ thị thường 24 Hình 2.24: Minh họa đồ thị vẽ theo dạng tự Hình 2.25: Minh họa đồ thị vẽ theo... to ) ; 31 - Cuối cùng, đồ thị vẽ đỉnh tên đỉnh tương ứng lên vùng không gian vẽ Đồ thị vẽ thiếu lớp hỗ trợ việc vẽ đồ thị, đề tài tách biệt lớp hỗ trợ đồ thị chiều với đồ thị chiều Các lớp hỗ trợ