Tải bản đầy đủ (.docx) (126 trang)

giáo trình đồ họa máy tính

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 (3.07 MB, 126 trang )

TRƯ

NG

Đ

I

H

C

ĐÀ

L

T
KHOA

CÔNG

NGH
THÔNG

TIN
ThS.


PHƯƠNG

BÌNH


GIÁO

TRÌNH
Đ
H

A

MÁY

TÍNH
Dành

cho

sinh

viên
ngành:
Công

ngh
ph

n

m

m,
M


ng



truy

n
thông
Đà L

t,
2010
M

CL

C
M U
4
Chương 1 GI

I THI

U V H

A MÁY TÍNH
5
1.1


T

ng quan h

a máy tính
5
1.2

Các thành ph

n cơ b

n c

a h h

a máy tính
7
1.3 H

t

a th

gi

i th

c, h


t

a thi

t b

và h

t

a chu

n 7
Chương 2 CÁC THU

T TOÁN V I TƯ

NG H

A CƠ B

N
11
2.1 Thu

t toán v o

n th

n

g 11
2.1.1 Thu

t toán DDA (Digital DifferentialAnalyzer) 12
2.1.3 Thu

t toán MidPoint 17
2.2 Thu

t toán MidPoint v ư

ng tròn
23
2.3 Thu

t toán MidPoint v

Ellipse

27
2.4. ư

ng cong tham s


31
2.4.1. ư

ng cong Bezier
31

2.4.1.1. Thu

t toán de Casteljau 31
2.4.1.2. Thu

t toán Horner 34
2.4.2. ư

ng cong B-Spline
37
Bài t

p chương 2

42
Chương 3 TÔ MÀU

44
3.1

Gi

i thi

u v

màu s

c


44
3.2

Tô màu

ơn gi

n

44
3.3

Tô màu theo dòng quét (ScanConvert)

48
3.4

Tô màu theo v

t d

u loang (FloodFill)

52
Bài t

p chương 3

54
Chương 4 PHÉP BI


N I HAI CHI

U 55
4.1 Nh

c l

i các phép toán cơ s

v

i ma ma tr

n.
.
55
4.2 Phép t nh ti

n

56
4.3 Phép bi

n i t

l


57

4.4

Phép quay

57
4.5

Phép i x

ng
60
4.6 Phép bi

n d

ng

60
Giáo

trình H

a

Máy

Tính
2
4.7


Phép bi

n i Affine ngư

c 61
4.8 H

t

a thu

n nh

t 62
4.9 K

t h

p các phép bi

n
i 63
Bài t

p chương 4

64
Chương 5 GIAO CÁC I TƯ

NG H


A 66
5.1. M u
66
5.2. Giao c

a hai

o

n th

ng

67
5.3.

o

n th

ng và hình ch

nh

t

68
5.3.1 Tìm giao b


ng cách gi

i h

phương trình 69
5.3.2 Thu

t toán chia nh

phân 69
5.3.3 Thu

t toán Cohen-Sutherland 72
5.3.4 Thu

t toán Liang-Barsky 74
5.4. Giao c

a

o

n th

ng và

a giác l

i


77
5.5. Giao hai

a giác

80
5.6. K

thu

t Ray tracing

85
Chương 6 H

A BA CHI

U 91
6.1. Gi

i thi

u h

a 3 chi

u
91
6.2. Bi


u di

n i tư

ng 3 chi

u 92
6.3. Các phép bi

n i 3 chi

u
98
6.3.1. H

t

a bàn tay ph

i - bàn tay trái 98
6.3.2. Các phép bi

n i Affine cơ s

99
6.3.2.1 Phép quay quanh tr

c
x
99

6.3.2.2 Phép quay quanh tr

c
y
100
6.3.2.3

Phép quay quanh tr

c z 100
6.3.2.4

Phép quay quanh tr

c song song v

i tr

c t

a 101
6.3.2.5

Phép quay quanh tr

c b

t kỳ 103
PH L


C: THƯ VI

N H

A OpenGL
.107
TÀI LI

U THAM KH

O

120
Giáo

trình H

a

Máy

Tính
3
M U
h

a máy tính là m

t trong nh


ng lĩnh v

c h

p d

n và phát tri

n nhanh c

a
Công ngh

Thông tin. Nó

ư

c ra i b

i s

k

t h

p c

a 2 lĩnh v

c thông tin và truy


n
hình,



ư

c

s d

ng

r

ng

rãi

trong

h

u

h

t


các ng

d

ng

như

khoa

h

c



công
ngh

,

y h

c,

giáo

d

c,


ki

n

trúc,



k

c

gi

i

trí. Ngày

nay,

nh

vào

s

ti

n


b

c

a
khoa

h

c k

thu

t

nên ph

n

c

ng

