Tải bản đầy đủ (.pdf) (81 trang)

Bài giảng: Môn Đồ Họa Máy Tính 2017

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (630.65 KB, 81 trang )

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 (P1P2 ):

y2  y1
y
( x  x1 )  y1
x2  x1



y2  y1
Đặt m 
x2  x1




Khi đó phương trình đường thẳng P1P2 :

y  mx  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 y1, 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ử pi0  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 xNế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


×