Thị biểu diễn phép nội suy tuyến tính và Lagrange đối với một tập hợp điểm cho trước

Một phần của tài liệu Vẽ đồ thị bằng cấu trúc logic (Trang 55 - 59)

2 Nội dung nghiên cứu

2.47 thị biểu diễn phép nội suy tuyến tính và Lagrange đối với một tập hợp điểm cho trước

2.41. Đường thẳng đi qua tất cả các điểm, biểu diễn kết quả một cách chính xác hơn. Dễ thấy là hàm nội suy Lagrange dao động chung quanh đồ thị các giá trị chính xác. Dựa theo những khái niệm được trình bày ở trên, phương thức vẽ đường cong dựa trên việc nội suy đa thứcLagrange được thực hiện như sau:

Edge2D

Lớp hộp thoại này có chức năng tương tự như Edge3D, là đối tượng cho phép nhập các thông tin cần thiết để từ các thông tin đó xây dựng nên cấu trúc đồ thị và vẽ đồ thị đó. Lớp hộp thoại cung cấp thông tin cho đồ thị này ngoài việc nhập đồ thị còn cho phép chỉnh sửa lại thông tin của đồ thị. Các thuộc tính của hộp thoại này gồm

1 p r i v a te final JPanel c o n t e n t P a n e l = new JPanel () ; 2

3 // mang chua cac C h e c k Box

4 p r i v a te ArrayList < JCheckBox > m _ c h e c k B o x e s = new ArrayList < JCheckBox >() ; 5

6 p r i v a te G r a p h 2 D m _ g r a p h ; 7 p r i v a te b o o l e a n o k P r e s s e d ;

8 p r i v a te b o o l e a n m o d i f y M o d e = false ;

Cách thức hoạt động của lớp này cũng tương tự như trên đồ thị trong không gian 3 chiều.

Cài đặt Applet

Đây là lớp chính của chương trình, lớp này dùng kết hợp các thành phần đã trình bày ở trên vào trong một chương trình duy nhất. Lớp này được kế thừa từ JApplet, vì vậy có khả năng nhúng vào nền web một cách dễ dàng. Ngoài ra thuộc tính của lớp này còn lưu trữ các thông tin về đồ thị cũng như các đối tượng cần thiết.

Lớp Applet có các thuộc tính như sau:

1 G L C a n v a s 3 D c a n v a s 3 d ; 2 G L C a n v a s 2 D c a n v a s 2 d ; 3 4 // t h o n g so do thi 5 G r a p h 3 D g r a p h 3 d = new G r a p h 3D () ; 6 G r a p h 2 D g r a p h 2 d = new G r a p h 2D () ; 7 8 // t h o n g tin che do 9 b o o l e a n mode3d = false ; 10 11 enum G r a p h S t y l e { NORMAL , F R E E _ S T Y L E };

Như đã trình bày ở trên, do lớp Applet để chạy chương trình chính này kết thừa từ lớp JApplet. Do đó, ta cần phải định nghĩa lại các phương thức sau để chương trình có thể chạy được

• init(): đây là phương thức để khởi tạo Applet, được gọi duy nhất khi Applet được khởi chạy. Trong hàm này, chúng tôi cài đặt các thông số cho đồ thị, môi trường vẽ cũng như giao diện của chương trình như sau

1 // t h i e t lap O p e n G L

2 G L P r o f i l e p r o fi l e = G L P r o f i l e . g e t D e f a u l t () ; // cai dat che do do hoa : O p e n G L 1.0 , 2.0 , 3.0 ... O lay lay t h o n g so mac dinh

3 G L C a p a b i l i t i e s caps = new G L C a p a b i l i t i e s ( p r o f il e ) ; // chua t h o n g so r e n d e r i n g

4

5 // them tinh nang khu rang cua

6 caps . s e t N u m S a m p l e s (16) ; // khu rang cua 16 mau

7 caps . s e t S a m p l e B u f f e r s ( true ) ; // bat b u f f e r

8