và giá

thành

c


a

máy

tính

càng lúc

càng

phù h

p,
các k

thu

t h

a

ư

c

ng d

ng trong th

c t


nhi

u nên ngày càng có nhi

u ngư

i
quan tâm nghiên c

u n lĩnh v

c này.
Tuy nhiên, vi

c d

y và h

c k

thu

t h

a mày tính thì không

ơn gi

n vì ch

này có nhi

u v

n ph

c t

p, liên quan n tin h

c và c

toán h

c. H

u h

t các gi

i
thu

t

v

,




màu

cùng

các

phép

bi

n

hình u

ư

c

xây

d

ng

d

a trên

n


n

t

ng

c

a
hình h

c không gian hai chi

u và ba chi

u.
Giáo trình h

a máy tính này

ư

c xây d

ng d

a trên kinh nghi

m gi


ng d

y
ã

qua



d

a

trên

tài

li

u

tham

kh

o

chính




:

“Donald

Hearn,

M.

Pauline

Baker
;
Computer

Graphics
; Prentice-Hall, Inc., Englewood Cliffs, New Jersey , 1986”.
Giáo

trình h

a

máy

tính




m

t

môn

h

c ư

c

gi

ng

d

y

cho

sinh

viên
chuyên ngành Công ngh

Thông tin v

i 45 ti


t lý thuy

t và 30 ti

t th

c t

p. N

i dung
c

a giáo trình này g

m có 3 v

n chính như sau :

Trình

bày

các

thu

t


toán

v





các

ư

ng



b

n

như

ư

ng

th

ng,


a
giác,

ư

ng tròn, ellipse và các

ư

ng Bezier, B-Spline. Các thu

t toán này
giúp cho sinh viên có th

t

thi

t k v

và tô màu m

t mô hình h

a.

N

i


dung

th hai c

p n

các

phép

bi

n i

Affine,

tìm

giao

các i


ng, tô màu c

a h

a hai chi

u.


N

i dung th

ba trình bày v

quan sát, hi

n th

và bi

n i Affine trên không
gian ba chi

u.
Trong

quá

trình

biên

so

n

ch


c

không

tránh

kh

i

thi

u

sót,

tôi

xin

trân

tr

ng
nh

n


ư

c

s

góp

ý

c

a

các

quý ng

nghi

p



sinh

viên giáo

trình


ngày

càng
ư

c hoàn thi

n hơn.
Giáo

trình H

a

Máy

Tính
4
Ch
ươ
ng

1
GI

I

THI

U


V H

A

MÁY

TÍNH
N

i

dung

chính
T

ng quan v h

a máy tính.
Các

ng d

ng c

a h

a máy tính.
Các thành ph


n cơ b

n c

a h h

a máy tính.
H

t

a th

c và h

t

a h

a.
1.1

T

ng

quan h

a


máy

tính
h

a máy tính bao g

m t

t c

nh

ng gì liên quan n vi

c s

d

ng máy tính
phát sinh ra hình

nh. Các v

n liên quan n công vi

c này bao g

m: t


o, lưu tr

,
thao tác trên các mô hình và các

nh.
Ngày

nay,

h

u h

t

các chương

trình

so

n

th

o,

b


ng

tính s

d

ng h

a trong
giao

di

n

v

i

ngư

i dùng.

S

phát tri

n


c

a h

a

máy

tính

ngày

càng r

ng rãi v

i
các ch h

a hai chi

u (2D) và 3 chi

u (3D), và cao hơn, nó ph

c v

trong các
lĩnh v


c xã h

i h

c khác nhau như khoa h

c, giáo d

c, y h

c, k

thu

t, thương m

i và
gi

i trí. Tính h

p d

n và

a d

ng c

a h


a máy tính có th ư

c minh h

a r

t tr

c
quan thông qua vi

c kh

o sát các

ng d

ng c

a nó.
h

a máy tính

ư

c s

d


ng r

t r

ng rãi vì có n 80% các

ng d

ng liên quan
n

hình

nh



ư

c ng

d

ng

trong

nhi


u

lĩnh

v

c

khác

nhau

như

công

nghi

p,
thương m

i, qu

n lý, giáo d

c, gi

i trí, …v.v. S




ng các chương trình h

a

ng
d

ng r

t l

n

và phát tri

n

liên

t

c. Sau

ây

là m

t s ng d


ng tiêu bi

u

c

a h

a
trong th

c t

:

H
tr
thi

t

k
-

CAD/CAM

(Computer-Aided

Design/


Computer-Aided
Manufacturing)
: Các h

th

ng thi

t k

và ch

t

o v

i s

tr

giúp c

a máy tính
ư

c

ng

d


ng

trong

các

lĩnh

v

c

như

phân

tích

thi

t

k

k

t

c


