Giáo trình Kỹ thuật đồ họa

Chương 1: Giới thiệu thuật toán vẽ và tô các đường cơ bản  
Lời nói đầu  
Đồ họa máy tính được ra đời bởi sự kết hợp của 2 lĩnh vực thông tin và truyền  
hình. Đầu tiên kỹ thuật đồ họa được phát triển bởi các nhóm kỹ sư sử dụng máy tính lớn.  
Trong giai đoạn đầu của sự phát triển người ta phải tốn nhiều tiền cho việc trang bị các  
thiết bị phần cứng. Ngày nay, nhờ vào sự tiến bộ của vi xử lý, giá thành của máy tính  
càng lúc càng phù hợp với túi tiền của người sử dụng trong khi các kỹ thuật ứng dụng đồ  
họa của nó ngày càng cao hơn nên có nhiều người quan tâm nghiên cứu đến lĩnh vực này.  
Chúng ta có thể vẽ ra những hình ảnh không chỉ là ảnh tĩnh mà còn có thể biến đổi thành  
những hình ảnh sinh động qua các phép quay, tịnh tiến... Do vậy, đồ họa máy tính trở  
thành một lĩnh vực lý thú và có nhiều ứng dụng trong thực tế.  
Tuy nhiên, việc dạy và học kỹ thuật đồ họa thì không là đơn giản do chủ đề này có  
nhiều phức tạp. Kỹ thuật đồ họa liên quan đến tin học và toán học bởi vì hầu hết các giải  
thuật vẽ, tô cùng các phép biến hình đều được xây dựng dựa trên nền tảng của hình học  
không gian hai chiều và ba chiều.  
Hiện nay, Kỹ thuật đồ họa là một môn học được giảng dạy cho sinh viên chuyên  
ngành Tin học với 45 tiết lý thuyết và 15 tiết thực tập. Nội dung của giáo trình kỹ thuật  
đồ họa này tập trung vào 2 vấn đề chính như sau :  
- Trình bày các thuật toán vẽ và tô các đường cơ bản như đường thẳng, đa giác,  
đường tròn, ellipse và các đường conic. Các thuật toán này giúp cho sinh viên có thể tự  
mình thiết kế để vẽ và tô một hình nào đó ( chương 1 và 2).  
- Nội dung thứ hai đề cập đến đồ họa hai chiều và đồ họa ba chiều bao gồm các  
phép biến đổi Affine, windowing và clipping, quan sát ảnh ba chiều qua các phép chiếu,  
khử các mặt khuất và đường khuất, thiết kế đường cong và mặt cong (từ chương 3 đến  
chương 7).  
Giáo trình kỹ thuật đồ họa này được sửa đổi và cập nhật dựa trên kinh nghiệm  
giảng dạy đã qua và được xây dựng dựa trên tài liệu tham khảo chính là :  
Donald Hearn, M. Pauline Baker; Computer Graphics; Prentice-Hall, Inc.,  
Englewood Cliffs, New Jersey , 1986.  
Sau cùng, chúng tôi hy vọng rằng giáo trình này sẽ đóng góp tích cực trong việc  
cải tiến sự hiểu biết của sinh viên về lĩnh vực đồ họa và mong nhận được sự góp ý của  
các đồng nghiệp và sinh viên để công việc biên soạn ngày càng được tốt hơn.  
Trang 1  
Chương 1: Giới thiệu thuật toán vẽ và tô các đường cơ bản  
Mục lục  
Trang 2  
Chương 1: Giới thiệu thuật toán vẽ và tô các đường cơ bản  
Trang 3  
Chương 1: Giới thiệu thuật toán vẽ và tô các đường cơ bản  
PHẦN TỔNG QUAN  
1. Mục đích yêu cầu  
Sau khi học xong môn này, sinh viên cần đạt được các yêu cầu sau:  
- Hiểu thế nào là đồ họa trên máy tính.  
- Thiết kế và cài đặt được các thuật toán vẽ các đường cơ bản như đường thẳng,  
đường tròn,...  
- Thiết kế và cài đặt được các thuật toán tô một hình.  
- Sử dụng được các phép biến hình trong không gian 2 chiều, 3 chiều để làm thay  
đổi một hình ảnh đã có sẳn.  
- Có thể tạo một cửa sổ để cắt - dán một hình.  
- Hiểu khái niệm về các tiếp cận để mô phỏng được một hình ảnh trong không  
gian 3 chiều trên máy tính.  
2. Đối tượng sử dụng  
Môn kỹ thuật đồ họa được giảng dạy cho sinh viên năm thứ tư của các khoa sau:  
- Chuyên ngành công nghệ thông tin.  
- Chuyên ngành điện tử (viễn thông, tự động hóa,...)  
- Chuyên ngành sư phạm (Toán tin, Lý tin )  
3. Nội dung cốt lõi  
Giáo trình Kỹ thuật đồ họa bao gồm 7 chương.  
- Chương 1: Giới thiệu thuật toán vẽ và tô các đường cơ bản  
- Chương 2: Các thuật toán tô màu  
- Chương 3: Phép biến đổi trong đồ họa 2 chiều  
- Chương 4: Tạo cửa sổ và cắt hình  
- Chương 5: Đồ họa 3 chiều  
- Chương 6: Quan sát ảnh 3 chiều  
- Chương 7: Khử các mặt khuất và đường khuất  
4. Kiến thức tiên quyết  
- Kiến thức về hình học không gian và hình giải tích  
- Kiến thức lập trình căn bản, lập trình đồ họa  
- Kiến thức về cấu trúc dữ liệu, lập trình đệ qui  
Trang 4  
Chương 1: Giới thiệu thuật toán vẽ và tô các đường cơ bản  
5. Danh mục tài liệu tham khảo  
- Donald Hearn, M. Pauline Baker; Computer Graphics; Prentice-Hall, Inc.,  
Englewood Cliffs, New Jersey , 1986.  
- F.S.Hill; Computer graphics ; 1990  
- Vũ Mạnh Tường, Dương Anh Đức, Trần Đan Thư, Lý Quốc Ngọc. Giáo trình Nhập  
môn đồ họa & xử lý ảnh.1995.  
- VERA B.ANAND, người dịch TS Nguyễn Hữu Lộc. Đồ họa máy tính và Mô hình hóa  
hình học. Nhà xuất bản Thành Phố Hồ Chí Minh - 2000.  
- Foley, Van Darn, Feiner, Hughes, Phillips. Introduction à L'Infographie. 1995.  
- Lê Tấn Hùng, Huỳnh Quyết Thắng. Kỹ thuật đồ họa. Nhà xuất bản khoa học và kỹ  
thuật, Hà nội - 2000.  
Trang 5  
Chương 1: Giới thiệu thuật toán vẽ và tô các đường cơ bản  
Chương 1: GIỚI THIỆU THUẬT TOÁN VẼ VÀ TÔ  
CÁC ĐƯỜNG CƠ BẢN  
1.1 Tổng quan  
• Mục tiêu của chương 1  
Học xong chương này, sinh viên phải nắm bắt được các vấn đề sau:  
- Thế nào là hệ đồ họa  
- Thiết kế và cài đặt được các thủ tục vẽ và tô các đường cơ bản như đường thẳng,  
đường tròn, elip, và các đường cong khác.  
• Kiến thức cơ bản cần thiết  
Các kiến thức cơ bản cần thiết để học chương này bao gồm :  
- Các khái niệm toán học về đường thẳng như : đường thẳng là gì : dạng tổng quát  
phương trình đường thẳng, hệ số góc, tung độ dốc.  
- Hiểu rõ hình dáng của đường thẳng phụ thuộc vào hệ số góc như thế nào.  
- Phương trình tổng quát của đường tròn, ellippse ( không có tham số và có tham  
số).  
- Kĩ thuật lập trình: thiết lập thủ tục, hàm (lưu ý truyền qui chiếu và truyền giá  
trị).  
• Tài liệu tham khảo  
Donald Hearn, M. Pauline Baker. Computer Graphics . Prentice-Hall, Inc.,  
Englewood Cliffs, New Jersey , 1986 (chapters 3, 55-76).  
• Nội dung cốt lõi  
Thiết lập thủ tục vẽ :  
- Đường thẳng bằng giải thuật DDA  
- Đường thẳng bằng giải thuật Bresenham  
- Đường tròn bằng giải thuật đối xứng  
- Đường tròn bằng giải thuật Bresenham  
- Đường tròn bằng giải thuật MidPoint  
- Ellippse  
- Đa giác  
Trang 6  
 
