Bài giảng Các đối tượng đồ họa cơ sở do Phan Phúc Doãn thực hiện nhằm cung cấp cho các bạn những kiến thức về hệ tọa độ thực và hệ tọa độ thiết bị; điểm; đường thẳng, đường gấp khúc; vùng tô; kí tự, chuỗi kí tự; đường thẳng trên màn hình; đặc điểm của đường thẳng nguyên; thuật toán Slope - Intercept và một số nội dung khác.
Trang 1Các đ i t ố ượ ng đ h a c s ồ ọ ơ ở
Các đ i t ố ượ ng đ h a c s ồ ọ ơ ở
Phan Phúc Doãn
Trang 2H t a đ th c và h t a đ thi t b ệ ọ ộ ự ệ ọ ộ ế ị
H t a đ th c và h t a đ thi t b ệ ọ ộ ự ệ ọ ộ ế ị
• H t a đ th c: H t a đ th c: ệ ọ ệ ọ ộ ự ộ ự
– T a đ là s th c, liên t c T a đ là s th c, liên t cọ ọ ộ ộ ố ự ố ự ụ ụ
– L n, nh tùy ý L n, nh tùy ýớ ớ ỏ ỏ
• H t a đ thi t b :H t a đ thi t b :ệ ọ ệ ọ ộ ộ ế ị ế ị
– T a đ nguyên, r i r c T a đ nguyên, r i r cọ ọ ộ ộ ờ ạ ờ ạ
– T a đ b gi i h n trong m t kho ng nào đó T a đ b gi i h n trong m t kho ng nào đóọ ọ ộ ị ớ ạ ộ ị ớ ạ ộ ộ ả ả
– X thu c [0, 639] X thu c [0, 639]ộ ộ
– H t a đ thi t b qui H t a đ thi t b qui ệ ọ ệ ọ ộ ộ ế ị ế ị ướ ước bàn tay trái c bàn tay trái
Trang 3Đi m ể
Đi m ể
• Là thành ph n c s Là thành ph n c s ầ ầ ơ ở ơ ở
• T a đ , màu s cT a đ , màu s cọ ọ ộ ộ ắ ắ
Trang 4Đ ườ ng th ng, đ ẳ ườ ng g p khúc ấ
• PhPhươ ương trình đo n ch n:ng trình đo n ch n:ạ ạ ắ ắ
• PhPhươ ương trình t ng quát: Ax + By + C = 0ng trình t ng quát: Ax + By + C = 0ổ ổ
• PhPhươ ương trình tham s : ng trình tham s : ố ố
• ĐĐườ ường g p khúc là t p các đo n th ng n i nhau xác đ nh b i ng g p khúc là t p các đo n th ng n i nhau xác đ nh b i ấ ấ ậ ậ ạ ạ ẳ ẳ ố ố ị ị ở ở
các đ nhỉ
các đ nhỉ
1 2 1 1 2 1 ( x x y y − )( − = − ) ( y y x x )( − )
(1 ) (1 )
Trang 5Đ ườ ng th ng, đ ẳ ườ ng g p khúc (tt) ấ
Đ ườ ng th ng, đ ẳ ườ ng g p khúc (tt) ấ
• Màu s cMàu s cắ ắ
• Đ r ng nét vĐ r ng nét vộ ộ ộ ộ ẽ ẽ
• Ki u nét v : li n, đ t, Ki u nét v : li n, đ t, ể ể ẽ ề ẽ ề ứ ứ
Trang 6Vùng tô
• ĐĐườ ường biên và vùng bên trongng biên và vùng bên trong
• ĐĐườ ường biên: gi ng đo n th ngng biên: gi ng đo n th ngố ố ạ ạ ẳ ẳ
• Vùng bên trong: màu tô và m u tôVùng bên trong: màu tô và m u tôẫ ẫ
Trang 7Kí t , chu i kí t ự ỗ ự
Kí t , chu i kí t ự ỗ ự
• Màu s cMàu s cắ ắ
• Font chữ
• Kích thKích thướ ướcc
• Kho ng cách gi a các kí tKho ng cách gi a các kí tả ả ữ ữ ự ự
• S canh ch nhS canh ch nhự ự ỉ ỉ
• Cách hi n th tu n t các kí tCách hi n th tu n t các kí tể ể ị ầ ự ị ầ ự ự ự
• HHướ ướng c a kí tng c a kí tủ ủ ự ự
Trang 8V đ ẽ ườ ng th ng ẳ
V đ ẽ ườ ng th ng ẳ
Trang 9Đ ườ ng th ng trên màn hình ẳ
Đ ườ ng th ng trên màn hình ẳ
Đường th ng đẳ ược hình thành
Đường th ng đẳ ược hình thành
t các đi m r i r cừ ể ờ ạ
t các đi m r i r cừ ể ờ ạ
Các đi m để ược xác đ nh t ị ừ
Các đi m để ược xác đ nh t ị ừ
phương trình c a đủ ường
phương trình c a đủ ường
th ngẳ
th ngẳ
Ideal Line Rasterized line
Trang 10Đ c đi m c a đ ặ ể ủ ườ ng th ng nguyên ẳ
Đ c đi m c a đ ặ ể ủ ườ ng th ng nguyên ẳ
X p x đấ ỉ ường th ng th cẳ ự
X p x đấ ỉ ường th ng th cẳ ự
Không liên t cụ
Không liên t cụ
D ng răng c a (hình b c ạ ư ậ
D ng răng c a (hình b c ạ ư ậ
thang) Nhanh – Thao tác c b n đ ơ ả ể
Nhanh – Thao tác c b n đ ơ ả ể
t o thành các đ i tạ ố ượng
t o thành các đ i tạ ố ượng
khác
Trang 11Ph ươ ng trình đ ườ ng th ng th c ẳ ự
Ph ươ ng trình đ ườ ng th ng th c ẳ ự
y m m x b b
Dx x2 x1
Dy y2 y1
m Dy / Dx
b y1 m m x1
(x 1 ,y 1 )
(x 2 ,y 2 ) Dy
Dx
Trang 12Thu t toán Slope Intercept ậ
SlopeInterceptLine(int x1, int y1, int x2, int y2, int color) { int Dx = x2 – x1;
int Dy = y2 – y1;
int x = x1, y = y1;
putpixel(x, y, color);
if (Dx != 0) {
float m = (float)Dy / (float)Dx;
float b = y1 - m*x1;
int stepX = (x2 > x1) ? 1 : -1;
while (x != x2) {
x += stepX;
y = round(m*x + b);
putpixel(x, y, color);
}
}
}
Trang 13L u ý ư
L u ý ư
Khi đ l n c a h s góc độ ớ ủ ệ ố ường th ng l n h n ẳ ớ ơ
Khi đ l n c a h s góc độ ớ ủ ệ ố ường th ng l n h n ẳ ớ ơ
1 thì các đi m trên để ường th ng r i r c.ẳ ờ ạ
1 thì các đi m trên để ường th ng r i r c.ẳ ờ ạ
Kh c ph c:Tính t a đ x theo y, nghĩa là x = ắ ụ ọ ộ
Kh c ph c:Tính t a đ x theo y, nghĩa là x = ắ ụ ọ ộ
g(y)
(x 2 ,y 2 )
(x 1 ,y 1 )
Dy
Dx
Trang 14Thu t toán c i ti n ậ ả ế
Thu t toán c i ti n ậ ả ế
ImprovedSlopeInterceptLine(int x1, int y1, int
x2, int y2, int color) {
int Dx = x2 – x1;
int Dy = y2 – y1;
int x = x1, y = y1;
putpixel(x, y, color);
if (abs(Dx) > abs(Dy)) {
float m = (float)Dy / (float)Dx;
float b = y1 - m*x1;
int stepX = (Dx < 0) ? -1 : 1;
while (x != x2) {
x += stepX;
putpixel(x, round(m*x + b), color);
}
} else if (Dy != 0) {
float m = (float)Dx / (float)Dy;
float b = x - m*y;
int stepY = (Dy < 0) ? -1 : 1;
while (y != y2) {
y += stepY;
putpixel(round(m*y + b), y, color);
}
}
}
Trang 15C i ti n ả ế
C i ti n ả ế
Vòng l p bên trong:ặ
Vòng l p bên trong:ặ
while (x != x2) {
x += stepX;
putpixel(x, round(m*x + b), color);
}
Giá tr c a y đị ủ ược tính tr c ti p t phự ế ừ ương trình
Giá tr c a y đị ủ ược tính tr c ti p t phự ế ừ ương trình
Chúng ta có th tính giá tr c a y b ng cách khác:ể ị ủ ằ
Chúng ta có th tính giá tr c a y b ng cách khác:ể ị ủ ằ
float t = m * x + b + 0.5;
while (x != x2) {
x += stepX;
t += m;
putpixel(x, (int)t, color);
}
Trang 16Digital Differential Analyzer
DDALine(int x1, int y1, int x2, int y2, int color) {
int Dx = x2 – x1;
int Dy = y2 – y1;
float t = 0.5;
int x = x1, y = y1;
putpixel(x, y, color);
if (abs(Dx) > abs(Dy)) {
float m = (float)Dy / (float)Dx;
float b = y - m*x;
int stepX = (Dx < 0) ? -1 : 1;
t += b + m*x;
m *= (float)stepX;
while (x != x2) {
x += stepX;
t += m;
putpixel(x, (int)t, color);
}
} else if (Dy != 0) {
// swap x & y to do other slopes
}
}