u

xây

d

ng,
công nghi

p

i

n t

, công nghi

p th

i trang, các ngành công nghi

p

ch

t

o
ôtô, máy bay, xe máy

Giáo

trình H

a

Máy

Tính
5

th



b

n
(Graphs

and

Charts)
: ây là

ng d

ng ch

y


u trong lĩnh v

c
h

a minh h

a,

ng d

ng này cho phép hi

n th

các bi

u d li

u

cũng
như trong lĩnh v

c bi

u di

n và x


lý h

a. M

t trong s

nh

ng

ng d

ng
hi

n nay là h

th

ng thông tin a lí GIS (Geographical Information System).:


Gi

i

trí:
V


i s

h

tr h

a hi

n nay chúng ta có th

s

n xu

t nhi

u s

n ph

m
ph

c v

cho lĩnh v

c gi

i trí c bi


t là phim ho

t hình

và các trò chơi trên
máy tính. Nhi

u ph

n m

m và ngôn ng

l

p trình h

tr

ra i cho phép ta t

o
ra các hình

nh ng g

n v

i v


i cu

c s

ng th

c. Trong giáo trình này chúng
ta s

làm quen v

i công c

OpenGL.


ng

d

ng



ph

ng




th

c

t

i

o
(Simulation

and

Virtual

Reality)
:

Bên c

nh
vi

c h

tr

thi


t k

ki

n trúc và trong s

n xu

t công nghi

p, h

a máy tính
còn có

ng d

ng r

t quan tr

ng trong mô ph

ng các công trình ki

n trúc, các
di

s


n

văn

hóa,

trong

gi

ng

d

y

các

môn

h

c. ng d

ng

th

c


t

i

o



m

c
cao hơn c

a mô ph

ng. Th

c t

i

o áp d

ng các k

thu

t h

ak


th

pv

i
các

thi

t

b

3D

t

o

ra

các

ng

d

ng




ph

ng

gi

ng

như

th

c

nhưng

ư

c
th

c hi

n trên

máy tính như lái máy bay,

b


n súng

trong

quân s

, gi

i ph

u
trong y khoa, ….


X



nh

(Image

Processing)
: Các kĩ thu

t x




và thay i m

t b

c

nh


s

n



ư

c

áp

d

ng

trong

nhi

u


lĩnh

v

c

c

a i

s

ng.



d

ta có

th

s
d

ng ph

n m


m khôi ph

c m

t b

c

nh, phân tích các b

c

nh

ư

c ch

p
t

v

tinh


K
ĩ
thu


t

nh

n

d

ng

(Pattern

Recognition)
: ây là m

t lĩnh v

c c

a kĩ thu

t x


nh, các chuyên gia s

xây d

ng m


t thư vi

n

nh g

c b

ng cách áp d

ng
các thu

t toán phân tích và ch

n l

c t

nh

ng

nh m

u có s

n. D

a trên thư

vi

n

ó các chuyên gia có th

phân tích và t

h

p

nh


Giao

di

n
h

a

ng
ư

i

dùng


(Graphical

User

Interface-GUI)
: R

t nhi

u ph

n
m

m

ng

d

ng

ngày

nay

cung

c


p

GUI

cho ngư

i

dùng.

Thành

ph

n

chính
c

a m

t giao di

n h

a

ó là chương trình qu


n lí c

a s

cho phép ngư

i s
d

ng hi

n th

nhi

u c

a s

ngư

i ta g

i

ó là các c

a s

hi


n th . Nh

có GUI
mà ngư

i s

d

ng có th

d

dàng thi

t k

giao di

n cho các chương trình

ng
d

ng.
Giáo

trình H


a

Máy

Tính
6
1.2

Các

thành

ph

n

c
ơ
b

n

c

a

h h

a


máy

tính
phát tri

n h

th

ng h

a máy tính ta c

n ph

i trang b

c

ph

n c

ng l

n ph

n
m


m cũng như các

ng d

ng khác. Trong

ó, các thi

t b

ph

n c

ng là tùy thu

c vào
t

ng

ng d

ng h

a c

th

mà có th


c

n thi

t ho

c không c

n thi

t.
Ph

n

c

ng

Thi

t

b

thu

nh


n:

l

y

d li

u u

vào

cho ng

d

ng h

a

như

bàn

phím,
chu

t, máy quét, camera,

Thi


t b

hi

n th : hi

n th

hình

nh c

a

ng d

ng h

a như các lo

i màn hình
CRT, LCD, …

Thi

t b

tương


tác: làm giao ti

p trung gian gi

a ngư

i dùng

và các

ng d

ng
h

a th

c t

i

o, t

o c

m giác ngư

i dùng gi

ng như thao tác tr


c ti

p trong
môi trư

ng th

gi

i th

