Chương 2
Các thuậ
thuật toán đồ
đồ ho
hoạ
ạ cơ sở
Nội dung
2.1. Các thuật toán vẽ đoạn thẳng
2.2. Các thuật toán vẽ đường tròn
2.3. Các thuật toán vẽ elip
2.4. Các thuật toán clipping
2.5. Các thuật toán tô màu
2.1. Các thuậ
thuật toán vẽ
vẽ đo
đoạ
ạn thẳ
thẳng
Bài toán:
Input: Cho đoạn thẳng P1P2 : P1(x1; y1), P2(x2; y2).
Output: Vẽ đoạn thẳng AB trên màn hình.
Giải quyết bài toán
Thuật toán làm tròn số
Thuật toán Bresenham
Thuật toán Midpoint
Thuậật toán làm tròn số
Thu
số
Phương trình đường thẳng P1P2 (P1P2 ):
y2 y1
y
( x x1 ) y1
x2 x1
y2 y1
Đặt m
x2 x1
Khi đó phương trình đường thẳng P1P2 :
y mx x1 y1
Thuậ
Thu
ật toán làm tròn số
số
y
Chia thành 4 trường hợp:
TH1: P1P2 song song với Oy
TH2: P1P2 song song với Ox
TH3: |m|1
TH4: |m|>1
(1)
(4)
(4)
(2)
(3)
O
(3)
x
Thuậật toán làm tròn số
Thu
số
y
TH1: x1=x2 (giả sử y1 < y2)
Bước 1: x=x1; y=y1;
Bước 2: Vẽ điểm (x; y);
Bước 3: y=y+1;
Bước 4: Nếu y<=y2 thì: Bước 2;
Bước 5: Kết thúc.
y2
P2
y1
P1
O
x1=x2
x
Thuậật toán làm tròn số
Thu
số
TH2 y1=y2 (Tương tự TH1)
TH2:
(Giả sử x1< x2)
Bước 1: x=x1; y=y1;
Bước 2: Vẽ điểm (x; y);
Bước 3: x=x+1;
Bước 4: Nếu x<=x2 thì: Bước 2;
Bước 5: Kết thúc.
y
P1
y1=y2
O
x1
P2
x2
Thuậật toán làm tròn số
Thu
số
TH3: |m| 1
TH3
Bước 1: Nếu x1 > x2 thì: Hoán
đổi vị trí P1, P2
(Đảm bảo x1 < x2)
Bước 2: x=x1; y=y1;
Bước 3: Vẽ điểm (x; y);
Bước 4: x=x+1;
y=round(m(x-x1)+y1);
Bước 5: Nếu x x2 thì: Bước 3;
Bước 6: Kết thúc;
y
P2
P1
O
x1
x2
x
Thuậật toán làm tròn số
Thu
số
TH4 |m| > 1 tương tự TH3
TH4:
khi đổi vai trò x, y.
Bước 1: Nếu y1 > y2 thì: Hoán
đổi vị trí P1, P2
(Đảm bảo y1 < y2)
Bước 2: x=x1; y=y1;
Bước 3: Vẽ điểm (x; y);
Bước 4: y=y+1;
x=round((1/m)(y-y1)+x1);
Bước 5: Nếu y y2 thì: Bước 3;
Bước 6: Kết thúc;
y
y2
P2
y1
P1
O
x
Thuậật toán Bresenham
Thu
x
O
TH1 x1=x2, TH2: y1=y2:
giống phương pháp
làm tròn số.
Còn lại: chia làm 4
trường hợp
(3)
(4)
(5)
TH3: 0 < m 1
TH4: -1 m <0
TH5: m > 1
TH6: m < -1
(6)
y
Thuậật toán Breseham
Thu
TH3: 0 < m 1
TH3
O(0,0)
xi
xi+1=xi+1
yi
d2
yi+1= ?
y
d1
x
Thuậật toán Breseham
Thu
Cơ sở toán học xây dựng thuật toán:
Giả sử ta có điểm thứ i: (xi; yi)
Xác định điểm thứ i+1: (xi+1; yi+1)=?
Ta có:
có 0< m 1
Nếu x=1 y1, trong đó x=xi+1-xi; y=yi+1-yi
Như vậy:
45
xi+1= xi+1
yi+1= yi nếu d1 d2
yi+1= yi+1 nếu d1>d2
0
Thuậật toán Breseham
Thu
Xét d1= y(xi+1) - yi
d1=m(xi+1-x1)+y1-yi
=m(xi+1-x1)+y1-yi
=mx
mxi-yi+m
+m(1
(1--x1)+y1
Xét d2= yi+1 - y(xi+1)
= yi+1- m(xi+1-x1)-y1
=-mxi+yi-m(1
m(1--x1)-y1+1
Xét pi=dx(d1-d2)
= dx(2mxi-2yi+2m(1-x1)+2y1-1)
= 2dy.xi-2dx.yi+ 2dy(1-x1)+2dx.y1-dx
Thuậật toán Breseham
Thu
Tương tự ta có
pi+1= 2dy.xi+1-2dx.yi+1+ 2dy(1-x1)+2dx.y1-dx
Xét p=pi+1-pi
=2dy(xi+1-xi) – 2dx(yi+1-yi)
=2dy-2dx(yi+1-yi)
Giả sử pi<0 d1-d2<0 d1
p=2dy=const1
Giả sử pi0 d1-d2 0 d1 d2 yi+1=yi+1
p=2dy
p=2dy--2dx=const2
Thuậật toán Breseham
Thu
Xét p1= 2dy.x1-2dx.y1+ 2dy(1-x1)+2dx.y1-dx
= 2dy.x1-2dx.y1+2dy-2dy.x1+2dx.y1-dx
= 2dy
2dy--dx
dx=const
Thuậật toán Bresenham
Thu
Thuật toán
toán::
Bước 1: Nếu x1>x2 thì: Hoán đổi P1, P2
Bước 2: dx=x2-x1; dy= y2-y1;
const1=2dy; const2=2dy-2dx;
p=2dy-dx; x=x1; y=y1;
Bước 3: Vẽ điểm (x,y)
Bước 4: x=x+1;
Bước 5: Nếu p>0 thì: y=y+1; p=p+const2;
còn lại: p=p+const1;
Bước 6: Nếu x x2 thì: Bước 3;
Bước 7: Kết thúc
Thuậ
Thu
ật toán Breseham
TH4: -1 m <0
Sinh viên tự xây dựng
thuật toán tương tự TH3:
const1=2dy
const2=2dy+2dx;
p1=2dy+dx;
Nếu p>0 thì: p=p+const1;
Còn lại: y=y-1; p=p+const2;
Thuậật toán Breseham
Thu
TH5: m > 1
Đổi vai trò x, y cho nhau
ta có TH3.
TH6: m < -1
x
O
(5)
Đổi vai trò x, y cho nhau
ta có TH4.
y
(6)
Thuậ
Thu
ật toán Midpoint
Xét trường hợp hệ số góc
0
K
yi+1
Thuật toán này đưa ra cách
chọn điểm vẽ tiếp theo là
S(xi+1, yi) hay K(xi+1, yi+1)
bằng cách so sánh với điểm
thực Q(xi+1, y) với điểm M là y
i
trung điểm của S và K.
Nếu Q nằm dưới M thì chọn S
Ngược lại thì chọn K
Q
M
S
xi
xi+1
Thuậ
Thu
ật toán Midpoint
Phương trình dạng tổng quát của đường thẳng:
Ax + By + C = 0
Với A = y2-y1, B = -(x2-x1), C = x2. y1-x1. y2
Đặt F(x,y) = Ax + By + C, ta thấy
F(x,y) < 0 nếu (x,y) nằm phía trên đường thẳng
F(x,y) = 0 nếu (x,y) thuộc về đường thẳng
F(x,y) > 0 nếu (x,y) nằm phía dưới đường thẳng
Việc chọn điểm S hay K dựa vào việc xét dấu của Pi =2F(M) =
2F(xi+1,yi+1/2)
Thuậ
Thu
ật toán Midpoint
Nếu Pi < 0 => M nằm phía
trên đường thẳng => Q nằm
dưới M => Chọn S
K
yi+1
Q
xi
Nếu Pi 0 => M nằm phía
dưới đường thẳng => Q
nằm trên M => Chọn K
K
yi+1
Q
M
S
yi
xi +1
M
S
yi
xi
xi+1
Thuậ
Thu
ật toán Midpoint
Mặt khác Pi
= 2F(xi+1,yi+1/2)
Pi+1 = 2F(xi+1+1,yi+1+1/2)
Nên Pi+1-Pi=2F(xi+1+1,yi+1+1/2) - 2F(xi+1,yi+1/2)
= 2[ A(xi+1+1)+B(yi+1+1/2)+C] –2[A(xi+1)+B(yi+1/2) +C]
= 2A(xi+1-xi) + 2B(yi+1-yi)
= 2A + 2B(yi+1-yi) (vì xi+1-xi = 1)
=> Pi+1 = Pi + 2A +2B(yi+1-yi) = Pi + 2Dy-2Dx(yi+1-yi)
Thuậ
Thu
ật toán Midpoint
Nếu Pi< 0: Chọn điểm S: yi+1 = yi
Pi+1 = Pi + 2A = Pi + 2Dy
Nếu Pi 0: Chọn điểm K: yi+1 = yi+ 1
Pi+1 = Pi +2A + 2B = Pi + 2Dy -2Dx
Với điểm mút đầu tiên ta có
P1=2F(x1+1,y1+1/2)=2A(x1+1)+2B(y1+1/2) +2C
= 2(Ax1+By1+C)+2A+B = 2A+B = 2Dy - Dx
(vì Ax1+By1+C = 0)
Thuậ
Thu
ật toán Midpoint
Thuậ
Thu
ật toán Midpoint
Bước 1: Nhập P1(x1,y1), P2(x2,y2)
Bước 2:Tính A=(y2-y1), B=-(x2 - x1), P=2A+B= 2Dy-Dx, x=x1, y=y1
Bước 3: Vẽ điểm (x,y)
Bước 4: x=x+1;
Bước 5: Nếu x
Nếu P<0 thì P = P+A = P+2Dy;
Ngược lại thì
P=P+2A+2B = 2Dy-2Dx
Quay lại bước 3
Ngược lại thì kết thúc
y=y+1;
2.2. Các thuậ
thuật toán vẽ
vẽ đườ
ường
ng tròn
Xét đường tròn tâm O(0;0),
bán kính r.
Phương trình đại số:
x2+y2=r2
Phương trình lượng giác:
x r cos
Với 0;2
y r sin
Xét đường tròn tâm A(xA; yA),
bán kính r:
(A;r) là ảnh của (O;r) qua phép
tịnh tiến OA
x1 x x A
Ta có:
y1 y y A
y
y
M
r
x
O
x
y
yA
M1(x1;y1)
M(x;y)
A
O
xA
x