Chương 1: Giới thiệu thuật toán vẽ và tô các đường cơ bản  
1.2. Hệ tọa độ thế giới thực, hệ tọa độ thiết bị và hệ tọa độ chuẩn  
Một hệ mềm đồ họa được mô tả bao gồm 3 miền như sau :  
- Miền điều khiển : bao bọc toàn bộ hệ thống.  
- Miền thực : nằm trong miền điều khiển. Khi một số nào đó thâm nhập vào miền  
thực, nó sẽ được chuyển thành số thực dấu phẩy động, và khi có một số rời khỏi miền này  
thì nó sẽ được chuyển thành số nguyên có dấu 16 bits.  
- Miền hiển thị : nằm trong miền điều khiển nhưng phân biệt với miền thực. Chỉ có  
số nguyên 16 bits mới nằm trong miền hiển thị.  
Trong lĩnh vực kỹ thuật đồ họa, chúng ta phải hiểu được rằng thực chất của đồ họa  
là làm thế nào để có thể mô tả và biến đổi được các đối tượng trong thế giới thực trên  
máy tính. Bởi vì, các đối tượng trong thế giới thực được mô tả bằng tọa độ thực. Trong  
khi đó, hệ tọa độ thiết bị lại sử dụng hệ tọa độ nguyên để hiển thị các hình ảnh. Đây  
chính là vấn đề cơ bản cần giải quyết. Ngoài ra, còn có một khó khăn khác nữa là với các  
thiết bị khác nhau thì có các định nghĩa khác nhau. Do đó, cần có một phương pháp  
chuyển đổi tương ứng giữa các hệ tọa độ và đối tượng phải được định nghĩa bởi các thành  
phần đơn giản như thế nào để có thể mô tả gần đúng với hình ảnh thực bên ngoài.  
Hai mô hình cơ bản của ứng dụng đồ họa là dựa trên mẫu số hóa và dựa trên đặc  
trưng hình học. Trong ứng dụng đồ họa dựa trên mẫu số hóa thì các đối tượng đồ họa  
được tạo ra bởi lưới các pixel rời rạc. Các pixel này có thể đuợc tạo ra bằng các chương  
trình vẽ, máy quét, ... Các pixel này mô tả tọa độ xác định vị trí và giá trị mẫu. Thuận lợi  
của ứng dụng này là dể dàng thay đổi ảnh bằng cách thay đổi màu sắc hay vị trí của các  
pixel, hoặc di chuyển vùng ảnh từ nơi này sang nơi khác. Tuy nhiên, điều bất lợi là không  
thể xem xét đối tượng từ các góc nhìn khác nhau. Ứng dụng đồ họa dựa trên đặc trưng  
hình học bao gồm các đối tượng đồ họa cơ sở như đoạn thẳng, đa giác,.... Chúng được  
lưu trữ bằng các mô hình và các thuộc tính. Ví dụ : đoạn thẳng được mô hình bằng hai  
điểm đầu và cuối, có thuộc tính như màu sắc, độ dày. Người sử dụng không thao tác trực  
tiếp trên các pixel mà thao tác trên các thành phần hình học của đối tượng.  
a. Hệ tọa độ thế giới thực:  
Một trong những hệ tọa độ thực thường được dùng để mô tả các đối tượng trong  
thế giới thực là hệ tọa độ Descartes. Với hệ tọa độ này, mỗi điểm P được biểu diễn bằng  
một cặp tọa độ (xp,yp) với xp, yp ∈R (xem hình 1.1).  
Trang 7  
 