c như găng tay, kính 3D, …
Ph

n

m

m
Ph

n m

m h

a có th

phân thành 2 lo


i: các công c

l

p trình và các trình

ng
d

ng h

a ph

c v

cho m

t m

c

ích nào

ó. Các công c

l

p trình

cung


c

p

m

t
t

p

các

thư

vi

n h

a



th ư

c

dùng


trong

các

ngôn

ng

l

p

trình

c

p

cao

như
Pascal, C/C++/C#, Java, … hay th

m trí có c

m

t thư viên h

a có th


nhúng vào
các ngôn ng

l

p trình c

p b

t kỳ như OpenGL, DirectX. Các hàm cơ s

c

a nó bao
g

m vi

c t

o các i tư

ng cơ s

c

a hính

nh như


o

n th

ng,

a giác,

ư

ng tròn, …
thay i màu s

c, ch

n khung nhìn, bi

n i affine, …
phát tri

n các

ng d

ng h

a máy tính c

n có các lo


i ph

n m

m sau:

T

o mô hình: 3DS Max, Maya, …

L

p trình, phát tri

n

ng d

ng: OpenGL, DirectX, …
1.3

H

t

a th

gi


i

th

c,

h

t

a thi

t

b



h

t

a chu

n
M

th
h


a bao g

m 3 mi

n như sau:

Mi

n

i

u khi

n : bao b

c toàn b

h

th

ng.
Giáo

trình H

a

Máy


Tính
7

Mi

n

th

c

:

n

m

trong

mi

n

i

u

khi


n.

Khi

m

t

giá

tr

n

m

trong

mi

n
th

c, nó s ư

c chuy

n thành s

th


c d

u ph

y ng, và khi có m

t s

r

i
kh

i mi

n này thì nó s ư

c chuy

n thành s

nguyên.

Mi

n hi

n th


: n

m trong mi

n

i

u khi

n nhưng phân bi

t v

i mi

n th

c.
Ch

có giá tr

s

nguyên m

i n

m trong mi


n hi

n th .
Trong lĩnh v

c k

thu

t h

a,

chúng ta ph

i hi

u

ư

c r

ng

th

c ch


t c

a
h

a là làm th

nào có th

mô t

và bi

n i

ư

c các i tư

ng trong th

gi

i th

c
trên máy

tính.


Các i tư

ng

trong th

gi

i th

c

ư

c mô

t

b

ng t

a trong

mi

n
th

c. Trong khi


ó, h

t

a thi

t b

l

i s

d

ng h

t

a nguyên hi

n th

các hình
nh. ây chính là v

n cơ b

n c


n gi

i quy

t. Ngoài ra, còn có m

t khó khăn khác
n

a là v

i các thi

t b

khác nhau thì có các c trưng v

thông s

k

thu

t khác nhau.
Do

ó, c

n có m


t phương pháp chuy

n i tương

ng gi

a các h

t

a và i tư

ng
có th

mô t

g

n

úng v

i hình

nh th

c bên ngoài.
Hai mô hình cơ b


n c

a

ng d

ng h

a là d

a trên m

u s

hóa và d

a trên c
trưng hình h

c. Trong

ng d

ng h

a d

a trên m

u s


hóa thì các i tư

ng h

a
ư

c

t

o

ra

b

i



i

các

pixel

r


i

r

c.

Các

pixel

này



th ư

c

t

o

ra

b

ng

các
chương trình v


, máy quét, Các pixel này mô t

t

a xác nh v

trí và giá tr

m

u.
Thu

n l

i c

a

ng d

ng này là d

dàng thay i hình

nh b

ng cách thay i màu s


c
hay v

trí c

a các pixel, ho

c di chuy

n vùng

nh t

nơi này sang nơi khác. Tuy nhiên,
i

u b

t l

i là không th

xem xét i tư

ng t

các góc nhìn khác nhau.
ng d

ng h


a d

a trên c trưng hình h

c bao g

m các i tư

ng h

a cơ
s

như

o

n th

ng,

a giác, v.v. Chúng

ư

c lưu tr

b


ng các mô hình và các thu

c
tính.

Ch

ng h

n,

o

n th

ng

ư

c mô hình b

ng

hai

i

m u và cu

i,


có thu

c tính
như màu s

c, dày. Ngư

i s

d

ng không thao tác tr

c ti

p trên các pixel mà thao
tác trên các thành ph

n hình h

c c

a i tư

ng.
H

t


a th

gi

i

th

c
H

t

a th

c thư

ng

ư

c dùng mô t

các i tư

ng trong th

gi

i th


c là
h

t

a Descartes. Trong h

t

a này, m

i

i

m
P

ư

c bi

u di

n b

i m

t c


p t

a
(
x
p
,

y
p
) v

i
x
p
,