9 // khoi tao c a n v a s 3 d

10 c a n v a s 3 d = new G L C a n v a s 3 D ( caps , this ) ; 11

12 // khoi tao c a n v a s 2 d

13 c a n v a s 2 d = new G L C a n v a s 2 D ( caps , this ) ; 14

15 // gan c a n v a s 3 d

16 g e t C o n t e n t P a n e () . add ( c a n v a s 2 d ) ; 17

18 // gioi han so k h u n g hinh / giay bang cach su dung F P S A n i m a t o r

19 a n i m a t o r = new F P S A n i m a t o r ( canvas3d , FPS , true ) ; 20 a n i m a t o r . start () ; // s t a r t the a n i m a t i o n loop

21 22

23 s e t S i z e (800 , 600) ; 24

25 // kich t h u o c vung ve cho g r a p h 2 d

26 g r a p h 2 d . s e t D i m e n s i o n ( g e t S i z e () ) ; 27

28 // gan menu vao c h u o n g t r i n h

29 i n i t C o m p o n e n t s () ;

Trong lúc khởi tạo, chúng tôi cũng cho chương trình khởi tạo luôn thông tin của menu hiển thị thông qua hàminitComponents. Hàm này có chức năng sinh ra các menu chính có trong chương trình như hình sau

Hình 2.48: Các menu chính có trong chương trình

• destroy(): là phương thức được gọi khi thoát ứng dụng

• start(), stop(): phương thức được tự động được gọi khi chương trình được chạy hoặc chuyển qua chế độ nền.

Ngoài các phương thức bắt buộc phải định nghĩa lại ở trên. Trong lớp này, chúng tôi còn xây dựng các phương thức giúp cho việc xử lý các sự kiện tương ứng khi người dùng chọn vào các menu tương ứng trên thanh menu. Một số các phương thức có thể kể đến như:

• setGraphStyle(...): đặt chế độ của đồ thị, có 2 loại là đồ thị tự do và đồ thị thường. Chức năng này chỉ có trên đồ thị trong không gian 2 chiều

• showInputDlg2D(...), showInputDlg3D(...): gọi hộp thoại cho phép nhập thông tin của đồ thị. Cho phép nhập số đỉnh của đồ thị và quan hệ giữa các đỉnh đó

• showModifyDlg2D(...), showModifyDlg3D(...): gọi hộp thoại cho phép chỉnh sửa lại thông tin của đồ thị, thông tin chỉnh sửa ở đây đó là quan hệ giữa các cạnh của đồ thị.

Chương 3

Triển vọng và ứng dụng của đề tài

Mặc dù việc hiện thực đề tài chỉ mới dừng lại ở mức cơ bản, nhưng đã thu được những kết quả tích cực sau:

• Đã xây dựng được tổ chức của chương trình

• Sử dụng thư viện đồ họa để có thể hiện thực được chương trình

• Hiện thực được một phần của đề tài, với mục tiêu là người dùng có thể xây dựng và chỉnh sửa đồ thị theo ý mình

Tuy nhiên, đề tài vẫn còn tồn đọng một số khuyết điểm như sau:

• Do việc tính toán dựa nhiều vào các số được sinh ngẫu nhiên, vì vậy đôi lúc chương trình hiển thị không theo ý muốn.

• Các thuật toán được tính toán phức tạp, nặng nề. Không phù hợp với một số máy có cấu hình không được cao.

• Một số lý thuyết chưa được hiện thực đầy đủ.

Đề tài rất có triển vọng phát triển trong tương lai, nếu có điều kiện sẽ có thể phát triển thành một chương trình lớn hiện thực một số trường hợp đặc biệt của đề tài, tiếp tục mở rộng phạm vi nghiên cứu, bổ sung cũng như hoàn thiện một số thiếu sót mà chương trình vẫn còn mắc phải ...

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 và 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 bản 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 bản 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/

Một phần của tài liệu Vẽ đồ thị bằng cấu trúc logic (Trang 55 - 59)