Chương 1: Giới thiệu thuật toán vẽ và tô các đường cơ bản  
Y
P(xp,yp)  
yp  
O
xp  
X
Hình 1.1 : Hệ tọa độ thực.  
. Ox : gọi là trục hoành.  
. Oy : gọi là trục tung.  
. xp : hoành độ điểm P.  
. yp : tung độ điểm P.  
b. Hệ tọa độ thiết bị  
Hệ tọa độ thiết bị (device coordinates) được dùng cho một thiết bị xuất cụ thể nào  
đó, ví dụ như máy in, màn hình,..  
Trong hệ tọa độ thiết bị thì các điểm cũng được mô tả bởi cặp tọa độ (x,y). Tuy  
nhiên, khác với hệ tọa độ thực là x, y ∈ N. Điều này có nghĩa là các điểm trong hệ tọa độ  
thực được định nghĩa liên tục, còn các điểm trong hệ tọa độ thiết bị là rời rạc. Ngoài ra,  
các tọa độ x, y của hệ tọa độ thiết bị chỉ biểu diễn được trong một giới hạn nào đó của N.  
Ví dụ : Độ phân giải của màn hình trong chế độ đồ họa là 640x480. Khi đó, x∈(0,640)  
và y∈(0,480) (xem hình 1.2).  
(0,0)  
(640,0)  
(0, 480)  
(640,480)  
Hình 1.2 : Hệ tọa độ trên màn hình.  
Trang 8  
Chương 1: Giới thiệu thuật toán vẽ và tô các đường cơ bản  
c. Hệ tọa độ thiết bị chuẩn (Normalized device coordinates)  
Do cách định nghĩa các hệ tọa độ thiết bị khác nhau nên một hình ảnh hiển thị  
được trên thiết bị này là chính xác thì chưa chắc hiển thị chính xác trên thíết bị khác.  
Người ta xây dựng một hệ tọa độ thiết bị chuẩn đại diện chung cho tất cả các thiết bị để  
có thể mô tả các hình ảnh mà không phụ thuộc vào bất kỳ thiết bị nào.  
Trong hệ tọa độ chuẩn, các tọa độ x, y sẽ được gán các giá trị trong đoạn từ [0,1].  
Như vậy, vùng không gian của hệ tọa độ chuẩn chính là hình vuông đơn vị có góc trái  
dưới (0, 0) và góc phải trên là (1, 1).  
Quá trình mô tả các đối tượng thực như sau (xem hình 1.3):  
màn hình  
Ảnh định nghĩa  
trên tọa độ thế  
giới thực.  
máy in  
Tọa độ chuẩn hóa  
Tọa độ thiết bị  
thiết bị  
khác  
Hình 1.3 : Hệ tọa độ trên màn hình.  
1.3. Thuật toán vẽ đoạn thẳng  
Xét đoạn thẳng có hệ số góc 0<m<=1 và Δx>0. Với các đoạn thẳng dạng này, nếu  
(xi, yi) là điểm đã được xác định ở bước thứ i thì điểm kế tiếp (xi+1, yi+1) ở bước thứ i+1 sẽ  
là một trong hai điểm sau (xem hình vẽ 1.4) :  
xi+1= xi + 1  
yi+1= yi + 1  
yi  
Trang 9  
 