y
p



R
(xem hình 1.1).
Giáo

trình H

a


Máy

Tính
8
Hình
1.1
H

t

a
th

c
Trong

ó :

O
x
: tr

c hoành.

O
y
: tr

c tung.


x
p
: hoành i

m
P
.

y
p
: tung i

m
P
.
H

t

a thi

t

b
H

t

a thi


t b ư

c dùng cho m

t thi

t b

xu

t c

th

nào

ó, ví d

như máy
in, màn hình, v.v. Trong h

t

a thi

t b

thì các


i

m cũng

ư

c mô t

b

i c

p t

a
(
x,y
). Tuy nhiên, khác v

i h

t

a th

c là
x,

y



. i

u này có nghĩa là các

i

m
trong h

t

a th

c

ư

c nh nghĩa liên t

c, còn các

i

m trong h

t

a thi


t b


r

i r

c. Ngoài ra, các t

a
x,

y
c

a h

t

a thi

t b

ch

bi

u di

n


ư

c trong

m

t
gi

i h

n nào

ó c

a .
Ví d

: phân gi

i c

a màn hình trong ch h

a là 640x480. Khi

ó,
x



(0,640) và
y


(0, 480) (xem hình 1.2).
Giáo

trình H

a

Máy

Tính
9
H

t

a
màn

hình
H

t

a thi


t

b

chu

n
Do cách nh nghĩa các h

t

a thi

t b

khác nhau nên hình

nh hi

n th

chính
xác trên thi

t b

này thì chưa ch

c hi


n th

chính xác trên thí

t b

khác. Ngư

i ta xây
d

ng m

t h

t

a thi

t b

chu

n i di

n chung cho t

t c

các thi


t b có th

mô t
các hình

nh mà không ph

thu

c vào b

t kỳ thi

t b

nào.
Trong h

t

a chu

n, các t

a
x,

y
s ư


c gán các giá tr

trong

o

n t

[0,1].
Như v

y, vùng không gian c

a h

t

a chu

n chính là hình vuông

ơn v

có góc trái


i (0, 0) và góc ph

i trên là (1, 1).

Quy trình hi

n th

các i tư

ng th

c như sau (xem hình 1.3):
Hình

1.3

H

t

a
thi

t

b
Giáo

trình H

a

Máy


Tính
10
Ch
ươ
ng

2
CÁC

THU

T

TOÁN
V I

T
Ư

NG H

A

C
Ơ
B

N
N


i

dung

chính
Các thu

t toán v o

n th

ng: DDA, Bresenham, MidPoint.
Thu

t toán MidPoint v ư

ng tròn, ellipse.
V ư

ng cong tham s

Bezier, B-Spline.
2.1

Thu

t

toán


v o

n

th

ng
Hình

2.1:

Các

i

m

g

n

o

n

th

ng


th

c
Xét

o

n th

ng có h

s

góc
m
(0, 1] và ∆
x
> 0. V

i các

o

n th

ng d

ng này,
n


u

(
x
i
,

y
i
)



i

m

ã

ư

c

xác nh b
ư

c

th


i

thì

i

m

k

ti

p

(
x
i+
1
,

y
i
+1
) b
ư

c

th
i

+1 s

là m

t trong hai

i

m sau:
V

n t ra là ch

n

i

m v

như th

nào o

n th

ng

ư

c v


g

n v

i

o

n
Giáo

trình H

a

Máy

Tính
11
th

ng th

c nh

t và t

i ưu hóa v


m

t t

c , th

i gian th

c.
2.1.1

Thu

t

toán

DDA

(Digital

DifferentialAnalyzer)
DDA (hay còn g

i là thu

t toán s

gia) là thu


t toán v o

n th

ng xác nh các
i

m

d

a

vào

h

s

góc c

a

phương

trình

ư

ng


th

ng

y
=

m.x

+

b
.

Trong

ó,

m

=

y
/

x
,



y

=

y
i+
1
-

y
i

,


x

=

x
i+
1
-

x
i
.

Nh


n

th

y

trong

hình

v

2.1

thì

t

a c

a

i

m

x
s

tăng 1


ơn v

trên m

i

i

m v

, còn vi

c quy

t nh ch

n
y
i

y
i
+ 1 hay
y
i
s

ph
thu


c vào giá tr

sau khi làm tròn c

a tung
y
.

Tuy nhiên, n

u tính tr

c ti

p giá tr
th

c c

a y m

i bư

c t

phương trình
y
=
m.x


+

b
thì c

n m

t phép toán nhân và m

t
phép toán c

ng s

th

c:
y
i+
1
=

m.x
i+
1
+

b


=

m
(
x
i

+

1)

+

b

=

m
.
x
i

+

b

+

m
t


i ưu t

c , ngư

i ta kh

