Bài Giảng về thuật toán vẽ các đường thẳng, đường tròn, elip.. Đem đến kiến thức dễ tiếp cận nhất để sinh viên tiếp thu hiệu quả. Nhờ đó mà phát huy được năng lực của sinh viên cũng như mong muốn của nhà trường đặt ra.
Trang 1Chương 2
Các thu
Các thuậật toán đ t toán đồồ ho hoạạ ccơơ ssởở
Trang 2Nộội dung 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
Trang 32.1 Các thu
2.1 Các thuậật toán v t toán vẽẽ đo đoạạn th n thẳẳng 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 làm tròn số
Thuật toán Bresenham
Thuật toán Midpoint
Trang 41
x x
1
2
x x
y
y m
x x1 y1m
Trang 5Thuậật toán làm tròn s t toán làm tròn sốố
Chia thành 4 trường hợp:
TH1: P1P2 song song với Oy
TH2: P1P2 song song với Ox
Trang 9Thuậật toán làm tròn s t toán làm tròn sốố
TH4 TH4: |m| > 1 tương tự TH3
khi đổi vai trò x, y.
Bước 1: Nếu y1 > y2 thì: Hoán
Trang 11Thuậật toán Breseham t toán Breseham
TH3 TH3: 0 < m 0 < m 11
x O(0,0)
d1d
Trang 12Thuậật toán Breseham t toán Breseham
Cơ sở toán học xây dựng thuật toán:
Trang 15Thuậật toán Breseham t toán Breseham
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
Trang 16Thuậật toán Bresenham t toán Bresenham
Thuật Thuật toán toán::
Bước 1: Nếu x1>x2 thì: Hoán đổi P1, P2
Trang 17Thuậật toán Breseham t toán Breseham
TH4: TH4: 1 1 m <0 m <0
Sinh viên tự xây dựng
thuật toán tương tự TH3:
Trang 19Thuậậtt toán toán Midpoint Midpoint
Xét trường hợp hệ số góc
0<m<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
K Q
Trang 20Thuậậtt toán toán Midpoint 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)
Trang 21xi
yi
Trang 22Thuậậtt toán toán Midpoint 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+1i+1+1)+B(yi+1i+1+1/2)+C] –2[A(xii+1)+B(yii+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)
Trang 23Thuậậtt toán toán Midpoint 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+1i+1 = Pii +2A + 2B = Pii + 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)
Trang 24Thuậậtt toán toán Midpoint Midpoint
Thu
Thuậậtt toántoán MidpointMidpoint
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<x2 thì
Nếu P<0 thì P = P+A = P+2Dy;
Ngược lại thì
P=P+2A+2B = 2Dy-2Dx y=y+1;
Quay lại bước 3Ngược lại thì kết thúc
Trang 252.2 Các thu
2.2 Các thuậật toán v t toán vẽẽ đ đườ ường tròn
Xét đường tròn tâm O(0;0),
y
x x
M1(x1;y1)
xA
yA
Trang 272.2 Các thu
2.2 Các thuậật toán v t toán vẽẽ đ đườ ường tròn
Bài Bài toán toán::
Input: Cho tâm O(0,0), bán kính r
Output: Vẽ đường tròn tâm O, bán kính r.
Giải Giải quyết quyết bài bài toán toán::
Thuật toán làm tròn số
Thuật toán Bresenham
Thuật toán Midpoint
Trang 28Thuậật toán làm tròn s t toán làm tròn sốố
Theo phương trình đại số:
Cung AB:
Xét trên cung AB: nếu x=1 thì
|y|1 nên lấy cơ sở theo x
Thuật toán:
B
O y
M1(x,y), M2(y;x),M3(y;-x), M4(x;-y),
M5(-x;-y), M6(-y;-x), M7(-y;x), M8(-x;y)
Trang 29Thuậật toán làm tròn s t toán làm tròn sốố
Theo phương trình lượng giác Theo phương trình lượng giác:
Bước 1: alpha=0; step=1/r;
Bước 3: alpha=alpha+step;
x=r.cos(alpha); y=r.sin(alpha);
Bước 4: Nếu x>=y: Bước 2;
Bước 5: Kết thúc
Trang 30Thuậậtt toán toán Bresenham Bresenham
Phương trình đường tròn có tọa độ tâm O(x0,y0) bán kính R là: (x-x0)2 + (y-y0)2 = R2 hay
Để đơn giản ta xét đường tròn có tâm là gốc tọa độ O(0,0).
2 0
2
0 R ( x x ) y
Do tính đối xứng của hình tròn nên khi vẽ hình tròn
ta chỉ tính các điểm cần vẽ trên cung 1/8 đường tròn rồi lấy đối xứng để vẽ thêm được 7 điểm đối xứng nữa.
Trang 31Thuậậtt toán toán Bresenham Bresenham
(y,x)0
(-y,-x)
Trang 32Thuậậtt toán toán Bresenham Bresenham
Giả sử (xi,yi) đã vẽ được, ta cần chọn điểm kế tiếp là(xi+1,yi) hoặc (xi+1,yi-1) tùy thuộc vào điểm nào gầntọa thực (x,y) hơn
yi
yiy
yi - 1
xi xi + 1
Trang 34Thuậậtt toán toán Bresenham Bresenham
Vậy Pi+1– Pi= 4xi + 6 +2(yi+12 - yi2) – 2(yi+1 – yi)
=> Pi+1– Pi = 4xi + 6 +2(yi+12 - yi2) – 2(yi+1– yi)
Ta thấy:
Nếu Pi < 0 thì d1<d2: chọn yi+1= yi
=> P = P + 4x + 6
=> Pi+1 = Pi+ 4xi + 6 Nếu Pi ≥ 0 thì d1 ≥ d2: chọn yi+1 = yi – 1
=> Pi+1 = Pi+ 4(xi – yi) +10 Chọn điểm đầu tiên cần vẽ là (0, R), ta có P1 = 3-2R
Trang 35Thuậậtt toán toán Bresenham Bresenham
Bước 1: Chọn điểm cần vẽ (x,y) = (0,R)
Trang 36F(x,y)>0 nếu (x,y) nằm ngoài đường tròn
Khi đó việc chọn điểm vẽ tiếp theo là S(xi+1,yi) hay K(xi+1,yi-1) được đưa về việc xét dấu của:
Pi=F(M)=F(xi+1,yi-1/2)
Trang 37 Nếu Pi<0 => M nằm trong đường tròn => Q gần
Trang 38Thuậậtt toán toán Midpoint Midpoint
Nếu Pi0 => M nằm ngoài đường tròn => Q gần K hơn => chọn K
Trang 40Thuậậtt toán toán Midpoint Midpoint
=>Pi+1-Pi= [(xi+2)2+(yi+1-1/2)2-R2] –
Trang 41Thuậậtt toán toán Midpoint Midpoint
Trang 42Thuậậtt toán toán Midpoint Midpoint
Bước 1:Tính P=5/4-R (1-R), x=0, y=R
Bước 2: Vẽ điểm (x,y) //Vẽ 8 điểm
Bước 4: Nếu x<=y thì
Nếu P<0 thì P = P+2x+3;Ngược lại thì:
y=y-1; P=P+2(x-y)+5;x=x+1;
Quay lại bước 2Ngược lại thì kết thúc
Trang 432.3
2.3 Các Các thu thuậậtt toán toán v vẽẽ elip elip
Để đơn giản, ta chọn elipse có tâm là gốc tọa
độ Phương trình của nó có dạng:
1
2
2 2
2
b
y a
Trang 44Các thu thuậậtt toán toán v vẽẽ elip elip
Ý tưởng:
xuống và một nhánh từ dưới lên, 2 nhánh gặp nhau tại điểm mà tiếp tuyến với elipse tại điểm đó
có hệ số góc = -1.
Phương trình tiếp tuyến với elipse tại (xT,yT)
=> Hệ số góc của tiếp tuyến là:
b x
T T
Trang 45Thuậậtt toán toán Bresenham Bresenham
Xét trường hợp vẽ nhánh từ trên xuống
Giả sử điểm (xi , yi ) đã được vẽ.
Điểm tiếp theo cần chọn là (xi +1, yi) hoặc (xi +1,
yi -1)
Thay xii +1 vào (*) ta được:
2 2
Trang 472
) 1 (
) 1
2 2
2
2 2
) 1
( 2 )
) 1 (
Trang 48( 2 )
) 1 (
(
1 2
P[i+1] - P[i] =
) ) 1 (
) 1 ((
1 2
) (
2 yi 12 yi2 yi 1 yi
Trang 494 )
3 (
2
1 b
a b P
Trang 50Thuậậtt toán toán Bresenham Bresenham
Bước 1: Nhập O(x0,y0), a,b
Bước 2: Tính a2=a*a; b2=b*b ; P=2*b2/a2-2*b+1;
Bước 3: Đặt x=0; y=b;
Bước 4: Vẽ điểm (x,y)
Bước 5: x=x+1
Nếu P<0 thìP=P+2*b2/a2*(2*x+3);
Ngược lại thì
y=y-1; P=P+2*b2/a2*(2*x+3)-4*y;
Bước 6: Nếu (b2/a2)*(x/y)<1 thì quay lại bước 4
Ngược lại thì Kết thúc
Trang 51
b
y a
x
1
2
2 2
2
b
y a
x
Ta thấy:
F(x,y)<0 nếu (x,y) nằm trong ellipse F(x,y)=0 nếu (x,y) thuộc đường ellipse F(x,y)>0 nếu (x,y) nằm ngoài ellipse
Trang 52Thuậậtt toán toán Midpoint Midpoint
Giả sử đã vẽ được điểm (xi , yi)
Khi đó việc chọn điểm vẽ tiếp theo là S(xi+1,yi) hay K(xi+1,yi-1) được đưa về việc xét dấu của: Đặt Pi = a2b2F(M)=a2b2F(xi+1,yi-1/2)
P = a2b2F(x +1,(y -1/2)
Pi+1 = a2b2F(xi+1+1,(yi+1-1/2)
Trang 53Thuậậtt toán toán Midpoint Midpoint
Nếu Pi<0 => M nằm trong ellipse => Q gần S hơn => chọn S
S
Q
yiy
Trang 54Thuậậtt toán toán Midpoint Midpoint
Nếu Pi 0 => M nằm ngoài ellipse => Q gần K hơn => chọn K
Trang 551 (
) 1
(
2 1
2 2
b
y a
x b
1 (
) 1
(
2 2
2
b
y a
x b
Trang 56) (
)
(
2 2
1 2
2
b
y y
y
y b
a i
1
2 2
P Hay
Trang 572 2
Trang 58Thuậậtt toán toán Midpoint Midpoint
Quay lại bước 3
Ngược lại thì kết thúc
Trang 60KOD(P1) and KOD(P2)<>0000:
P1P2 nằm hoàn toàn ngoài cửa sổ
1010 1000
1001
ymax
Trang 61 Xác định Pnew(xnew;ynew)=?:
Nếu b1=1: Pnew= P1P2 (x=xmin)
1 2
min
y x x
x x
y y y
x x
new new
max 1
2
1 2
max
y x
x x x
y y
y
x x
new new
Trang 62Thuậật toán Cohen t toán Cohen Surtheland Surtheland
Nếu b3=1: Pnew= P1P2 (y=ymin)
Nếu b4=1: A1= P1P2 (y=ymax)
min 1
2
1 2
min
x y
y y y
x x x
y y
new new
Gán P1=Pnew ta được đoạn P1 P2 mới.
max 1
2
1 2
max
x y
y y y
x x
x
y y
new new
Trang 63Thuậật toán Cohen t toán Cohen Surtheland Surtheland
Thuật Thuật toán toán::
Bước 1: Tính KOD(P1),KOD(P2)
Bước 2: Nếu KOD(P1)=KOD(P2)
x x
max 1
2
1 2
x x
y x
x x x
y y
y
new new
min 1
2
1 2
x x
y x
x x x
y y
y
new new
Nếu b4=1:P1=Pnew=P1P2 (y=y2)
min 1
2
y y
y y
new new
max 1
2
1 2
y y
x y
y y y
x x x
new new
Trang 64Thuậật toán Liang t toán Liang Basky Basky
Phương trình đoạn AB dạng tham số:
Điểm M(x, y) thuộc cửa sổ
; 0 [
y y
dy tdy
y y
x x
dx tdx
x x
A B
A
A B
2 1
x
y y
y
x x
2 1
2 1
t
y tdy
y y
x tdx
x x
A A
(1)
Trang 652 1 2 1
t
yy
tdy
yy
tdy
xx
tdx
xx
tdx
A A A A
4
;
1 )
2
(
t
i q
}4
;1,
0
|{
}4
;1,
0
|{
iL
ip
iK
i i
4
1 3
3
2 2
2
1 1
1
y y
q dy
p
y y
q dy
p
x x
q dx
p
x x
q dx
p
A A A A
/
/)
3
(
t
Li
pq
t
Ki
pq
t
i i
i i
(4)
Trang 66q t
K
i p
q t
i i i i
0 max
1 min
1 min
q t
K i p t
i i i
1
2 t t
Trang 671 3
3
2 2
2
1 1
dy p
y y q dy
p
x x q
dx p
x x q dx
p
y y dy x
x dx
A A A A
A B A
dx t x
x B
dy t y y
dx t x
x A
A B
A A
A A
2 1
1
1 1
1 1 1
; 0
;
1
2 4
1 1
; max
, min
t p
q t
t p
q t
i i i i
Trang 682.5 Các thu
2.5 Các thuậật toán tô màu t toán tô màu
Thuật toán vết dầu loang
Thuật toán tô màu theo đường biên
Thuật toán tô màu theo dòng quét.
Trang 69Thuậật toán v t toán vếết d t dầầu loang u loang
Bài toán:
Input:
Miền khép kín xác định bởi mầu biên: mb
Một điểm M(x; y) thuộc miền cần tô
Mầu tô: mt
Mầu tô: mt
Output: Tô màu miền khép kín trên bằng mầu tô.
Trang 71}
Trang 72Thuậật toán tô màu theo đ t toán tô màu theo đườ ường biên
Bài toán Bài toán: giống thuật toán vết dầu loang
Input:
Miền khép kín xác định bởi mầu biên: mb
Một điểm M(x; y) thuộc miền cần tô
Mầu tô: mt
Output: Output: Tô màu miền khép kín trên bằng mầu tô.
Trang 74Thuậậtt toán toán tô tô màu màu theo theo đ đườ ường
biên
trong đa giác từ Xmin, đến Xmax
dòng về phía trái P, 1 dòng về phía phải P gặp cạnh đa giác thì dừng lại
Trang 75Thuậật toán tô màu theo đ t toán tô màu theo đườ ường biên
Thuật toán: (áp dụng với i={1, -1})
Bước 1: Tìm biên trái nhất và biên phải nhất
x1=x; x2=x;
while (màu(x1-1,y)!=mb) x1=x1-1;
while (màu(x2+1,y)!=mb) x2=x2+1;
Bước 2: Vẽ đoạn (x1,y) và (x2,y) bằng màu tô (mt)
Bước 2: Vẽ đoạn (x1,y) và (x2,y) bằng màu tô (mt)
Bước 3: Tính điểm phát triển tiếp theo:
Trang 76Thuậật toán tô màu theo dòng quét t toán tô màu theo dòng quét
Tô màu hình thang cơ bản
Tô màu n giác
Trang 77Thuậật toán tô màu theo dòng quét t toán tô màu theo dòng quét
Tô màu hình thang cơ bản:
Định nghĩa hình thang cơ bản: là hình thang có đáy song
song với một trục toạ độ
y y y
xA xD
1
xB y
y y y
xB xC
Trang 78Thuậật toán tô màu theo dòng quét t toán tô màu theo dòng quét
Tô màu hình thang cơ bản:
Áp dụng: Tô màu đa giác A1A2 A9
Gọi thủ tục tô màu hình
thang cơ bản cho các hình
Trang 79Thuậật toán tô màu theo dòng quét t toán tô màu theo dòng quét
Tô màu n giác tổng quát:
Cho màu tô (mt)
Output: Tô màu n giác
A6
A7 A8
Trang 80Thuậật toán tô màu theo dòng quét t toán tô màu theo dòng quét
Tô màu n giác tổng quát:
Bước 4: Nối các giao điểm M2i+1 và M2i+2 bằng mt
với i={0,1, ,k-1}
Bước 5: y=y+1
Bước 6: Nếu y ymax: Bước 3;
Bước 7: Kết thúc
Trang 81Thuậật toán tô màu theo dòng quét t toán tô màu theo dòng quét
Tô màu n giác tổng quát:
Cài đặt: tham khảo tài liệu