1. Trang chủ
  2. » Công Nghệ Thông Tin

ĐỒ HỌA MÁY TÍNH - XÉN HÌNH, TÔ MÀU potx

13 1,4K 12

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 13
Dung lượng 1,02 MB

Nội dung

Xén đoạn thẳng vào hình chữ nhật Cohen–Sutherland, Thuật toán Chia nhị phân, Liang–Barsky 2.. Xén đoạn thẳng vào hình tròn 3.. Xén đường tròn vào hình chữ nhật 4.. Xén đa giác vào hình c

Trang 1

Trương Văn Quốc Nhật

1

CH 2 XÉN HÌNH, TÔ MÀU

Nội dung

2

Xén hình

1. Xén đoạn thẳng vào hình chữ nhật

Cohen–Sutherland, Thuật toán Chia nhị phân, Liang–Barsky

2. Xén đoạn thẳng vào hình tròn

3. Xén đường tròn vào hình chữ nhật

4. Xén đa giác vào hình chữ nhật

5. Xén đa giác vào đa giác

Tô màu

1. Thuật toán Loang

2. Thuật toán Dòng quét (Scan-line)

Bài tập

Trang 2

Xén (clipping)

3

1 Xén đoạn thẳng vào hình chữ nhật

4

1

2

4

3

5

6

• Thuật toán Chia nhị phân

• Cohen–Sutherland

• Liang–Barsky

Trang 3

Thuật toán Cohen–Sutherland

5

1

2

4

3

5

6

B

A

AB F Clip D

D

F Clip D

• A & B = 0000 và A | B ≠ 0000 : Xét A (giả sử A nằm ngoài) :

 Thay A bởi giao của AB với cạnh trái nối dài

 Thay A bởi giao của AB với cạnh phải nối dài

 Thay A bởi giao của AB với cạnh dưới nối dài

 Thay A bởi giao của AB với cạnh trên nối dài

Bit: 3 2 1 0

Thuật toán Chia nhị phân

6

2

4

3

6

D

1

5

Bit: 3 2 1 0

Trang 4

Thuật toán Liang-Barsky

7

D

A B A

A B A

y y t y y

x x t x x

Ptrình tham số:

Thứ tự cắt:

tráiphảitrêndưới

1

3 2

4

1

3

2 1

1 2

Cohen- : Cập nhật y

Liang- : Cập nhật t

A

x

x

p1 x

p2

y

p3 y

p4

m in 1

,q x A x

A

x x

q2 m ax

,

m in 3

A

y y

q4 m ax

,

1 0

4 , 1 ,

t

k q t

p k k

1 0

m ax

m in

m ax

m in

t

y y y t y y

x x x t x x

A B A

A B A

Đặt:

CÝ:

0

k

p

0

k

p

0

k

p : AB // 1 cạnh

: ngoài  trong

(trái) (phải) (dưới) (trên)

: trong  ngoài

Kiểm tra…

8

D

A

x

x

p1 x

p2

y

p3 y

p4

m in 1

,q x A x

A

x x

q2 m ax

,

m in 3

A

y y

q4 m ax

,

0

k

p

0

k

p

0

k

p : AB // 1 cạnh

: ngoài  trong

(trái) (phải) (dưới) (trên) : trong  ngoài

xm

ymax

xm

ymin

Cạnh trái

Cạnh phải

Cạnh dưới

Cạnh trên

B

x

p1

A

x

p2

B

y

p3

A

y

p4

Trang 5

Thuật toán Liang-Barsky

t 0 =0; dx=x B -x A ;

t 1 =1; dy=y B -y B ;

for (canh=14) { //duyệt lần lượt các cạnh

//0.tính p,q,r

//1.cạnh song song  ko vẽ //2 ngoài  trong

// nằm ngoài ko vẽ

// xén được 1 tí

//3 trong  ngoài

// nằm ngoài ko vẽ

// xén được 1 tí

switch (canh) {

1: p=-dx; q=x A -x min ;

2: p=dx; q=x A -x min ;

3: p=-dy; q=x A -x min ;

4: p=dy; q=x A -x min ;

}

r=q/p;

}

if (p<0){

} else if (p>0) {

}

x 0 =x A +t 0 *dx; y 0 =y A +t 0 *dy;

x 1 =x A +t 1 *dx; y 1 =y A +t 1 *dy;

return đoạn:(x0,y0)(x1,y1);

if (p=0 && q<0) return ;

if (r>t 1 ) return ;

if (r>t 0 ) t 0 =r;

if (r<t 0 ) return ;

if (r>t 1 ) t 1 =r;

Xén đoạn thẳng vào HCN xiên

12

α

α

xoay -α

cắt

xoay α

Trang 6

Xén đa giác vào hình chữ nhật

13

Ý tưởng Sutherland-Hodgeman

14

trên

dướ i

Trang 7

Cắt dọc theo cạnh trên

15

1

4 5

6 7

8 9

10

A=10;

} else {

}

}

d

A=B;

D

A

1

B

C

4

5

6

7

8

9

D

U

U 1

Un

Thuật toán Sutherland-Hodgeman

17

VU;

A=V n ;

for (B = V 1 V n )

}

if (B trong) {

} else {

}

if (A ngoài) ném (AB∩cạnh);

ném (B);

if (A trong) ném (AB∩cạnh);

A=B;

for (cạnh = trênphảidướitrái) {

}

U = danh_sách_đỉnh_đa_giác ;

//cý: sau mỗi lần cắt, n có thể thay đổi

//lúc này: V đầy, U rỗng

V U

V1

V n

Trang 8

Cắt đôi?

18

1 2

6

5

Cắt thành 2 cái luôn à?

Xén đa giác vào đa giác

19

Trang 9

Ui chao, dễ òm!