phép nhân trên s

th

c.
Ta có :
y
i

=

m.x
i

+

b


y
i+1

=


y
i

+

m

Tóm l

i, khi 0 <
m


1thì:
x
i+
1
=

x
i

+

1
y
i+
1
=


y
i

+

m

Trư

ng h

p
m
> 1: ch

n bư

c tăng trên tr

c
y
m

t

ơn v .
x
i+1


=

x
i
+
y
i+
1
=

y
i

+

1
Hai trư

ng h

p này dùng v

m

t

i

mb


t u t

bên trái n

i

m cu

i cùng
bên ph

i c

a

ư

ng th

ng (xem hình 2.2). N

u

i

m b

t u t

bên ph


i n

i

m cu

i
cùng bên trái thì xét ngư

c l

i :

0

<

m



1:

x
i+
1
=

x

i



1
Giáo

trình H

a

Máy

Tính
12
y
i+
1
:=

y
i

-

m

m

>


1:

x
i+
1
=

x
i


y
i+
1
=

y
i



1
Hình

2.2

:

Hai


tr
ư

ng

h

p

m
>1


0
<
m
< 1
Cài t

minh

h

a

thu

t


toán

DDA
void

DDALine(int

x0,

int

y0,

int

x1,

int

y1)
{
int

x;
float

dx,

dy,


y,

m;
dx:=

x1

x0;
dy:=

y1

y0;
m:=

dy/dx;
y

=

y0;
for

(x=x0;

x

<=

x1;


x++)
{
glVertex2i(x,

Round(y));
Giáo

trình H

a

Máy

Tính
13
y

=

y+m
}
}
Tương t

, ta có th

tính toán các

i


m v

cho trư

ng h

p
m
< 0, |
m
|

1 ho

c |
m
| > 1.
2.1.2

Thu

t

toán

Bresenham
Hình

2.3


:

Thu

t

toán

Bresenham

v
o

n

th

ng



0


m



1.

G

i

(
x
i
+
1
,

y
i +1
)



i

m

thu

c

o

n

th


ng

(xem

hình

2.3).

Ta



y

=

m
(
x
i
+
1)

+

b.
t

d

1
=

y
i +1
-

y
i
;

d
2
=

(
y
i
+
1)

-

y
i +1
Vi

c

ch


n

i

m

(
x
i +1
,

y
i

+1
)



P
1
hay

P
2
ph

thu


c

vào

vi

c

so

sánh

d
1


d
2
hay
d

u

c

a

d
1
-


d
2
:

N

u

d
1
-

d
2
<

0

:

ch

n

i

m

P

1
,

t

c



y
i +1
=

y
i

N

u

d
1
-

d
2



0


:

ch

n

i

m

P
2
,

t

c



y
i +1
=

y
i
+1
Xét
P

i
=


x
(
d
1
-

d
2
)
Ta



:

d
1
-

d
2

=

2
y

i+1
-

2
y
i
-

1
=

2
m
(
x
i
+1)

+

2b

-

2
y
i
-

1

Giáo

trình H

a

Máy

Tính
14

P
i
=


x
(
d
1
-

d
2
)

=


x

[2
m
(
x
i
+1)

+

2
b

-

2
y
i
-

1]
=


x
[2(

y
/

x

)(
x
i
+1)

+

2
b

-

2
y
i
-

1]
=

2

y
(
x
i
+1)

-


2

x
.
y
i
+


x
(2
b

-

1)
=

2

y
.
x
i
-

2

x
.

y
i
+

2

y

+


x
(2.
b

-

1)
V

y

C =

2∆
y
+ ∆
x
(2
b

- 1) = Const

(h

ng s

)


P
i
=

2

y
.
x
i
-

2

x
.
y
i
+

C

Nh

n

xét

r

ng

n

u

t

i

b
ư

c

th

i

ta

xác nh


ư

c

d

u

c

a

P
i
thì

xem

nh
ư

ta

xác
nh

ư

c


i

m c

n ch

n bư

c (
i

+
1). Ta có :
P
i +1
-

P
i
=

(2

y.x
i+1


2


x.y
i+1
+

C)

-

(2

y.x
i
-

2

x.y
i
+

C

)


P
i +1

=


P
i

+

2

y



2

x
(

y
i+1

-

y
i
)
-

N

u


P
i
<

0

:

ch

n

i

m

P
1
,

t

c



y
i +1
=


y
i



P
i +1

=

P
i

+

2

y
.
-

N

u

P
i


0


:

ch

n

i

m

P
2
,

t

c



y
i +1
=

y
i
+1




P
i +1

=

P
i

+

2

y



2

x
-

Giá

tr

P
0

ư


c

tính

t i

mv
u

tiên

(
x
0
,

y
0
)

theo

công

th

c

:

