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 IH CM TP.H CHÍ MINH KHOA CÔNG NGH THÔNG TIN KHÓA LU N T T NGHI P tài: V đ th b ng c u trúc logic GV H ng D n : TR NG HOÀNG VINH SV Th c hi n : 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 toàn thể thầy cô giáo phụ trách giảng dạy trường Đại học Mở Thành Phố Hồ Chí Minh nói chung quý thầy cô khoa CÔNG NGHỆ THÔNG TIN nói riêng Trong suốt trình học tập trường, quý thầy cô 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, quý thầy cô 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 chuyên môn, qua góp phần lớn việc tạo điều kiện thuận lợi cho trình học tập, giúp 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 hoàn thành khóa luận thời hạn Do chưa có nhiều kinh nghiệm, nên trình thực đề tài nhiều thiếu sót Tôi mong muốn nhận đóng góp ý kiến quý thầy cô bạn để đề tài hoàn thiện Cuối cùng, gửi lời chúc tốt đẹp đến quý thầy cô khoa CÔNG NGHỆ THÔNG TIN toàn thể thầy cô 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 7 1.2 1.3 Lý chọn đề tài Phương pháp nghiên cứu 7 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 9 2.1.2 Các khái niệm sử dụng đề tài 2.1.3 2.1.4 2.1.5 Phạm vi nghiên cứu Cấu trúc logic đồ thị Các quan hệ đồ thị logic 11 12 Cơ sở kĩ thuật đề tài 13 2.2.1 2.2.2 Ngôn ngữ lập trình: Java SE Thư viện đồ họa hỗ trợ: OpenGL 13 15 2.2.3 Thư viện API JOGL giúp tương tác với OpenGL thông qua Java Hiện thực đề tài 16 16 2.3.1 Cấu trúc chương trình 16 2.3.2 2.3.3 Minh họa sử dụng Cài đăt 19 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 2.4 Ví dụ minh họa điều kiện trường hợp D3 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 11 2.5 2.6 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} Quan hệ đỉnh A,B cạnh e 12 12 2.7 2.8 Quan hệ cắt crossG ⊆ EG × EG Quan hệ thứ tự (e,f,g) với (e,g,f) 13 13 2.9 Caption for LOF 14 2.10 Caption for LOF 2.11 Lưu đồ hoạt động chương trình vẽ đồ thị 15 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 2.14 Giao diện chương trình - menu vùng vẽ 19 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 2.17 Hộp thoại yêu cầu chọn quan hệ cạnh đồ thị 21 21 2.18 Đồ thị vẽ từ thông tin cung cấp 2.19 Menu "Thao tác" chương trình 22 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ị 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 23 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ự 2.25 Minh họa đồ thị vẽ theo dạng thường 25 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 2.29 Minh họa hoạt động chương trình vẽ đồ thị không gian chiều 28 29 2.30 Caption for LOF 30 2.31 Caption for LOF 2.32 Đồ thị chương trình thực 39 40 2.33 Minh họa việc sinh ngẫu nhiên đỉnh 2.34 Minh họa điểm nằm nằm tam giác 40 41 2.35 Minh họa đa giác lồi 42 2.36 Minh họa đa giác lõm 2.37 Đồ thị thường 42 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 2.39 Minh họa vẽ cạnh trường hợp góc preEdge = DAC góc xét α = DAB 45 với α < preEdge 2.40 Đồ thị tự 45 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ỏ 2.43 Hai hình ellipse chồng lên 51 51 2.44 Xóa nửa bên hình ellipse nhỏ 2.45 Xóa nửa bên hình ellipse lớn 51 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ế, 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ó, 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à 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 toá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 Lagrange // 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ợ toá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) a + b2 − c α = 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 Ngoà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 toá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 luôn 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 toá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 quát 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 n fn (x) = i=0 ( 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 Hình 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 Có thể thấy rằng, thừa số yi x = xi , x giá trị tọa độ khác Với n = 1, ta phương trình đường thẳng qua điểm: x − x0 x − x1 y0 − y1 x0 − x1 x1 − x0 x0 − x = y0 + (y1 − y0 )( ) x0 − x1 f1 (x) = Đa thức Lagrange có khuyết điểm bậc đa thức phụ thuộc vào số lượng điểm sử dụng Nếu cần độ xác cao số lượng điểm sử dụng tăng, kết tạo đa thức bậc cao có dao động đáng kể hình dạng đường 55 cong, ví dụ Hình 2.40 Trong hầu hết ứng dụng kĩ thuật, dao động không chấp nhận Ví dụ minh họa Sử dụng đa thức Lagrange để thực phép nội suy điểm sau: P1 (1, 1), P2 (2, 2), P3 (3, 3), P4 (4, 2), P5 (5, 1) Cách giải Phương trình (2.21) sử dụng để giải toán này: (x − 1)(x − 3)(x − 4)(x − 5) (x − 2)(x − 3)(x − 4)(x − 5) ](1) + [ ](2) (1 − 2)(1 − 3)(1 − 4)(1 − 5) (2 − 1)(2 − 3)(2 − 4)(2 − 5) (x − 1)(x − 2)(x − 4)(x − 5) (x − 1)(x − 2)(x − 3)(x − 5) +[ ](3) + [ ](2) (3 − 1)(3 − 2)(3 − 4)(3 − 5) (4 − 1)(4 − 2)(4 − 3)(4 − 5) (x − 1)(x − 2)(x − 3)(x − 4) ](1) +[ (5 − 1)(5 − 2)(5 − 3)(5 − 4) f (x) = [ Hình 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 Đồ thị phương trình nội suy điểm cho trước nêu lên hình Hình 2.41 Đường thẳng qua tất điểm, biểu diễn kết cách xác Dễ thấy hàm nội suy Lagrange dao động chung quanh đồ thị giá trị xác Dựa theo khái niệm trình bày trên, phương thức vẽ đường cong dựa việc nội suy đa thức Lagrange thực sau: Đầu tiên, với điểm cho trước, ta tìm đa thức rút gọn từ công thức (2.24) Sau có công thức này, ta giá trị x từ điểm đến điểm cuối tập điểm mà ta cần vẽ đa thức Kết thu sau thực phép tập tọa độ (x, y) tương ứng Với tập tọa độ này, ta cần nối tất chúng lại có đường cong Lagrange 56 Edge2D Lớp hộp thoại có chức tương tự Edge3D, đối tượng cho phép nhập thông tin cần thiết để từ thông tin xây dựng nên cấu trúc đồ thị vẽ đồ thị Lớp hộp thoại cung cấp thông tin cho đồ thị việc nhập đồ thị cho phép chỉnh sửa lại thông tin đồ thị Các thuộc tính hộp thoại gồm private final JPanel contentPanel = new JPanel () ; // mang chua cac Check Box private ArrayList < JCheckBox > m_checkBoxes = new ArrayList < JCheckBox >() ; private Graph2D m_graph ; private boolean okPressed ; private boolean modifyMode = false ; Cách thức hoạt động lớp tương tự đồ thị không gian chiều Cài đặt Applet Đây lớp chương trình, lớp dùng kết hợp thành phần trình bày vào chương trình Lớp kế thừa từ JApplet, có khả nhúng vào web cách dễ dàng Ngoài thuộc tính lớp lưu trữ thông tin đồ thị đối tượng cần thiết Lớp Applet có thuộc tính sau: 10 11 GLCanvas3D canvas3d ; GLCanvas2D canvas2d ; // thong so thi Graph3D graph3d = new Graph3D () ; Graph2D graph2d = new Graph2D () ; // thong tin che boolean mode3d = false ; enum GraphStyle { NORMAL , FREE_STYLE }; Như trình bày trên, lớp Applet để chạy chương trình kết thừa từ lớp JApplet Do đó, ta cần phải định nghĩa lại phương thức sau để chương trình chạy • init(): phương thức để khởi tạo Applet, gọi Applet khởi chạy Trong hàm này, cài đặt thông số cho đồ thị, môi trường vẽ giao diện chương trình sau // thiet lap OpenGL GLProfile profile = GLProfile getDefault () ; // cai dat che do hoa : OpenGL 1.0 , 2.0 , 3.0 O lay lay thong so mac dinh GL Capabi lities caps = new GLC apabil ities ( profile ) ; // chua thong so r e n d e r i n g // them tinh nang khu rang cua caps setNumSamples (16) ; // khu rang cua 16 mau caps s e t S a m p l e B u f f e r s ( true ) ; // bat buffer // khoi tao canvas3d 10 canvas3d = new GLCanvas3D ( caps , this ) ; 11 12 // khoi tao canvas2d 13 canvas2d = new GLCanvas2D ( caps , this ) ; 14 57 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 // gan canvas3d g etCont entPan e () add ( canvas2d ) ; // gioi han so khung hinh / giay bang cach su dung F P S A n i m a t o r animator = new FPSAnimator ( canvas3d , FPS , true ) ; animator start () ; // start the a n i m a t i o n loop setSize (800 , 600) ; // kich thuoc vung ve cho graph2d graph2d setDimension ( getSize () ) ; // gan menu vao chuong trinh i nitCom ponent s () ; Trong lúc khởi tạo, cho chương trình khởi tạo thông tin menu hiển thị thông qua hàm initComponents Hàm có chức sinh menu có chương trình hình sau Hình 2.48: Các menu có chương trình • destroy(): phương thức gọi thoát ứng dụng • start(), stop(): phương thức tự động gọi chương trình chạy chuyển qua chế độ Ngoài phương thức bắt buộc phải định nghĩa lại Trong lớp này, xây dựng phương thức giúp cho việc xử lý kiện tương ứng người dùng chọn vào menu tương ứng menu Một số phương thức kể đến như: • setGraphStyle( ): đặt chế độ đồ thị, có loại đồ thị tự đồ thị thường Chức có đồ thị không gian chiều • showInputDlg2D( ), showInputDlg3D( ): gọi hộp thoại cho phép nhập thông tin đồ thị Cho phép nhập số đỉnh đồ thị quan hệ đỉnh • showModifyDlg2D( ), showModifyDlg3D( ): gọi hộp thoại cho phép chỉnh sửa lại thông tin đồ thị, thông tin chỉnh sửa quan hệ cạnh đồ thị 58 Chương Triển vọng ứng dụng đề tài Mặc dù việc thực đề tài dừng lại mức bản, thu kết tích cực sau: • Đã xây dựng tổ chức chương trình • Sử dụng thư viện đồ họa để thực chương trình • Hiện thực phần đề tài, với mục tiêu người dùng xây dựng chỉnh sửa đồ thị theo ý Tuy nhiên, đề tài tồn đọng số khuyết điểm sau: • Do việc tính toán dựa nhiều vào số sinh ngẫu nhiên, đôi lúc chương trình hiển thị không theo ý muốn • Các thuật toán tính toán phức tạp, nặng nề Không phù hợp với số máy có cấu hình không cao • Một số lý thuyết chưa thực đầy đủ Đề tài có triển vọng phát triển tương lai, có điều kiện phát triển thành chương trình lớn thực số trường hợp đặc biệt đề tài, tiếp tục mở rộng phạm vi nghiên cứu, bổ sung hoàn thiện số thiếu sót mà chương trình mắc phải 59 Tài liệu tham khảo • Sách, báo: - [1] Complete Graph Drawings up to triangle mutations – Emeric Gioan – December 2004 - [2] Đồ 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 - [3] Đồ họa vi tính (Tập I, II) – Nguyễn Quốc Cường, Hoàng Đức Hải – Nhà xuất Giáo dục – 1999 - [4] OpenGL Programming Guide - Dave Shreiner - The Khronos OpenGL ARB Working Group - Addison-Wesley - 2010 • Internet - [5] Java Binding for the OpenGL API http://www.jogamp.org/jogl - [6] Tutorial on JOGL 2.0 http://www3.ntu.edu.sg/home/ehchua/programming/opengl/JOGL2.0.html - [7] Java SE Application Design With MVC http://www.oracle.com/technetwork/articles/javase/mvc-136693.html - [8]Java Documents http://docs.oracle.com/javase/1.4.2/docs/api/org/w3c/dom/Document.html - [9]Stack Overflow http://stackoverflow.com/questions/tagged/java - [10] Lagrange polynomial http://en.wikipedia.org/wiki/Lagrange_polynomial - [11] Polynomial http://en.wikipedia.org/wiki/Polynomial - [12] Heron’s fomula http://en.wikipedia.org/wiki/Heron’s_formula - [13]Một số diễn đàn http://diendan.congdongcviet.com http://www.javaworld.com/community/ 60 [...]... chỉnh sửa lại đồ thị, ở đây ta bỏ bớt cạnh AC trong đồ thị Chương trình sẽ vẽ lại với thông tin đã được cập nhật như sau: 23 Hình 2.22: Đồ thị được vẽ lại với thông tin mới, cạnh AC đã được loại bỏ so với Hình 2.18 • Ngoài ra, với đồ thị 2 chiều, ta còn có thể chọn dạng của đồ thị Hình 2.23: Menu cho phép chọn dạng của đồ thị - Đồ thị tự do hay đồ thị thường 24 Hình 2.24: Minh họa đồ thị được vẽ theo dạng... được đồ thị này Ví dụ như thêm, bớt một cạnh nào đó, hay có thể cho vẽ lại đồ thị với số đỉnh và số cạnh như cũ Chương trình cũng có khả năng cho phép tương tác với đồ thị, có thể xoay đồ thị quan những góc khác nhau để có thể quan sát rõ ràng hơn • Không gian 2 chiều: tương tự như với đồ thị được vẽ trong không gian 3 chiều, đồ thị trong không gian 2 chiều cũng cho phép nhập đồ thị, hiển thị đồ thị. .. dụng các chức năng của chương trình Thanh menu có các chức năng như 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 Ngoài ra, với đồ thị được vẽ trong không gian 3 chiều, ta còn có thể tương tác được với vùng không gian này để có thể xoay đồ thị theo các hướng khác nhau 6 Phiên bản hiện tại là JRE Version 7, xem... về cấu trúc của chương trình vẽ đồ thị, các thao tác sử dụng và những hiện thực từ lý thuyết mà chúng tôi đã làm được 2.3.1 Cấu trúc chương trình Trong phần này, cấu trúc của chương trình sẽ được trình bày theo hai phần chính, phần đầu tiên là lưu đồ hoạt đông của chương trình, và phần sau là sơ đồ các lớp đã được cài đặt trong chương trình Chương trình vẽ đồ thị hoạt động theo lưu đồ sau: 16 Lưu đồ. .. tiến hành bước vẽ các cạnh của đồ thị 2 - Việc vẽ các cạnh của đồ thị được thực hiện qua đoạn mã sau: 1 2 3 4 5 Point3f from , to ; from = e getFrom () getLocation () ; to = e getTo () getLocation () ; graphics3d drawLine ( from , to ) ; 31 3 - Cuối cùng, đồ thị sẽ vẽ các đỉnh và tên đỉnh tương ứng lên trên vùng không gian vẽ Đồ thị không thể được vẽ nếu thiếu các lớp hỗ trợ việc vẽ đồ thị, trong... thị đồ thị cũng nhưng chỉnh sửa đồ thị Song song đó, với đồ thị 2 chiều, chúng tôi còn mở rộng thêm một số tính năng nhắm mục đích minh họa rõ hơn cho lý thuyết, có thể kể đến như là chức năng hiển thị các cạnh của đồ thị theo một thứ tự, sắp xếp các đỉnh của đồ thị theo một thứ tự nhất định (từ trái sang phải, và theo chiều kim đồng hồ), chức năng vẽ đồ thị thường, đồ thị tự do Với những chức năng... chiều, 3 chiều, đồng thời quản lý thanh menu các chức năng ứng với cho từng loại đồ thị Chương trình chính này cũng đảm nhận việc quản lý cấu trúc đồ thị ứng với mỗi môi trường 28 Đồ thị trong không gian 3 chiều Hình 2.29: Minh họa hoạt động của chương trình vẽ đồ thị trong không gian 3 chiều Đồ thị không gian 3 chiều là đồ thị mà trong đó vị trí các đỉnh, các cạnh của nó được hiện thực trên môi trường... • Ngoài ra, ta có thể thay đổi đồ thị của hình dạng thông qua menu "Thao tác - Vẽ" Khi chọn menu này, chương trình sẽ tính toạn lại các thông tin cần thiết để vẽ lại đồ thị với hình dạng khác Hình 2.19: Menu "Thao tác" của chương trình Đồ thị được vẽ lại như sau: 22 Hình 2.20: Đồ thị được vẽ lại, giữ nguyên thông số trước đó Từ menu Tùy Chọn, ta có thể tùy chỉnh lại đồ thị như thêm hay bớt quan hệ giữa... ArrayList < Edge3D >() ; Đồ thị được cài đặt ở đây bao gồm một tập các đỉnh và các cạnh nối với đỉnh đó Đồ thị này cho phép thêm hay bớt các đỉnh, các cạnh thông qua các hàm get/set được cài đặt sẵn Đồng thời, đồ thị có khả năng hiển thị trên không gian 3 chiều thông qua phương thức draw( ) - phương thức này nhận vào một "không gian vẽ" và hiển thị lên trên không gian đó Đồ thị được hiển thị qua các bước sau:... cho phép nhập đồ thị, và hiển thị đồ thị trên cả hai không gian là không gian 2 chiều và không gian 3 chiều Theo đó, với chương trình này chúng tôi mong muốn minh họa được những lý thuyết mà chúng tôi đã nghiên cứu ở trên Cụ thể như sau: • Không gian 3 chiều: với đồ thị được vẽ trong không gian 3 chiều, chương trình cho phép minh họa việc nhập đồ thị theo ý người sử dụng, hiển thị đồ thị đã được nhập ... Một số chức có đồ thị chiều: - Vẽ đồ thị thông thường - Vẽ đồ thị tự do, đồ thị tự đồ thị vẽ với nét tự do, không bị giới hạn Để vẽ đồ thị dựa vào thông tin cug cấp, thao tác vẽ đồ thị gồm có bước... 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 Ngoà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