Chương 1: Giới thiệu thuật toán vẽ và tô các đường cơ bản  
(xi+4,yi+3)  
(xi+2,yi+2)  
(xi+3,yi+2)  
(xi+1,yi+1)  
(xi,yi)  
Hình 1.4 : Các điểm vẽ gần với điểm muốn vẽ.  
Vấn đề đặt ra là chọn điểm vẽ như thế nào để đường thẳng được vẽ gần với đường  
thẳng muốn vẽ nhất và đạt được tối ưu hóa về mặt tốc độ ?  
1.3.1. Thuật toán DDA (Digital DifferentialAnalyzer)  
Là thuật toán tính toán các điểm vẽ dọc theo đường thẳng dựa vào hệ số góc của  
phương trình đường thẳng y=mx+b.  
Δy  
Trong đó, m=  
, Δy = yi+1 - yi , Δx = xi+1 - xi  
Δx  
Nhận thấy trong hình vẽ 1.4 thì tọa độ của điểm x sẽ tăng 1 đơn vị trên mỗi điểm  
vẽ, còn việc quyết định chọn yi +1 là yi +1 hay yi sẽ phụ thuộc vào giá trị sau khi làm tròn  
của tung độ y. Tuy nhiên, nếu tính trực tiếp giá trị thực của y ở mỗi bước từ phương trình  
y=mx+b thì cần một phép toán nhân và một phép toán cộng số thực.  
yi +1 = mxi +1 + b = m(xi + 1) + b = mxi + b + m  
Để cải thiện tốc độ, người ta khử phép nhân trên số thực.  
Ta có :  
yi = mxi + b  
i +1 = yi + m → int(yi +1)  
⇒
y
• Tóm lại khi 0<m<=1 :  
xi +1 = xi + 1  
yi +1 = yi + m → int(yi +1)  
• Trường hợp m>1: chọn bước tăng trên trục y một đơn vị.  
xi +1 = xi + 1/m → int(xi +1)  
yi +1 = yi + 1  
Trang 10  
 