P
0
=

2

y.x
0



2

x.y
0

+

C
Do

(
x
0
,

y
0
)




i

m

nguyên

thu

c

v o

n

th

ng

nên

ta



:
y
0
=


2
m.x
0
+

b

=
x
0

+

b
Th

vào phương trình trên ta

ư

c :
P
0
=

2

y





x
Cài t

minh

h

a

thu

t

toán

Bresenham
void

Bresenham_Line

(int

x1,int

y1,int

x2,int


y2)
Giáo

trình H

a

Máy

Tính
15
{
int

dx,

dy,

x,

y,

P,

incre1,

incre2;
dx


=

x2

-

x1;

dy

=

y2

-

y1;
P

=

2*dy

-

dx;
incre1

=


2*dy

;

incre2

=

2*(dy

-

dx)

;
x=

x1;

y=y1;
glVertex2i(x,

y);
while

(x
<
x2

)

{
x

=

x
+1
;
if

(P
<
0)
P

=

P

+

incre1
else
{
y

=

y+1


;
P

=

P

+

incre2
}
glVertex2i(x,

y);
}
}
Giáo

trình H

a

Máy

Tính
16
Nh

n


xét
- Thu

t

toán

Bresenham

ch

thao

tác

trên

s

nguyên



ch

tính

toán

trên


phép
c

ng và phép nhân 2. i

u này là m

t c

i ti

n làm tăng t

c áng k

so v

i
thu

t toán DDA.
- Ý



ng

chính


c

a

thu

t

toán

này

là ch

xét

d

u

Pi quy

t nh

i

m

k
ti


p,



s

d

ng

công

th

c

truy

h

i

P
i +1
-

P
i
tính


P
i
b

ng

các

phép

toán

ơ
n
gi

n trên s

nguyên.
- Tuy

nhiên,

vi

c

xây


d

ng

trư

ng

h

p

t

ng

quát

cho

thu

t

toán

Bresenham


ph


c t

p hơn thu

t toán DDA.
2.1.3

Thu

t

toán

MidPoint
Pitteway công b

thu

t toán MidPoint vào 1967, Van Aken c

i ti

n 1984. Xét h
s

góc thu

c [0, 1]. Gi


thi

t r

ng

ã ch

n
P
v

, xác nh pixel ti

p theo s

là t

i
N
hay

NE

(xem

hình

2.4).


Giao

c

a

ư

ng

th

ng

v

i

X
p
+1

t

i

Q,

M




trung

i

m

c

a

NE

E
.
Hình

2.4:

Thu

t

toán

MidPoint

v
o


n

th

ng
Ý



ng

c

a

thu

t

toán

MidPoint



xét

i


m

M

xem

n

m

phía

nào

c

a

ư

ng
th

ng, n

u M n

m phía trên

ư


ng th

ng thì ch

n
E
(t

c là

ư

ng th

ng g

n v

i E hơn
NE
), ngư

c l

i ch

n
NE
. Vì v


y, ta c

n xác nh v

trí tương i c

a M so v

i

ư

ng
th

ng ch

a

o

n th

ng c

n v

.


Phân tích thu

t toán v o

n th

ng d

a trên phương trình d

ng t

ng quát c

a
Giáo

trình H

a

Máy

Tính
17
ư

ng th

ng ch


a

o

n th

ng:
F(x,

y)=

a.x

+

b.y

+

c
Ta

có:
Suy

ra

d


ng

t

ng

quát: .

Hay

tương ương:
.
T ó, ta có các h

s

c

a phương trình d

ng t

ng quát là :
a

=

dy,

b


=

-

dx,

c

=

B.dx

Giá tr

hàm t

i
M
:
F(M)=F
(
x
p

+
1
,

y

p

+
) =
d
o

N

u

d

>

0,

M

n

m

d
ư

i

ư


ng

th

ng

thì

ch

n

NE
.
o

N

u

d

<

0,

M

n


m

phía

trên

thì

ch

n

E
.
o

N

u

d

=

0,

ch

n


E

hay

NE

tùy

ý.

Giá tr

c

a hàm t

i M c

a c

a

i

m ti

p theo s

v
o


G

i

giá

tr

d

v

a

tính

là:
o

Gi

s

v

a

ch


n

E:
là s

gia c

a

i

m ti

p theo.
o

Gi

s

v

a

ch

n

NE:



s gia

c

a
i

m ti

p theo.
Tính

giá

tr

kh

i u

c

a

d

t

i


các

trung

i

m
Giáo

trình H

a

Máy

Tính
18
o

Gi

s

v o

n

th


ng

t

(x
0
,

y
0
)
n

(x
1
,

y
1
)
,

t ó

trung

i

m


th

nh

t


t

a (
x
0
+

1
,

y
0
+

).

Suy