Xác định “trong”, “ngoài”?

20

A

(2,3)

B(7,9)

1

n

2

n

A B A B

A B A B

x x y y n

x x y y n

,

, 2

1

P (5,3) α

cos

n AP n AP

-0

A B A

y x n AP

AP

y x

AP , Giả sử:

: 0 cos

: 0 cos

: 0 cos

trong ngoài trên ngoài

trong

trên

Xác định mã

21

D

Bit: 3 2 1 0

x m

ymax

xm

ymin

P = 0;

if (xP < x min) P = P|1; // trái

P

if (xP > x max) P = P|2; //phải

if (yP < y min) P = P|4; //dưới

if (yP > y max) P = P|8; //trên

xP

yP xmin xmax

ymin ymax

P Tính mã

Trang 10

Nội dung

22

Xén hình

1. Xén đoạn thẳng vào hình chữ nhật

Cohen–Sutherland, Thuật toán Chia nhị phân, Liang–Barsky

2. Xén đoạn thẳng vào hình tròn

3. Xén đường tròn vào hình chữ nhật

4. Xén đa giác vào hình chữ nhật

5. Xén đa giác vào đa giác

Tô màu

1. Thuật toán Scanline

2. Thuật toán Loang

Bài tập

Thuật toán Loang – Ý tưởng

23

5 1 3 9

12 4 10 19

22 11 20 33

36 21 34

39 25 13

38 24 37

26

28 14 27

16 6 15 29

8 2 7 17 41

40 23

18 31 32 30

35

x x 42

• Đệ quy

• Khử đệ quy

4 p 2 3 1

Trang 11

Thuật toán Loang – Đệ quy

24

{

if [(x,y) S && ChưaTô(x,y)]

{

Tô(x,y);

Loang(x,y-1,mau);

Loang(x+1,y,mau);

Loang(x,y+1,mau);

Loang(x-1,y,mau);

10 1 14

11 12 13

5

7 4 17

8 3 16

9 2 15

x x 6

x

x

y

3 4 5 6 7 8 9 0

Loang(6,8)

Gọi:

Loang(6,7)

Loang(7,8) Loang(7,9) Loang(5,8)

Loang(6,6)

Loang(7,7) Loang(6,8) Loang(5,7)

Loang(6,5)

Loang(7,6) Loang(6,7) Loang(5,6)

Loang(6,4)

Loang(7,5) Loang(6,6) Loang(5,5)

Loang(6,3) Loang(7,4) Loang(6,5)

Loang(5,4)

Loang(5,3) Loang(6,4)

Loang(5,5)

Loang(4,4)

if [v S && ChưaTô(v)]

{

Thuật toán Loang – Khử đệ quy

25

Tô(x 0 ,y 0 ); Q = {(x 0 ,y 0 )};

while (Q ≠ Ф)

{

Pop(p); //lấy p từ Q

for ( v = Kề(p))

}

Tô(v);

Push(v); //đưa v vào Q

}

5 1 3 9

12 4 10 20

23 11 21 x

x 22 x

x 25 13

x 24 x

x

x 14 x

16 6 15 x

8 2 7 17

x

x 18

19 x x x

x

x

y

1 2 3

3 4 5 6 7 8 9

0

2 1

(4,5)

(4,4) (5,5) (4,6) (3,5)

(4,3) (5,4) (3,4)

(6,5) (5,6)

(4,7) (3,6)

(2,5)

(4,2) (5,3) (3,3)

(6,4)

(2,4)

(7,5) (6,6)

(5,7)

(4,8) (3,7)

(2,6)

(1,5)

Trang 12

Thuật toán Loang – Khử đệ quy

26

if [v S && ChưaTô(v)]

{

Tô(x 0 ,y 0 );

Q = {(x 0 ,y 0 )};

while (Q ≠ Ф)

{

Pop(p); //lấy p từ Q

for ( v Kề(p))

}

Tô(v);

Push(v); //đưa v vào Q

}

if [(v x ,v y ) S && ChưaTô(v x ,v y )]

{

Tô(x 0 ,y 0 ); dau=cuoi=0;

Q x [0] =x 0 ; Q y [0] = y 0 ;

while (dau ≤ cuoi) {

P x =Q x [dau];

P y =Q y [dau]; dau++; //lấy p từ Q

for ( (v x ,v y ) Kề(p x ,p y ))

}

Tô(v x ,v y );

cuoi++;

Q x [cuoi]=v x ;

Q y [cuoi]=v y ; //đưa v vào Q }

27

Trang 13

Thuật toán Dòng quét (Scan-line)

28

x 1

x 1

x 1

x 2

x 2 x 3

x 4

x 2 x 3

x1,x2,x3,x4,x5,x6 (x1,x2), (x3,x4 ), ( x5,x6)

xi xi+1

x 2

x 1

-Dòng quét cắt đứt 2 cạnh liên tiếp  bỏ x i+1

- Dòng quét xẹt qua 2 cạnh liên tiếp  giữ xi+1

Bài tập

29

Xây dựng (nếu có) & Cài đặt các thuật toán :

 Xén đoạn thẳng vào hình chữ nhật (Cohen–Sutherland,

Liang-Barsky)

 Xén đa giác vào hình chữ nhật (Sutherland-Hodgeman)

 Tô màu Loang (đệ quy, khử đệ quy)

Mỗi thuật toán vẽ là 1 phương thức, gộp vào 1 file mã nguồn

(đuôi là cs)

Xây dựng (nếu có) & Cài đặt các thuật toán:

 Xén đoạn thẳng vào HCN xiên

 Xén đa giác vào đa giác (Sutherland-Hodgeman)

 Tô màu dòng quét

Ngày đăng: 02/08/2014, 05:20

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w