Professional Documents
Culture Documents
THỰC THỂ CƠ SỞ
ĐOÀN VŨ THỊNH
BỘ MÔN KỸ THUẬT PHẦN MỀM, KHOA CÔNG NGHỆ THÔNG TIN
ĐẠI HỌC NHA TRANG (2019)
2.1. GIỚI THIỆU
• Bất kì một ảnh mô tả thế giới thực nào bao giờ cũng được cấu trúc từ tập các đối
tượng đơn giản hơn. Ví dụ một ảnh thể hiện bài trí của một căn phòng sẽ được
cấu trúc từ các đối tượng như cây cảnh, tủ kính, bàn ghế, tường, ánh sáng đèn
• Với các ảnh đồ họa phát sinh bằng máy tính, hình dạng và màu sắc của mỗi đối
tượng có thể được mô tả riêng biệt bằng hai cách:
Hoặc là bằng dãy các pixel tương ứng
Hoặc là bằng tập các đối tượng hình học cơ sở như đoạn thẳng hay đa giác.
• Sau đó, các ảnh hiển thị bằng cách nạp các pixel vào vùng bộ nhớ màn hình.
2.1. GIỚI THIỆU (tt)
• Với các ảnh được mô tả bằng các đối tượng hình học
cơ sở, cần có một quá trình chuyển các đối tượng này
về dạng ma trận các pixel trước. Quá trình này còn
được gọi là quá trình chuyển đổi bằng dòng quét.
• Đối tượng đồ họa cơ sở đơn giản nhất là điểm và đoạn thẳng, ngoài ra còn
có đường tròn, và các đường conics, mặt bậc hai, các mặt và đường
splines, các vùng tô đa giác, chuỗi kí tự…
2.2. CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• Hệ tọa độ thế giới thực (hay hệ tọa độ thực) là hệ tọa độ được Pwc(x,y)
y
dùng mô tả các đối tượng thế giới thực.
• Một trong các hệ tọa độ thực thường được dùng nhất đó là hệ tọa
0 x x
độ Descartes (x, y ∈ R)
• Gốc tọa độ là điểm O có tọa độ (0, 0). Ox, Oy lần lượt được gọi là
trục hoành, trục tung;
• x là khoảng cách từ điểm đến trục hoành hay còn được gọi là hoành độ, y là
khoảng cách từ điểm đến trục tung hay còn được gọi là tung độ.
2.2. CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ (tt)
0 x
xmax
• 2.2.1. Hệ đồ hoạ thế giới thực và hệ đồ hoạ thiết bị (tt)
• Các điểm trong hệ tọa độ thiết bị cũng được mô tả bởi một PDC(x,y)
cặp tọa độ (x, y ∈ N). Do đó, các điểm trong các hệ tọa độ
ymax
thiết bị là rời rạc do tính chất của tập các số tự nhiên. y
• Các tọa độ x, y của hệ tọa độ thiết bị không thể lớn tùy ý mà đều bị giới hạn trong
một khoảng nào đó. Khoảng giới hạn các tọa độ x, y là khác nhau đối với từng loại
• Điểm
Điểm là thành phần cơ sở được định nghĩa trong một hệ tọa độ.
Đối với hệ tọa độ hai chiều mỗi điểm được xác định bởi cặp tọa
độ (x, y). Ngoài thông tin về tọa độ, điểm còn có thuộc tính là
màu sắc.
2.2. CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ (tt)
thẳng đi qua hai điểm (x1, y1) và (x2, y2) có dạng sau:
Nếu khai triển dưới dạng: (y2 − y1)x − (x2 − x1)y − x1y2 + x2y1 = 0
và đặt A= y2 − y1, B = −(x2 − x1), C = x2y1 − x1y2 thì phương trình đường thẳng sẽ có dạng
Ax + By + C = 0, dạng này được gọi là phương trình tổng quát của đường thẳng.
• Phương trình tham số của đường thẳng có dạng các tọa độ x, y được mô tả qua một
thành phần thứ ba là t. Dạng này rất thuận tiện khi khảo sát các đoạn thẳng.t
− 0 1 +
8
8
2.2. CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ (tt)
• Là tập các đoạn thẳng nối với nhau một cách tuần tự.
Điểm giao của hai đoạn thẳng được gọi là đỉnh. Các
đường gấp khúc được xác định qua danh sách các đỉnh,
mỗi đỉnh được cho bởi các cặp tọa độ (xi, yi).
yi), i = 0,1,2,.... Đây là các điểm nguyên sẽ được hiển thị trên màn hình.
• Bài toán đặt ra là nếu biết được (xi, yi) là tọa độ nguyên xác định ở bước thứ
i, điểm nguyên tiếp theo (xi+1, yi+1) sẽ được xác định như thế nào?
2.2. CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ (tt)
By Ay 96 41 55
m 0.5392
Bx Ax 125 23 102
2.2. CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ (tt)
• Với các đoạn thẳng dạng này, nếu (xi, yi) là điểm đã xác định
được ở bước thứ i (điểm màu đen) thì điểm cần chọn (xi+1,yi+1)
ở bước thứ (i+1) sẽ là một trong hai trường hợp như hình bên:
• Như vậy:
2.2. CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ (tt)
• Với thuật toán DDA, việc quyết định chọn yi+1 là yi hay
(xi+1,y)
yi+1, dựa vào phương trình của đoạn thẳng y = mx+b.
(xi,yi)
• yi+1 sẽ là giá trị sau khi làm tròn giá trị tung độ y.
{ 𝑦=𝑚 ( 𝑥 𝑖 +1 ) +𝑏
𝑦 𝑖 +1=𝑅𝑜𝑢𝑛𝑑 ( 𝑦 )
2.2. CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ (tt)
x = x1 + 1 y = y1 + 1 * m
0<m<1
Bật pixel (x, round(y))
x=x+1 y=y+1*m
…
(x1, y1)
Cho đến khi x == x2
2.2. CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ (tt)
1 (x2,y2)
x k 1 xk x = x1 y = y1
m
Bật pixel (round(x), y)
y = y1 + 1 x = x1 + 1 * 1/m
y=y+1 x = x + 1 /m
…
(x1,y1) Cho đến khi y == y2
2.2. CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ (tt)
Bài tập: cho tọa điểm A(2,3) và B(12,8) trình bày các bước vẽ đường thẳng đi
từ A đến B
8
7 Line: (2,3) -> (12,8)
6 ?
5
4 pixels nào sẽ được bật lên?
3
2
1
0 1 2 3 4 5 6 7 8 9 10 11
2.2. CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ (tt)
Bài tập: cho tọa điểm A(2,3) và B(12,8) trình bày các bước vẽ đường thẳng đi
từ A đến B
By Ay 8 3 5
8 m 0.5(0 m 1)
7 Bx Ax 12 2 10
6 y k 1 y k m
5 x = xA= 2 y = yA=3
4 x = xA+1= 3 y = yA + 1 * m = 3+1*0.5 = 3.5 (~4)
3 x = x+1= 4 y = y + 1 * m = 3.5+1*0.5 = 4
2 x = x+1= 5 y = y + 1 * m = 4+1*0.5 = 4.5 (~5)
1 x = x+1= 6 y = y + 1 * m = 4.5+1*0.5 = 5
0 1 2 3 4 5 6 7 8 9 10 11
2.2. CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ (tt)
Bài tập: cho tọa điểm A(2,3) và B(12,8) trình bày các bước vẽ đường thẳng đi
từ A đến B
By Ay 8 3 5
8 m 0.5(0 m 1)
7 Bx Ax 12 2 10
6 y k 1 y k m
5 x = x+1= 7 y = y + 1 * m = 5+1*0.5 = 5.5 (~6)
4 x = x+1= 8 y = y + 1 * m = 5.5+1*0.5 = 6
3 x = x+1= 9 y = y + 1 * m = 6+1*0.5 = 6.5 (~7)
x = x+1= 10 y = y + 1 * m = 6.5+1*0.5 = 7
2
x = x+1= 11 y = y + 1 * m = 7+1*0.5 = 7.5 (~8)
1 x = x+1= 12 y = y + 1 * m = 7.5+1*0.5 = 8
0 1 2 3 4 5 6 7 8 9 10 11 12
2.2. CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ (tt)
Bài tập: cho tọa điểm A(12,8) và B(2,3) trình bày các bước vẽ đường thẳng đi
từ A đến B By Ay 3 8 5
yk 1 yk m x 1 m 0.5 (0 m 1)
Bx Ax 2 12 10
x=x-1= 11 y=y-m= 7,5 (~8) 12
11
x=x-1= 10 y=y-m= 7
10
x=x-1= 9 y=y-m= 6,5 (~7) 9
x=x-1= 8 y=y-m= 6 8
x=x-1= 7 y=y-m= 5,5 (~6) 7
6
x=x-1= 6 y=y-m= 5 5
x=x-1= 5 y=y-m= 4,5 (~5) 4
x=x-1= 4 y=y-m= 4 3
2
x=x-1= 3 y=y-m= 3,5 (~4)
1
x=x-1= 2 y=y-m= 3 1 2 3 4 5 6 7 8 9 10 11 12
2.2. CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ (tt)
Bài tập: cho tọa điểm A(3,2) và B(8,12) trình bày các bước vẽ đường thẳng đi
từ A đến B By Ay 12 2 10
m 2( m 1)
1 Bx Ax 83 5
xk 1 xk y y 1 12
m 11
y = y+1= 3 x = x + 1 / m = 3+1/2 = 3.5 (~4)
10
y = y+1= 4 x = x + 1 / m = 3.5+1/2 = 4 9
y = y+1= 5 x = x + 1 / m = 4+1/2 = 4.5 (~5) 8
y = y+1= 6 x = x+ 1 / m = 4.5+1/2 = 5 7
6
y = y+1= 7 x = x + 1 / m = 5+1/2 = 5.5 (~6)
5
y= y+1= 8 x = x + 1 /m = 6.5+1/2 = 6
4
y= y+1= 9 x = x + 1 /m = 6+1/2 = 6.5 (~7) 3
y= y+1= 10 x = x + 1 /m = 6.5+1/2 = 7 2
y= y+1= 11 x = x + 1 /m = 7+1/2 = 7.5 (~8) 1
y= y+1= 12 x = x + 1 /m = 7.5+1/2 = 8 1 2 3 4 5 6 7 8 9 10 11 12
2.2. CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ (tt)
Bài tập: cho tọa điểm A(8,12) và B(3,2) trình bày các bước vẽ đường thẳng đi
từ A đến B 1 By Ay 2 12 10
xk 1 xk y 1 m 2 (m 1)
m Bx Ax 3 8 5
y=y-1= 11 x=x-1/m= 7,5 (~8) 12
11
y=y-1= 10 x=x-1/m= 7
10
y=y-1= 9 x=x-1/m= 6,5 (~7) 9
y=y-1= 8 x=x-1/m= 6 8
y=y-1= 7 x=x-1/m= 5,5 (~6) 7
6
y=y-1= 6 x=x-1/m= 5 5
y=y-1= 5 x=x-1/m= 4,5 (~5) 4
y=y-1= 4 x=x-1/m= 4 3
y=y-1= 3 x=x-1/m= 3,5 (~4) 2
1
y=y-1= 2 x=x-1/m= 3 1 2 3 4 5 6 7 8 9 10 11 12
2.2. CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ (tt)
Bài tập: cho tọa điểm A(2,8) và B(12,3) trình bày các bước vẽ đường thẳng đi
từ A đến B By Ay 38 5
yk 1 yk m x 1 m 0.5 (0 | m | 1)
Bx Ax 12 2 10
x=x+1= 3 y=y+m= 7,5 (~8) 12
11
x=x+1= 4 x=x-1/m= 7
10
x=x+1= 5 x=x-1/m= 6,5 (~7) 9
x=x+1= 6 x=x-1/m= 6 8
x=x+1= 7 x=x-1/m= 5,5 (~6) 7
6
x=x+1= 8 x=x-1/m= 5 5
x=x+1= 9 x=x-1/m= 4,5 (~5) 4
x=x+1= 10 x=x-1/m= 4 3
2
x=x+1= 11 x=x-1/m= 3,5 (~4)
1
x=x+1= 12 x=x-1/m= 3 1 2 3 4 5 6 7 8 9 10 11 12
2.2. CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ (tt)
Bài tập: cho tọa điểm A(12,3) và B(2,8) trình bày các bước vẽ đường thẳng đi
từ A đến B By Ay 8 3 5
yk 1 yk m x 1 m 0.5 (0 | m | 1)
Bx Ax 2 12 10
x=x-1= 11 y=y-m= 3,5 (~4) 12
x=x+1= 10 y=y-m= 4 4 11
10
x=x+1= 9 y=y-m= 4,5 (~5) 9
x=x+1= 8 y=y-m= 5 5 8
x=x+1= 7 y=y-m= 5,5 (~6) 7
6
x=x+1= 6 y=y-m= 6 6
5
x=x+1= 5 y=y-m= 6,5 (~7) 4
x=x+1= 4 y=y-m= 7 7 3
x=x+1= 3 y=y-m= 7,5 (~8) 2
1
x=x+1= 2 y=y-m= 8 8
1 2 3 4 5 6 7 8 9 10 11 12
2.2. CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ (tt)
Bài tập: cho tọa điểm A(3,12) và B(8,2) trình bày các bước vẽ đường thẳng đi
từ A đến B 1 By Ay 2 12 10
xk 1 xk y 1 m 2 (| m | 1)
m Bx Ax 8 3 5
y=y-1= 11 x=x-1/m= 3,5 (~4) 12
y=y-1= 10 x=x-1/m= 4 4 11
10
y=y-1= 9 x=x-1/m= 4,5 (~5) 9
y=y-1= 8 x=x-1/m= 5 5 8
y=y-1= 7 x=x-1/m= 5,5 (~6) 7
6
y=y-1= 6 x=x-1/m= 6 6 5
y=y-1= 5 x=x-1/m= 6,5 (~7) 4
y=y-1= 4 x=x-1/m= 7 7 3
2
y=y-1= 3 x=x-1/m= 7,5 (~8) 1
y=y-1= 2 x=x-1/m= 8 8 1 2 3 4 5 6 7 8 9 10 11 12
2.2. CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ (tt)
Bài tập: cho tọa điểm A(8,2) và B(3,12) trình bày các bước vẽ đường thẳng đi
từ A đến B 1 By Ay 12 2 10
xk 1 xk y 1 m 2 (| m | 1)
y=y+1= 3 x=x+1/m= 7,5 (~8)
m Bx Ax 3 8 5
12
y=y+1= 4 x=x+1/m= 7 7
11
y=y+1= 5 x=x+1/m= 6,5 (~7) 10
y=y+1= 6 x=x+1/m= 6 6 9
8
y=y+1= 7 x=x+1/m= 5,5 (~6) 7
y=y+1= 8 x=x+1/m= 5 5 6
5
y=y+1= 9 x=x+1/m= 4,5 (~5)
4
y=y+1= 10 x=x+1/m= 4 4 3
y=y+1= 11 x=x+1/m= 3,5 (~4) 2
1
y=y+1= 12 x=x+1/m= 3 3 1 2 3 4 5 6 7 8 9 10 11 12
2.2. CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ (tt)
Tóm lại, thuật toán DDA được mô tả theo 8 trường hợp như sau:
1. (xa<xb;ya<yb;dy<dx): 0<m<1 yk 1 yk m x x 1
yk 1 yk m x x 1
2. (xa>xb;ya>yb;|dy|<|dx|): 0<|m|<1 1
3. (xa<xb;ya<yb;dy>dx): m>1 xk 1 xk y y 1 1
m xk 1 xk y y 1
4. (xa>xb;ya>yb;|dy|>|dx|): |m|>1 m
5. (xa<xb;ya>yb;|dx|<dy): 0<|m|<1 yk 1 yk m x x 1
6. (xa>xb;ya<yb;dx>|dy|): 0<|m|<1 yk 1 yk m x x 1
1
7. (xa<xb;ya>yb;dy<|dx|): |m|>1 xk 1 xk m y y 1 1
xk 1 xk y y 1
8. (xa>xb;ya<yb;dy>|dx|): |m|>1 m
2.2. CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ (tt)
Begin
• 2.2.3. Các giải thuật xây dựng thực thể cơ sở (tt)
m=Dy/Dx
• Thuật toán DDA (Digital Differential Analizer) (tt) x=x1
#define Round(a) int(a+0.5) y=y1
int Color = GREEN; putpixel(x,y,color)
void LineDDA(int x1, int y1, int x2, int
y2)
{
int x = x1; x<x2
No
float y = y1;
float m = float(y2-y1)/(x2-x1);
Yes
putpixel(x, Round(y), Color);
for(int i=x1; i<x2; i++) x=x+1
{ y=y+m
x++;
y+=m;
putpixel(x,round(y),color)
putpixel(x,Round(y),Color);
}
} // LineDDA End
2.2. CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ (tt)
• Jack Elton Bresenham (11/10/1937, Clovis, New Mexico, Hoa Kỳ) là cựu giáo sư khoa học máy tính.
Ông từng làm việc trong phòng thí nghiệm tính toán tại phòng thí nghiệm phát triển San Jose của
IBM. Thuật toán được sử dụng cho máy vẽ Calcomp kết nối với IBM 1401 thông qua bảng điều
khiển máy của đánh chữ 1407 vào năm 1962. Thuật toán của ông sau đó đã được mở rộng để xây
dựng đường tròn (Bresenham's midpoint circle algorithm). Thuật toán Bresenham sử dụng hầu hết
trong sản phẩm phần cứng như máy vẽ và trong chip đồ họa của card đồ họa hiện đại và trong
• Ta có: y = m(xi+1) + b
2.2. CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ (tt)
• 2.2.3. Các giải thuật xây dựng thực thể cơ sở (tt)
• Giải thuật Bresenham (tt)
yi+1 P
• Đặt d1=y-yi và d2=yi+1-y d2
y
• Xét tất cả các vị trí tương đối của y so với yi và yi+1, việc chọn d1
y S
điểm (xi+1, yi+1) là S hay P phụ thuộc vào việc dấu của (d1−d2): i
xi xi+1
• Nếu (d1−d2) < 0, điểm S được chọn, tức là yi+1=yi . Ngược lại, ta chọn điểm P, tức yi+1 = yi+1.
• Thay vào phương trình trên ta được: pi = 2Dyxi − 2Dxyi + c , với c = 2Dy + (2b − 1)Dx
2.2. CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ (tt)
• Giá trị p0 được tính từ điểm vẽ đầu tiên (x0, y0) theo công thức:
• Do (x0, y0) là điểm nguyên thuộc về đoạn thẳng nên ta có: y0 = mx0 + b = x0+b.
• dx = xB – xA = 40 – 30 = 10 0 6 (31,21)
1 2 (32,22)
• m = 0.8 (0<m<1)
2 -2 (33,22)
• Tính toán giá trị P0:
3 14 (34,23)
• P0= 2dy – dx = 2(8) – 10 = 6 (>0) 4 10 (35,24)
• Hằng số 2dy và 2dy-2dx: 5 6 36,25
2dy = 2(8) = 16 6 2 37,26
2dy-2dx = 2(8)- 2(10) =16 – 20 = -4
7 -2 38,26
• Pk+1= Pk+2dy-2dx= 6-4 =2 (>0) 8 14 39,27
• Pk+1= Pk+2dy-2dx= 2-4 =-2 (<0) 9 10 40,28
• Pk+1= Pk+2dy =-2+16 = 14 (>0)
• Pk+1= Pk+2dy-2dx= 14-4 =10 (>0)
2.2. CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ (tt)
K Pk (Xk+1, Yk+1)
• Pk+1= Pk+2dy-2dx= 10-4 =6 (>0) 0 6 (31,21)
• Pk+1= Pk+2dy-2dx =6-4 = 2 (>0) 1 2 (32,22)
2 -2 (33,22)
• Pk+1= Pk+2dy-2dx= 2-4 =-2 (<0)
3 14 (34,23)
• Pk+1= Pk+2dy = -2+16 =14 (>0)
4 10 (35,24)
• Pk+1= Pk+2dy-2dx= 14-4 = 10 (>0) 5 6 (36,25)
6 2 (37,26)
7 -2 (38,26)
8 14 (39,27)
9 10 (40,28)
2.2. CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ (tt)
• Bài tập: cho tọa điểm A(3,2) và B(8,12) trình bày các bước vẽ đường thẳng đi từ A đến B
xA 3 xB 8 dx 5 2dx-2dy -10 m=2
yA 2 yB 12 dy 10 2dx 10 đổi y thành x
12
K Cal Pk (Xk+1, Yk+1)
11
0 2dx-dy 0 4,3
10
p0>0 1 p0+2(dx-dy) -10 4,4 9
p1<0 2 p1+2dx 0 5,5 8
p2>0 3 p2+2(dx-dy) -10 5,6 m>1 7
p3<0 4 p3+2dx 0 6,7 TF 6
p4>0 5
5 p4+2(dx-dy) -10 6,8
4
p5<0 6 p5+2dx 0 7,9 3
p6>0 7 p6+2(dx-dy) -10 7.10 2
p7<0 8 p7+2dx 0 8,11 1
p8>0 9 p8+2(dx-dy) -10 8,12 1 2 3 4 5 6 7 8 9 10 11 12
2.2. CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ (tt)
• Ta có: y = m(xi-1) + b 0<m<1; y biến thiên theo x (Dx) do x >> nhanh hơn y
Nếu pi >= 0 thì pi+1 = pi - 2Dy + 2Dx do ta chọn yi+1 = yi-1, có nghĩa x=x-1 và y=y-1
• Ta có: y = m(xi+1) + b 0<|m|<1; y biến thiên theo x (Dx) do x >> nhanh hơn y
Nếu pi 0 thì pi+1 = pi + 2Dy + 2Dx do ta chọn yi+1 = yi-1, có nghĩa x=x+1 và y=y-1
• Ta có: y = m(xi-1) + b 0<|m|<1; y biến thiên theo x (Dx) do x >> nhanh hơn y
Nếu pi 0 thì pi+1 = pi + 2Dy do ta chọn yi+1 = yi, có nghĩa x=x-1 và y=y-1
• Ngược lại, nếu pi< 0 , thì pi+1 = pi + 2Dx + 2Dy, do ta chọn yi+1 = yi +1
yi+1 P
• Giá trị p0 được tính từ điểm vẽ đầu tiên (x0, y0) theo công thức: d1
y
d2
pi = 2Dxyi - 2Dyxi + 2Dy - 2bDx + Dx yi S
0<|m|<1
• Do (x0, y0) là điểm nguyên thuộc về đoạn thẳng nên ta có: FT
• y0 = mx0 + b = x0+b. xi-1 xi
• Thế vào phương trình trên ta suy ra: p0 = Dx+2Dy
2.2. CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ (tt)
• Bài tập: cho tọa điểm A(12,8) và B(2,3) trình bày các bước vẽ đường thẳng đi từ A đến B
xA 12 xB 2 dx -10 2dy+2dx -10 m=-0.5
yA 3 yB 8 dy 5 2dy 10
K Cal Pk Yk-1 Xk-1
p0 12
0 dx+2dy 0 4 11
p0<=0 11
1 p0+2dy+2dx 10 4 10
10
p1>0 2 p1+2dy 0 5 9
9
p2<=0 3 p2+2dy+2dx 10 5 8
8
p3>0 4 p3+2dy 0 6 7 0<|m|<1 7
p4<=0 5 p4+2dy+2dx 10 6 6 FT 6
p5>0 6 p5+2dy 0 7 5 5
p6<=0 7 p6+2dy+2dx 10 7 4 4
p7>0 8 p7+2dy 0 8 3 3
p8<=0 9 p8+2dy+2dx 10 8 2 2
if (p<=0; x--;y++) else(x--) 1
1 2 3 4 5 6 7 8 9 10 11 12
2.2. CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ (tt)
• Bài tập: cho tọa điểm A(12,8) và B(2,3) trình bày các bước vẽ đường thẳng đi từ A đến B
xA 8 xB 3 dx -5 2dx+2dy 10 m=-2
yA 2 yB 12 dy 10 2dx -10 đổi vai trò x,y
K Cal Pk Yk+1 Xk-1
12
p0 0 2dx+dy 0 3 7
11
p0<=0 1 p0+2dx+2dy 10 4 7
10
p1>0 2 p1+2dx -10 5 6 9
p2<=0 3 p2+2dx+2dy 0 6 5 8
p3<=0 4 p3+2dx+2dy 10 7 5 |m|>1 7
p4>0 5 p4+2dx 0 8 4 FT 6
p5<=0 6 p5+2dx+2dy 10 9 4 5
p6>0 7 p6+2dx 0 10 3 4
p7<=0 8 p7+2dx+2dy 10 11 3 3
p8>0 9 p8+2dx 0 12 2 2
if (p<=0; x--;y++) else(y++) 1
1 2 3 4 5 6 7 8 9 10 11 12
2.2. CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ (tt)
[
¿ 0 ,𝑛ế 𝑢 ( 𝑥 , 𝑦 ) 𝑛ằ 𝑚 𝑝h í 𝑎𝑡𝑟 ê 𝑛đườ 𝑛𝑔 𝑡h ẳ𝑛𝑔
𝑓 (𝑥 , 𝑦 ) ¿ 0 ,𝑛ế 𝑢 ( 𝑥 , 𝑦 ) 𝑡h𝑢ộ 𝑐 đườ 𝑛𝑔 𝑡h ẳ 𝑛𝑔
¿ 0 , 𝑛ế 𝑢 ( 𝑥 , 𝑦 ) 𝑛 ằ 𝑚 𝑝h í 𝑎 𝑑ướ 𝑖 đườ 𝑛𝑔 𝑡h ẳ 𝑛𝑔
2.2. CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ (tt)
• Ngược lại, nếu pi ≥ 0 , điểm MidPoint nằm phía dưới đoạn thẳng. Lúc này điểm
thực Q nằm trên điểm MidPoint nên ta chọn P, tức là yi+1 = yi+1.
2.2. CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ (tt)
• p0 = f(x0+1,y0+
• Phương trình đường tròn có tâm là gốc tọa độ, bán kính r là:
x2 + y2 = r2 (định lý pithagoras)
• Từ phương trình này ta có thể đưa về dạng
• Để vẽ các đường tròn có tâm (xC,yC) bất kì, đơn giản chỉ cần
tịnh tiến các điểm sau khi vẽ xong đường tròn có tâm là gốc
tọa độ theo vector tịnh tiến (xC, yC)
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
R = 10 R = 50 R = 100 R = 1000
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• Một cách tiếp cận khác là vẽ các điểm (Rcos(θ ), Rsin(θ)), với θ
chạy từ 0 đến 900.
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• 2.3. Các giải thuật xây dựng thực thể cơ sở
• Giải thuật sinh đường tròn Bresenham (Scan Converting Circles)
Ta chia đường tròn là làm 8 phần, do tính chất đối xứng của nó.
Nên khi ta tính toán được 1 điểm có tọa độ x,y đồng nghĩa với việc
ta xác định đầy đủ 8 điểm cho 8 phần như sau:
putpixel () putpixel ()
putpixel () putpixel ()
putpixel ( putpixel ()
putpixel () putpixel ()
Ta xét các điểm tạo ra từ góc phần tư thứ 2: từ 450 đến 900, thực hiện theo hướng x, y.
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• Đặt .
• Từ đó:
• Và
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• 2.3. Các giải thuật xây dựng thực thể cơ sở
• Giải thuật sinh đường tròn Bresenham (Scan Converting Circles)
• Từ phương trình:
True True
x<y circle(xc,yc,x,y) d<=0 d=d+4x+6
False False
y--
exit
d=d+4x-4y+10
circle(xc,yc,x,y)
x++
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• Nếu có (x, y) ∈ (C1/8) thì các điểm: (y,x), (x,-y), (y,-x), (-x,-y), (-y,-x), (-y,x), (-x,y) ∈ (C).
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• 2.3. Các giải thuật xây dựng thực thể cơ sở
• Giải thuật sinh đường tròn Midpoint
• Chọn điểm (0,R) bắt đầu để vẽ. Dựa vào hình trên, nếu (xi, yi)
là điểm nguyên đã tìm được ở bước thứ i, thì điểm ( xi+1, yi+1)
ở bước thứ (i+1) là sự lựa chọn giữa S và P.
• Tương tự như thuật toán MidPoint vẽ đoạn thẳng, việc quyết định chọn một trong hai
điểm S và P sẽ được thực hiện thông qua việc xét dấu của một hàm nào đó tại điểm
MidPoint là điểm nằm giữa chúng.
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• 2.3. Các giải thuật xây dựng thực thể cơ sở
• Giải thuật sinh đường tròn Midpoint
• Đặt f( x, y ) = x2 + y2 − R2, ta có
• Xét
• Nếu pi < 0 , điểm MidPoint nằm trong đường tròn. Lúc này điểm thực Q gần S hơn nên ta
chọn S, tức là yi+1 = yi
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• 2.3. Các giải thuật xây dựng thực thể cơ sở
• Giải thuật sinh đường tròn Midpoint
• Ngược lại, nếu pi ≥ 0, điểm MidPoint nằm ngoài đường tròn. Lúc này điểm
thực Q gần P hơn nên ta chọn P, tức là yi+1 = yi − 1. Mặt khác:
• Do
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• Ta tính giá trị p0 ứng với điểm ban đầu (x0,y0 ) = (0, R).
•
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
Begin
• Ta có: tổng khoảng cách của các tiêu điểm F1 và F2 đến bất
kỳ điểm P (nằm trên cung của Ellipse) đều có cùng giá trị. Hay:
• Trong đó: và
• Nên:
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• 2.3. Các giải thuật xây dựng thực thể cơ sở
• Giải thuật sinh đường ellipse
• Hệ số góc:
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• 2.3. Các giải thuật xây dựng thực thể cơ sở
• Giải thuật sinh đường ellipse
• Bắt đầu tại tâm (0,r), thực hiện dịch chuyển x tăng dần cho đến
khi chạm biên của vùng 1 và vùng 2.
• Sau đó, dịch chuyển y tăng dần từ biên vùng 2 cho đến hết góc
phần tư thứ nhất.
• Tại đường biên:
• Bên ngoài vùng 1:
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• 2.3. Các giải thuật xây dựng thực thể cơ sở
• Giải thuật Midpoint
• Ta có:
• Nếu , điểm midpoint nằm bên trong Ellipse. Hay S là điểm kế tiếp.
• Ngược lại, điểm midpoint nằm ngoài trong Ellipse. Hay P là điểm kế
tiếp.
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• 2.3. Các giải thuật xây dựng thực thể cơ sở
• Giải thuật sinh đường ellipse
• Hay:
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• 2.3. Các giải thuật xây dựng thực thể cơ sở
• Giải thuật sinh đường ellipse
• Ứng với mỗi dòng quét y=k, k thay đổi từ ymin đến ymax, lặp lại:
• Tìm tất cả các hoành độ giao điểm của dòng quét y=k với các cạnh của đa giác.
• Sắp xếp các hoành độ giao điểm theo thứ tự tăng dần : x0, x1, …
• Tô màu các đoạn thẳng y=k trên đường thẳng lần lượt được giới hạn bởi các cặp
(x0, x1), ( x2, x3), ….(x2k, x2k+1).
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• 2.3. Các giải thuật xây dựng thực thể cơ sở
• Giải thuật sinh đa giác (Polygon)
• Các thuật toán tô miền kín đa giác:
• Giải thuật dòng quét (scanline) cho việc tô màu vùng
void scanline_rectg(x1,y1,x2,y2,c)
• Tô màu hình chữ nhật: {
int i,j;
for(i=y1; i>=y2; i--) {
Phép tô màu 1 đa giác bất kỳ sẽ phức tạp hơn for(j=x1; j<= x2;j++) {
rất nhiều so với hình chữ nhật putpixel(i,j,c);
}
}
}
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• 2.3. Các giải thuật xây dựng thực thể cơ sở
Ma trận các đỉnh của tam giác
• Các thuật toán tô miền kín đa giác: ScanLine
• Tô màu đa giác có tọa độ như sau: Xác định giá trị dx và dy
Hệ số góc dy/dy
Hệ số góc dx/dy
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• 2.3. Các giải thuật xây dựng thực thể cơ sở
• Các thuật toán tô miền kín đa giác: ScanLine
• Tìm các điểm giao cắt các cạnh của tam giác với các dòng quét (y=0 đến y=5).
Nếu tồn tại giao điểm, xác định tọa độ tài điểm cắt với giá trị (xgiao điểm, y)
• Nếu scanline y bất kỳ cắt qua cạnh XY nào đó khi và chỉ khi:
• Tọa đọa điểm cắt được xác định thông qua phương trình sau:
hay
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• 2.3. Các giải thuật xây dựng thực thể cơ sở
• Các thuật toán tô miền kín đa giác: ScanLine
• Y=0
• Xét cạnh AB, rõ ràng cả 2 đỉnh A và B đều không thỏa mãn
biểu thức để chứng tỏ đường thẳng y=0 cắt ngang cạnh
AB. Do đó không cần xác định tọa độ điểm giao nhau giữa
y=0 và đoạn AB
• Xét cạnh BC và CA đều tương tự như cạnh AB
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• 2.3. Các giải thuật xây dựng thực thể cơ sở
• Các thuật toán tô miền kín đa giác: ScanLine
• Y=1
• Xét cạnh AB, rõ ràng cả 2 đỉnh A và B đều không thỏa mãn
biểu thức để chứng tỏ đường thẳng y=1 cắt ngang cạnh
AB. Do đó không cần xác định tọa độ điểm giao nhau giữa
y=1 và đoạn AB
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• 2.3. Các giải thuật xây dựng thực thể cơ sở
• Các thuật toán tô miền kín đa giác: ScanLine
• Y=1
• Xét cạnh BC
yB = 4 > 1 và yC = 1 <=1
xgđ[0] = xB + m(y-yB) hoặc xgđ[0] = xC + m(y-yC)
xgđ[0] = 3 + 1/3(1-4) hoặc xgđ[0] = 2 + 1/3(1-1)
xgđ[0] = 2 hoặc xgđ[0] = 2
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• 2.3. Các giải thuật xây dựng thực thể cơ sở
• Các thuật toán tô miền kín đa giác: ScanLine
• Y=1
• Xét cạnh CA
yC = 1 <= 1 và yA = 2 >1
xgđ[1] = xA + m(y-yA) hoặc xgđ[1] = xC + m(y-yC)
xgđ[1] = 1 - 1(1-2) hoặc xgđ[1] = 2 - 1(1-1)
xgđ[1] = 2 hoặc xgđ[1] = 2
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• 2.3. Các giải thuật xây dựng thực thể cơ sở
• Các thuật toán tô miền kín đa giác: ScanLine
• Y=2
• Xét cạnh AB
yA = 2 <=2 và yB = 4 > 2
xgđ[2] = xA + m(y-yA) hoặc xgđ[2] = xB + m(y-yB)
xgđ[2] = 1 + 1(2-2) hoặc xgđ[2] = 3 + 1(2-4)
xgđ[2] = 1 hoặc xgđ[2] = 1
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• 2.3. Các giải thuật xây dựng thực thể cơ sở
• Các thuật toán tô miền kín đa giác: ScanLine
• Y=2
• Xét cạnh BC
yC = 1 <= 2 và yB = 4 >2
xgđ[3] = xB + m(y-yB) hoặc xgđ[3] = xC + m(y-yC)
xgđ[3] = 3 + 1/3(2-4) hoặc xgđ[3] = 2 + 1/3(2-1)
xgđ[3] = 2 hoặc xgđ[3] = 2
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• 2.3. Các giải thuật xây dựng thực thể cơ sở
• Các thuật toán tô miền kín đa giác: ScanLine
• Y=2
• Xét cạnh CA
yC = 1 < 2 và yA = 2 >=2
xgđ[4] = xA + m(y-yA) hoặc xgđ[4] = xC + m(y-yC)
xgđ[4] = 1 - 1(2-2) hoặc xgđ[4] = 2 - 1(2-1)
xgđ[4] = 1 hoặc xgđ[4] = 1
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• 2.3. Các giải thuật xây dựng thực thể cơ sở
• Các thuật toán tô miền kín đa giác: ScanLine
• Y=3
• Xét cạnh AB
y=3
yA = 2 <=3 và yB = 4 > 3
xgđ[5] = xA + m(y-yA) hoặc xgđ[5] = xB + m(y-yB)
xgđ[5] = 1 + 1(3-2) hoặc xgđ[5] = 3 + 1(3-4)
xgđ[5] = 2 hoặc xgđ[5] = 2
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• 2.3. Các giải thuật xây dựng thực thể cơ sở
• Các thuật toán tô miền kín đa giác: ScanLine
• Y=3
• Xét cạnh BC
y=3
yC = 1 <= 3 và yB = 4 >3
xgđ[6] = xB + m(y-yB) hoặc xgđ[6] = xC + m(y-yC)
xgđ[6] = 3 + 1/3(3-4) hoặc xgđ[6] = 2 + 1/3(3-1)
xgđ[6] = 3 hoặc xgđ[3] = 3
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• 2.3. Các giải thuật xây dựng thực thể cơ sở
• Các thuật toán tô miền kín đa giác: ScanLine
• Y=3
• Xét cạnh CA, rõ ràng cả 2 đỉnh A và C đều không thỏa mãn y=3
biểu thức để chứng tỏ đường thẳng y=3 cắt ngang cạnh
AC. Do đó không cần xác định tọa độ điểm giao nhau giữa
y=3 và đoạn AC
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• 2.3. Các giải thuật xây dựng thực thể cơ sở
• Các thuật toán tô miền kín đa giác: ScanLine
• Y=4
• Xét cạnh AB
yA = 2 <4 và yB = 4 >=4
xgđ[7] = xA + m(y-yA) hoặc xgđ[7] = xB + m(y-yB)
xgđ[7] = 1 + 1(4-2) hoặc xgđ[7] = 3 + 1(4-4)
xgđ[7] = 3 hoặc xgđ[7] = 3
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• 2.3. Các giải thuật xây dựng thực thể cơ sở
• Các thuật toán tô miền kín đa giác: ScanLine
• Y=4
• Xét cạnh BC
yC = 1 < 4 và yB = 4 >= 4
xgđ[8] = xB + m(y-yB) hoặc xgđ[8] = xC + m(y-yC)
xgđ[8] = 3 + 1/3(4-4) hoặc xgđ[8] = 2 + 1/3(4-1)
xgđ[8] = 3 hoặc xgđ[8] = 3
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• 2.3. Các giải thuật xây dựng thực thể cơ sở
• Các thuật toán tô miền kín đa giác: ScanLine
• Y=4
• Xét cạnh CA, rõ ràng cả 2 đỉnh A và C đều không thỏa mãn
biểu thức để chứng tỏ đường thẳng y=4 cắt ngang cạnh
AC. Do đó không cần xác định tọa độ điểm giao nhau giữa
y=4 và đoạn AC
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• 2.3. Các giải thuật xây dựng thực thể cơ sở
• Các thuật toán tô miền kín đa giác: ScanLine
• Y=5
• Xét cạnh AB, rõ ràng cả 2 đỉnh A và B đều không thỏa mãn
biểu thức để chứng tỏ đường thẳng y=5 cắt ngang cạnh
AB. Do đó không cần xác định tọa độ điểm giao nhau giữa
y=5 và đoạn AB
• Xét cạnh BC và CA đều tương tự như cạnh AB
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• 2.3. Các giải thuật xây dựng thực thể cơ sở
• Các thuật toán tô miền kín đa giác: ScanLine
• Tập hợp các giao điểm:
• Tiến hành tô màu: thực hiện vẽ các đường thẳng nối các tọa độ ở trên
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• 2.3. Các giải thuật xây dựng thực thể cơ sở
• Các thuật toán tô miền kín đa giác: ScanLine
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• 2.3. Các giải thuật xây dựng thực thể cơ sở
• Các thuật toán tô miền kín đa giác:
• Giải thuật vết dầu loang (Flood Fill - fill Algorithm)
• Thuật toán tô màu loang (hay còn gọi là tô màu theo đường biên, tô lân cận). Khác với
thuật toán tô màu dựa theo dòng quét, đường biên của vùng tô màu ở thuật toán tô
loang được xác định bởi tập các đỉnh của 1 đa giác, đường biên trong thuật toán được
mô tả bằng một giá trị duy nhất, đó là màu của tất cả các điểm thuộc về đường biên (nói
ngắn gọn là chúng ta sẽ tô đường biên một màu riêng).
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• 2.3. Các giải thuật xây dựng thực thể cơ sở
• Các thuật toán tô miền kín đa giác:
• Giải thuật vết dầu loang (Flood Fill - fill Algorithm)
• Bắt đầu từ 1 điểm nằm bên trong vùng tô, ta sẽ kiểm tra
các điểm lân cận của nó đã được tô màu hay có phải
điểm biên hay không. Nếu không phải là điểm đã tô và
không phải là điểm biên ta sẽ tô màu nó. Lặp lại cho tới
khi nào không còn tô được điểm nào nữa thì dừng.
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• 2.3. Các giải thuật xây dựng thực thể cơ sở
• Giải thuật vết dầu loang (Flood Fill - fill Algorithm)
• Thuật toán này có thể sẽ không hoạt động chính xác khi có 1 số điểm nằm trong vùng
tô có màu là màu cần tô của vùng tô. Để khắc phục điều này, trước khi tô màu, cần
phải đảm bảo rằng toàn bộ các điểm thuộc về vùng tô có màu khác màu tô.
• Có hai quan điểm về cách tô này, đó là dùng 4 điểm lân cận hay 8 điểm lân cận đối với
điểm đang xét.
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• 2.3. Các giải thuật xây dựng thực thể cơ sở
• Giải thuật vết dầu loang (Flood Fill - fill Algorithm)
Ma trận các đỉnh của đa giác
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• 2.3. Các giải thuật xây dựng thực thể cơ sở
• Giải thuật vết dầu loang (Flood Fill - fill Algorithm)
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• 2.3. Các giải thuật xây dựng thực thể cơ sở
• Giải thuật vết dầu loang (Flood Fill - fill Algorithm)
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• 2.3. Các giải thuật xây dựng thực thể cơ sở
• Giải thuật vết dầu loang (Flood Fill - fill Algorithm)
• Nếu chọn sai điểm trung tâm (nằm trên hoặc nằm bên ngoài đa giác) kết quả là không
thể tô màu
CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
• 2.3. Các giải thuật xây dựng thực thể cơ sở
• Các thuật toán tô miền kín đa giác:
• Giải thuật đường biên bé nhất – đường biên lớn nhất (Boundary Fill Algorithm)
• Thuật toán này tương tự như thuật toán tô theo vết dầu loang. Nghĩa là sẽ đi xác định
điểm biên tận cùng bên phải, sau đó tăng y để tô cho tận cùng lên trên (xuống dưới), tiếp
tục giảm y ngay tại điểm xuất phát để tô cho tận cùng bên dưới (bên trên).
• Lặp lại thao tác này với giá trị hoành độ x giảm 1 pixel cho đến khi x = giá trị khởi tạo.
• Thực hiện 2 thao tác trên với giá trị biên trái.
• Ví dụ và giải thuật tham khảo Flood Fill Algorithm.