ra:
o

F(x
0

,

y
0
)

=

0
d
start

=

a

+
=

dy


o

Tránh

s

th


p

phân

c

a

d
start
, nh

ngh
ĩ
a

l

i

hàm

nh
ư

sau:
F(x,

y)=2(a.x


+

b.y

+

c)
o

Do

v

y,

ta

có:
d
start

=

2dy

-

dx;
E


=

2dy;
NE

=

2(dy

-

dx)
Cài t

minh

h

a

thu

t

toán

MidPoint
void

MidPoint_Line(int


x0,

int

y0,

int

x1,

int

y1,

int

color)
{
int

dx,

dy,

x,

y,

d,


incrE,

incrNE

;
dx

=

x1

x0;
dy

=

y1

y0;
d

=

2*dy

-

dx;
incrE


=

2*dy;
incrNE

=

2*(dy

-

dx);
x

=

x0;
y

=y0;
Giáo

trình H

a

Máy

Tính

19
glVertex2i(x,

y);
while

(x<x1)
{
if

(d<=0)
{
//ch

n

E
d:=

d+incrE;
x

=

x+1
}
else
{
//ch


n

NE
d

=

d+incrNE;
x

=x+1;
y

=y+1
}
glVertex2i(x,

y);
}
}
Nh

n

xét

Các

thu


t

DDA,

MidPoint

trình

bày

xây

d

ng

thu

t

toán

v o

n

th

ng


trong
trư

ng h

p h

s

góc thu

c

o

n [0, 1]. Các trư

ng h

p còn l

i phân tích tương
t i v

i t

ng thu

t toán.
Giáo


trình H

a

Máy

Tính
20



m

t

tính

ch

t i x

ng



th

áp


d

ng v o

n

th

ng

trong

các

trư

ng
h

p h

s

góc không thu

c [0, 1] mà không ph

thu

c vào thu


t toán. i

u này


nghĩa



ta

s

l

y i

x

ng

các

o

n

th


ng

này

v

trư

ng

h

p

thu

c

o

n
[0,1], tính toán xong m

i t

a (
x,

y
) ta l


i l

y i x

ng tr

l

i r

i v

.

Sau

ây là chương trình cài t thu

t toán DDA t

ng quát cho t

t c

các trư

ng
h


p theo phương pháp l

y i x

ng :
void

LineDDA_DX(int

x1,

int

y1,

int

x2,

int

y2)
{
if

(x2
<
x1)
{
int


t

=

x2;
x2

=

x1;
x1

=

t;
t

=

y2;
y2

=

y1;
y1

=


t;
}
double

m;
int

dx

=

x2

-

x1;
int

dy

=

y2

-

y1;
m

=


(double)dy

/

(double)dx;
int

d;
if

(m
>
1)
{
d

=
1;
int

temp

=

x1;
x1

=


y1;
y1

=

temp;
temp

=

x2;
x2

=

y2;
y2

=

temp;
dy

=

y2

-

y1;

dx

=

x2

-

x1;
m

=

(double)dy

/

(double)dx;
}
else

if

(m
>
0)
{
d

=


2;
}
Giáo

trình H

a

Máy

Tính
21
else

if

(m
>
-1)
{
d

=

3;
y1

=


-y1;
y2

=

-y2;
dy

=

y2

-

y1;
dx

=

x2

-

x1;
m

=

(double)dy


/

(double)dx;
}
else
{
d

=

4;
int

temp2

=

x1;
x1

=

-y1;
y1

=

temp2;
temp2


=

x2;
x2

=

-y2;
y2

=

temp2;
dy

=

y2

-

y1;
dx

=

x2

-


x1;
m

=

(double)dy

/

(double)dx;
}
int

x;
double

y;
y

=

y1;
for

(x

=

x1;


x

<=

x2;

x++)
{
if

(d

==

1)
{
glVertex2i(Round(y),

x);
}
else

if

(d

==

2)
{

glVertex2i(x,

Round(y));
}
else

if

(d

==

3)
{
glVertex2i(x,

-Round(y));
}
else

//

d==4
{
glVertex2i(Round(y),

-x);
}
y


+=

m;
Giáo

trình H

a

Máy

Tính
22
}
}
2.2

Thu

t

toán

MidPoint

v
ư

ng


tròn
Trong h

t

a Descartes, phương trình

ư

ng tròn bán kính R có d

ng:

V

i tâm O(0,0) :

x
2

+

y
2

=

R
2


V

i

tâm

C(
x
c
,

y
c
):

(
x

-

x
c
)
2

+

(
y


-

y
c

)
2

=

R
2
Trong h

t

a c

c:

x

=

x
c
+

R
.cos

θ

y

=

y
c
+

Y
.sin
θ
v

i θ

[0, 2π].

×