Chương 1: Giới thiệu thuật toán vẽ và tô các đường cơ bản  
Hai trường hợp này dùng để vẽ một điểm bắt đầu từ bên trái đến điểm cuối cùng bên phải  
của đường thẳng (xem hình 1.5). Nếu điểm bắt đầu từ bên phải đến điểm cuối cùng bên  
trái thì xét ngược lại :  
• 0<m<=1:  
xi +1 := xi - 1  
yi +1:= yi - m → int(yi+1)  
• m>1:  
xi +1:= xi – 1/m → int(xi+1)  
yi +1:= yi – 1  
Hình 1.5 : Hai dạng đường thẳng có 0<m<1 và m>1.  
Tương tự, có thể tính toán các điểm vẽ cho trường hợp m<0: khi |m|<=1 hoặc |m|>1 (sinh  
viên tự tìm hiểu thêm).  
Trang 11  
Chương 1: Giới thiệu thuật toán vẽ và tô các đường cơ bản  
Lưu đồ thuật toán DDA  
Begin  
dx=x2-x1  
dy=y2-y1  
Yes  
No  
abs(dx)>abs(dy)  
step=abs(dx)  
step=abs(dy)  
x_inc=dx/step  
y_inc=dy/step  
x=x1;y= y1  
putpixel(x1,y1,c)  
No  
k<=step  
Yes  
x = x+x_inc  
y = y+y_inc  
putpixel(round(x),round(y),c)  
End  
Trang 12  
Chương 1: Giới thiệu thuật toán vẽ và tô các đường cơ bản  
Cài đặt minh họa thuật toán DDA  
Procedure DDA ( x1, y1, x2, y2, color : integer );  
Var dx, dy, step : integer;  
X_inc, y_inc , x, y : real ;  
Begin  
dx:=x2-x1;  
dy:=y2-y1;  
if abs(dx)>abs(dy) then steps:=abs(dx)  
else steps:=abs(dy);  
x_inc:=dx/steps;  
y_inc:=dy/steps;  
x:=x1;  
y:=y1;  
putpixel(round(x),round(y), color);  
for k:=1 to steps do  
begin  
x:=x+x_inc;  
y:=y+y_inc;  
putpixel(round(x),round(y), color);  
end;  
end;  
1.3.2. Thuật toán Bresenham  
P2  
yi+1  
yi+1  
d2  
d1  
yi  
P1  
xi+1 = xi+1  
xi  
Hình 1.6 : Dạng đường thẳng có 0<=m<=1.  
Trang 13  
 
