THUẬT TOÁN CƠ BẢN TRONG ĐỒ HỌA 2D 1.1 Thuật toán vẽ đoạn thẳng 1.1.1 Thuật toán DDA Digital Defferencial Analyzer hay thuật toán tăng dần BasicIncremental Algorithm 1.1.2 Thuật toán Bres
Trang 1TRƯỜNG ĐẠI HỌC ĐIỆN LỰC KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO CHUYÊN ĐỀ HỌC PHẦN
ĐỒ HỌA MÁY TÍNH
ĐỀ TÀI:
Mô phỏng sự di chuyển của hành tinh
Sinh viên thực hiện : Đặng Cao Minh
Hà Nội, tháng 6 năm 2022
Trang 30 | P a g e
Trang 4MỤC LỤC
LỜI CẢM ƠN
LỜI MỞ ĐẦU
CHƯƠNG 1 THUẬT TOÁN CƠ BẢN TRONG ĐỒ HỌA 2D
1.1 Thuật toán vẽ đoạn thẳng
1.1.1 Thuật toán DDA (Digital Defferencial Analyzer) hay thuật toán tăng dần (BasicIncremental Algorithm)
1.1.2 Thuật toán Bresenham vẽ đường thẳng
1.1.3 Thuật toán trung điểm vẽ đường thẳng
1.1.4 Thuật toán vẽ đường tròn ,elip
1.1.4.1 Thuật toán Bresenham vẽ đường tròn
1.1.4.2 Thuật toán trung điểm vẽ đường tròn
1.1.4.3 Thuật toán trung điểm vẽ elip
CHƯƠNG 2 PHÁT TRIỂN ỨNG DỤNG 3D
2.1 Mô tả bài toán
2.2 Mô tả chuyển động của hai hành tinh
Trang 52 | P a g e
Trang 6LỜI MỞ ĐẦU
Đồ họa máy tính là một lĩnh vực của khoa học máy tính nghiên cứu về cơ sở toán học, các thuật toán cũng như các kĩ thuật để cho phép tạo, hiển thị và điều khiển hình ảnh trên màn hình máy tính
Đồ họa máy tính ngày nay được ứng dụng rất rộng rãi trong nhiều lĩnh vực khoa học, kĩ thuật, nghệ thuật, kinh doanh, quản lí, … Các ứng dụng đồ họa rất đa dạng, phong phú và phát triển liên tục không ngừng Ngày nay, hầu như không có
chương trình ứng dụng nào mà không sử dụng kĩ thuật đồ họa để làm tăng tính hấpdẫn của mình
Việc mô tả dữ liệu thông qua các hình ảnh và màu sắc đa dạng của nó, các chương trình đồ họa thường thu hút người sử dụng bởi tính thân thiện, dễ dùng,… kích thích khả năng sang tạo và nâng cao năng suất làm việc
Là sinh viên chúng em được tìm hiểu và làm quen với một số kĩ thuật đồ họa trên
máy tính thông qua tài liệu, bài giảng do thầy Ngô Trường Giang giảng dạy Với
những kiến thức đã học em quyết định chọn đề tài: Xây dựng mô hình mô phỏng chuyển động 2 hành tinh bằng OpenGL hiện đại
Trang 7CHƯƠNG 1 THUẬT TOÁN CƠ BẢN TRONG
ĐỒ HỌA 2D 1.1 Thuật toán vẽ đoạn thẳng
1.1.1 Thuật toán DDA (Digital Defferencial Analyzer) hay thuật toán tăng dần (Basic Incremental Algorithm)
Input: Điểm đầu(x1,y1), điểm cuối(x2,y2), màu tô C
Output: Đoạn thẳng nối 2 điểm (x1,y1) (x2,y2) với
màu C
Phương trình đoạn thẳng đi qua 2 điểm
Chuyển đổi đường quét (Rasterization)
Biến đổi đường liên tục thành rời rạc(Sampling)
Scan conversion = Sampling
Yêu cầu chất lượng đường vẽ
-Hình dạng liên tục
-Độ dày và độ sáng đều
-Các pixel gần đường”lí tưởng “ được hiển thị
-Vẽ nhanh
DDA- Digital Differential Analyzer = Finite defferences
Cho giá trị bước nhảy trên một trục tính giá trị bước nhảy trên trục kia theo phươngtrình y=ax+b
Trang 8Với hệ số góc a nằm trong khoảng [0,1]
-dy=a.dx
-Nếu dx = 1 thì y(i+1)=y(i)+a
-Làm tròn vì số a bất kì
-Ý tưởng thuật toán: với mỗi bước hãy tính số gia trên cơ sở bước trước đó
Nhận xét thuật toán DDA:
-Không có phép nhân
-Có phép chia và làm tròn số >chậm
Qui tắc tổng quát khi vẽ đồ họa
-Cộng và trừ nhanh hơn nhân
-Nhân nhanh hơn chia
-Sử dụng bảng để đánh giá hàm rời rạc nhanh hơn tính toán
-Tính toán số nguyên nhanh hơn số thực
-Tránh các tính toán không cần thiết nhờ nhận ra các trường hợp đặc biệt của đường vẽ
1.1.2 Thuật toán Bresenham vẽ đường thẳng
Giả sử vừa vẽ điểm tại (xi,yi) bây giờ phải xác định điểm sẽ vẽ thuộc 1 trong 8 pixel liền kề (xi+1,yi),(xi-1,yi),(xi,yi-1),(xi,yi+1),
Trang 9Hình dạng đoạn thẳng phụ thuộc vào các giá trị dx và dy
-dx=0 đường thẳng song song trục y
-dy=0 đường thẳng song song trục x
-dx>0 tọa độ x biến thiên tăng dần
-dx<0 tọa độ x biến thiên giảm dần
-Xét tương tự với dy
-Nếu abs(dx)>abs(dy) : y=f(x)
- Nếu abs(dx)<abs(dy) : x=f(y)
Xét đoạn thẳng có hệ số góc 0≤m≤1
Trang 10Điểm vừa chọn là (x,y) ->
điểm tiếp theo sẽ vẽ là (x+1,y)
hay (x+1, y+1) Việc lựa chọn
sẽ phụ thuộc vào khoảng cách
d: d=d1-d2
-Nếu d>0 ó d1>d2 chọn NE xi+1,yi
-Nếu d<0 ó d1<d2 chọn E xi+1,y +1i
+d1=y +1-y=y +1-a(x +1)-bi i i
+d2=y-y =a(x +1)+b-yi i i
+d=d1-d2=-2a(x +1)+2y -2b+1i i
-Nếu chọn E => dnewE= d(xi+1,yi+1 )
=-2a(x +1)+2yi i-2b+1 +2-2a= d+2-2a=d+ ∆E
-Nếu chọn NE => dnewNE= d(xi+1,y )i
=-2a(x +1)+2yi i-2b+1 -2a= d-2a=d+ ∆NE
-Tìm dstart
-Giả sử điểm khởi đầu là xi,yi
dstart= -2a(xi+1)+2y -2b+1i
-Mà ta có yi=axi+b => axi=y -bi
dstart =-2a+1
Ta có a=dy/dx Nhân các vế với dx ta có
Trang 11Nếu d >0 vị trí vẽ tiếp theo là xi+1,yi
Ngược lại vị trí vẽ tiếp theo là xi+1,y +1i
3. Tiếp tục tăng x để tính d tiếp theo từ d trước đó
Nếu trước đó d >0 thì di i+1=d -2dyi
Ngược lại thì di+1=di-2dy+2dx n Nếu d vị trí vẽ tiếp theo là xi+1 i+2,yi
Ngược lại vị trí vẽ tiếp theo là xi+2,y +2i
4. Lặp lại bước 3 cho đến khi x= x2
1.1.3 Thuật toán trung điểm vẽ đường thẳng
Pitteway công bố năm 1967 , Van Aken cải tiến năm 1984
Giả sử ta đã chọn P để vẽ , xác định pixel tiếp theo tại N hay NE
-Giao của đường thẳng với Xp+1 tại Q, M là trung điểm của NE và E
Ý tưởng : M nằm phía nào của đưởng thẳng ,nếu M phía trên đường thẳng thì chọnE,ngược lại chọn NE
Nhiệm vụ : Xác định M ở đâu
Phương trình đường thẳng F(x,y) = ax+by+c
a = dy ,b=-dx,c=B.dx
Trang 12Giá trị hàm tại M: F(M) = F(xp+1,yp+1/2)=d
Nếu d>0 ,M nằm dưới đường thẳng chọn NE
Nếu d<0 M nằm phía trên chọn E
Nếu d=0 chọn E hay NE tùy ý
Trang 131.1.4 Thuật toán vẽ đường tròn ,elip
Một số tính chất của đường tròn
1.1.4.1 Thuật toán Bresenham vẽ đường tròn
Trang 141.1.4.2 Thuật toán trung điểm vẽ đường tròn
t
Trang 151.1.4.3 Thuật toán trung điểm vẽ elip
Trang 18CHƯƠNG 2 PHÁT TRIỂN ỨNG DỤNG 3D
2.1 Mô tả bài toán
Vũ trụ là một khái niệm khá trừu tượng , ngay cả trên trái đất cũng có quá nhiều
bí ẩn mà con người chưa khám phá đc , tuy nhiên con người vẫn không ngừng pháttriển các công cụ để khai thác đc những thông tin mà họ có được từ vũ trụ , từkhông gian hay địa hình , tất cả những điểu đó góp phần tạo ra 1 bản mô phỏngcung cấp nhiều thông tin và cái nhìn trực quan hơn về vũ trụ
Với những công nghệ và thông tin mà chúng ta đã có , những mô hình 3d đượcdựng lên, mô hình hoạt động , hay mô hình bề mặt , khi có những thứ này conngười sẽ tận hưởng được nhiều lợi ích như:
- Hiểu được kích thước thực tế của 1 hành tinh , cách hoạt động , chu kì quay
- Kích thích khả năng khám phá và tự học hỏi của con người
- Có thể sử dụng làm công cụ dạy học hay dùng để dự báo địa chấn , dự báo thờitiết , thiên tai
- Sử dụng trong lĩnh vực thiên văn học , giúp con người có thể chạm tới những vìsao
Chuyển động của các hành tinh luôn được mọi người chú ý vì nó có thể coi là hoạtđộng cơ bản của một tinh cầu , tuy nhiên , mỗi hành tinh có 1 các chuyển độngkhác nhau , mà thông qua việc quan sát các thức hoạt động cùng vs đo đường kính, diện thích , khối lượng và căn cứ vào số lượng khoáng chất có trong hành tinh mnta đã xây dựng 1 công thức chuyển động vô cùng phức tạp cho mỗi hành tinh , do
đó việc tái dựng lại mô hình chuyển động này sẽ không được ứng dụng công thứcquay chuẩn xác mà chỉ là công thức gần đúng
2.2 Mô tả chuyển động của 2 hành tinh.
Em tiến hành mô tả 2 hoạt động phổ biến nhất trong chuyển động của hànhtinh là :
- Hành có thể quay theo quỹ đạo 360 o
- Hành tinh có thể quay quanh trục của chính nó
Mô tả chi tiết từng chuyển động
Hành tinh ở trục tọa độ đc coi là trái đất , hành tinh còn lại là mặt trăng
Hiện tại thì chuyển động của chúng đc vận hành bởi hàm timer
Trang 192.2.1 Phép biến đổi
- Phép quay
+ Phép quay quanh trục OX
+ Phép quay quanh trục OY
+ Phép quay quanh trục OZ
Trang 20KẾT LUẬN
Trang 21Trên đây là toàn bộ nội dung báo cáo thực hiện những vấn đề nêu lên ở phần đầu
Đó là minh chứng rõ rệt cho sự cố gắng, quyết tâm cũng như đánh giá khả năng hiểu biết, kiến thức của em trong việc tìm hiểu đồ họa hiện tại và xây dựng đồ họa mới nhằm đáp ứng nhu cầu thực tiễn
Đồng thời, qua bài báo cáo trên cũng đã giúp cho chúng em học hỏi được thêm nhiều kiến thức mới mẻ, nâng cao tính tự giác, tinh thần đoàn kết và nâng cao khả năng làm việc nhóm Giúp có thêm kinh nghiệm đi khảo sát thực tế và được trau dồi khả năng phân tích, đánh giá về nhiều khía cạnh, tiếp cận với người dùng, người dùng Thêm vào đó, là giúp cho em hiểu rõ hơn về ngôn ngữ lập trình, công
cụ mà mình đang sử dụng, cũng như lý thuyết, phương pháp tìm hiểu về tính đặc trù của lập trình đồ họa
Trong quá trình tìm hiểu và làm bài, em đã cố gắng hoàn thiện bài làm và hoàn thiện mình hơn về mặt kiến thức Nhưng cũng không thể tránh khỏi những sai sót, mong thầy cô và các bạn góp ý để bài của nhóm hoàn thiện hơn
Em xin chân thành cảm ơn!
Trang 22Tài Liệu Tham Khảo1.Slide bài giảng thầy Ngô Trường Giang
2.OpenGL_Basic.PDF