Chương 1: Giới thiệu thuật toán vẽ và tô các đường cơ bản  
Gọi (xi +1,yi +1) là điểm thuộc đoạn thẳng (xem hình 1.6). Ta có y:= m(xi +1)+b.  
Đặt d1 = yi +1 - yi  
d2 = (yi +1) - yi +1  
Việc chọn điểm (xi +1, yi +1) là P1 hay P2 phụ thuộc vào việc so sánh d1 và d2 hay dấu của  
d1-d2.  
- Nếu d1-d2<0 : chọn điểm P1, tức là yi +1= yi  
- Nếu d1-d2 ≥0 : chọn điểm P2, tức là yi +1= yi +1  
Xét Pi = Δx (d1 - d2)  
Ta có : d1 - d2 = 2 yi+1 - 2yi - 1  
= 2m(xi+1) + 2b - 2yi - 1  
⇒
Pi = Δx (d1 - d2) = Δx[2m(xi+1) + 2b - 2yi - 1]  
Δy  
= Δx[2  
(xi+1) + 2b - 2yi - 1]  
Δx  
= 2Δy(xi+1) - 2Δx.yi + Δx(2b - 1)  
= 2Δy.xi - 2Δx.yi + 2Δy + Δx(2b - 1)  
Vậy C = 2Δy + Δx(2b - 1) = Const  
Pi = 2Δy.xi - 2Δx.yi + C  
⇒
Nhận xét rằng nếu tại bước thứ i ta xác định được dấu của Pi thì xem như ta xác định  
được điểm cần chọn ở bước (i+1). Ta có :  
P
i +1 - Pi = (2Δy.xi+1 - 2Δx.yi+1 + C) - (2Δy.xi - 2Δx.yi + C )  
⇔ Pi +1 = Pi + 2Δy - 2Δx ( yi+1 - .yi )  
- Nếu Pi < 0 : chọn điểm P1, tức là yi +1= yi và Pi +1 = Pi + 2Δy.  
- Nếu Pi ≥ 0 : chọn điểm P2, tức là yi +1= yi +1 và Pi +1 = Pi + 2Δy - 2Δx  
- Giá trị P0 được tính từ điểm vẽ đầu tiên (x0 ,y0 ) theo công thức :  
P0 = 2Δy.x0 - 2Δx.y0 + C  
Do (x0 ,y0 ) là điểm nguyên thuộc về đoạn thẳng nên ta có :  
Δy  
y0 = m .x0 + b =  
.x0 + b  
Δx  
Thế vào phương trình trên ta được :  
P0 = 2Δy - Δx  
Trang 14  
Chương 1: Giới thiệu thuật toán vẽ và tô các đường cơ bản  
Lưu đồ thuật toán Bresenham  
Begin  
dx = x2-x1; dy = y2 - y1;  
P = 2dy-dx; c1 = 2dy; c2 = 2(dy-dx);  
x = x1; y = y1;  
putpixel (x,y,color);  
No  
x < x2  
Yes  
No  
P < 0  
Yes  
P = P + c1  
P = P + c2  
y = y + 1  
x = x +1  
putpixel(x,y,color)  
End  
Trang 15  
Chương 1: Giới thiệu thuật toán vẽ và tô các đường cơ bản  
Cài đặt minh họa thuật toán Bresenham  
Procedure Bres_Line (x1,y1,x2,y2 : integer);  
Var dx, dy, x, y, P, const1, const2 : integer;  
Begin  
dx : = x2 - x1; dy : = y2 - y1;  
P : = 2*dy - dx;  
Const1 : = 2*dy ; const2 : = 2*(dy - dx) ;  
x:= x1; y:=y1;  
Putpixel ( x, y, Color);  
while (x < x-2 ) do  
begin  
x : = x +1 ;  
if (P < 0) then P : = P + const1  
else  
begin  
y : = y+1 ;  
P : = P + const2  
end ;  
putpixel (x, y, color) ;  
end ;  
End ;  
Nhận xét :  
Thuật toán Bresenham chỉ thao tác trên số nguyên và chỉ tính toán trên phép cộng  
và phép nhân 2 (phép dịch bit). Điều này là một cải tiến làm tăng tốc độ đáng kể so với  
thuật toán DDA.  
Ý tưởng chính của thuật toán này là ở chổ xét dấu Pi để quyết định điểm kế tiếp,  
và sử dụng công thức truy hồi Pi +1 - Pi để tính Pi bằng các phép toán đơn giản trên số  
nguyên.  
Tuy nhiên, việc xây dựng trường hợp tổng quát cho thuật toán Bresenham có phức  
tạp hơn thuật toán DDA.  
Trang 16  
Chương 1: Giới thiệu thuật toán vẽ và tô các đường cơ bản  
1.4. Thuật toán vẽ đường tròn  
Trong hệ tọa độ Descartes, phương trình đường tròn bán kính R có dạng:  
Với tâm O(0,0) :  
x2 + y2 = R2  
Với tâm C(xc,yc): (x - xc )2 + (y - yc )2 = R2  
Trong hệ tọa độ cực :  
x = xc + R.cosθ  
y = yc + Y.sinθ  
với θ ∈ [0, 2π].  
Do tính đối xứng của đường tròn C (xem hình 1.7) nên ta chỉ cần vẽ 1/8 cung tròn,  
sau đó lấy đối xứng qua 2 trục tọa độ và 2 đường phân giác thì ta vẽ được cả đường tròn.  
y
(-x,y)  
(x,y)  
(-y,x)  
(y,x)  
R 2  
x
2
(-y,-x)  
(y,-x)  
(-x,-y)  
(x,-y)  
Hình 1.7 : Đường tròn với các điểm đối xứng.  
1.4.1. Thuật toán đơn giản  
Cho x = 0, 1, 2, ..., int( R 2 ) với R>1.  
2
- Tại mỗi giá trị x, tính int(y = R2 − x2 ).  
- Vẽ điểm (x,y) cùng 7 điểm đối xứng của nó.  
Cài đặt minh họa thuật toán đơn giản.  
Trang 17  
 
Chương 1: Giới thiệu thuật toán vẽ và tô các đường cơ bản  
Procedure Circle (xc, yc, R : integer) ;  
Var x, y : integer ;  
Procedure DOIXUNG ;  
Begin  
putpixel (xc + x , yc +y, color) ;  
putpixel (xc - x , yc + y, color) ;  
putpixel (xc + x , yc - y, color) ;  
putpixel (xc - x , yc- y, color) ;  
putpixel (xc + y , yc + x, color) ;  
putpixel (xc - y , yc + x, color) ;  
putpixel (xc + y , yc - x, color) ;  
putpixel (xc - y , yc - x, color) ;  
End ;  
Begin  
For x : = 0 to round(R*Sqrt(2)/2) do  
Begin  
y : = round(Sqrt(R*R - x*x)) ;  
DOIXUNG;  
End ;  
End ;  
1.4.2. Thuật toán xét điểm giữa (MidPoint)  
Do tính đối xứng của đường tròn nên ta chỉ cần vẽ 1/8 cung tròn, sau đó lấy đối  
xứng là vẽ được cả đường tròn. Thuật toán MidPoint đưa ra cách chọn yi+1 là yi hay yi-1  
bằng cách so sánh điểm thực Q(xi+1,y) với điểm giữa MidPoind là trung điểm của S1 và  
S2. Chọn điểm bắt đầu để vẽ là (0,R). Giả sử (xi, yi) là điểm nguyên đã tìm được ở bước  
thứ i (xem hình 1.8), thì điểm (xi+1, yi+1) ở bước i+1 là sự lựa chọn giữa S1 và S2.  
xi+1= xi + 1  
yi+1=  
yi - 1  
yi  
Trang 18  
 
Chương 1: Giới thiệu thuật toán vẽ và tô các đường cơ bản  
(xi,yi)  
S1  
Q(xi+1,y)  
yi  
yi+1  
MidPoint  
yi - 1  
S2  
Hình 1.8 : Đường tròn với điểm Q(xi+1, y) và điểm MidPoint.  
Đặt F(x,y) = x2 + y2 - R2 , ta có :  
. F(x,y) < 0 , nếu điểm (x,y) nằm trong đường tròn.  
. F(x,y) = 0 , nếu điểm (x,y) nằm trên đường tròn.  
. F(x,y) > 0 , nếu điểm (x,y) nằm ngoài đường tròn.  
Xét Pi = F(MidPoint) = F(xi +1, yi - 1/2). Ta có :  
- Nếu Pi < 0 : điểm MidPoint nằm trong đường tròn. Khi đó, điểm thực Q gần với điểm  
S1 hơn nên ta chọn yi+1 = yi .  
- Nếu Pi >= 0 : điểm MidPoint nằm ngòai đường tròn. Khi đó, điểm thực Q gần với điểm  
S2 hơn nên ta chọn yi+1 = yi - 1.  
Mặt khác :  
Pi+1 - Pi = F(xi+1 +1, yi+1 - 1/2) - F(xi + 1, yi - 1/2)  
= [(xi+1 +1)2 + (yi+1 - 1/2)2 - R2 ] - [(xi +1)2 + (yi - 1/2)2 - R2 ]  
= 2xi + 3 + ((yi+1)2 + (yi)2 ) - (yi+1 - yi)  
Vậy :  
- Nếu Pi < 0 : chọn yi+1 = yi. Khi đó Pi+1 = Pi + 2xi +3  
- Nếu Pi >= 0 : chọn yi+1 = yi - 1. Khi đó Pi+1 = Pi + 2xi - 2yi +5.  
- Pi ứng với điểm ban đầu ( x0 , y0 ) = (0,R) là:  
5
P0 = F(x0 + 1, y0 - 1/2) = F(1, R - 1/2) = -R  
4
Trang 19  
Chương 1: Giới thiệu thuật toán vẽ và tô các đường cơ bản  
Lưu đồ thuật toán MidPoint vẽ đường tròn  
Begin  
P = 5/4 - R;  
x=0 ; y= R;  
Putpixel(x,y,c);  
No  
x < y  
Yes  
No  
P < 0  
Yes  
P = P + 2*x + 3  
P = P + 2*(x-y)+5  
y = y - 1  
x = x +1  
putpixel(x,y,color)  
End  
Trang 20  
Tải về để xem bản đầy đủ
pdf 159 trang baolam 21840 Free
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Kỹ thuật đồ họa", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfgiao_trinh_ky_thuat_do_hoa.pdf