120
TRƯỜNG ĐẠI HỌC ĐÀ LẠT KHOA CÔNG NGHỆ THÔNG TIN ThS. VÕ 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 và truyền thông Đà Lạt, 2010

Tailieu.vncty.com do hoa may tinh

Embed Size (px)

Citation preview

  • TRNG I HC LT KHOA CNG NGH THNG TIN

    ThS. V PHNG BNH

    GIO TRNH

    HA MY TNH

    Dnh cho sinh vin ngnh: Cng ngh phn mm, Mng v truyn thng

    Lt, 2010

  • Gio trnh Ha My Tnh 2

    MC LC

    M U ...................................................................................................... 4

    Chng 1 GII THIU V HA MY TNH ................................................ 5 1.1 Tng quan ha my tnh ......................................................................... 5

    1.2 Cc thnh phn c bn ca h ha my tnh ................................................ 7

    1.3 H ta th gii thc, h ta thit b v h ta chun ............................... 7 Chng 2 CC THUT TON V I TNG HA C BN .....................11 2.1 Thut ton v on thng ............................................................................11

    2.1.1 Thut ton DDA (Digital DifferentialAnalyzer) ................................................. 12 2.1.3 Thut ton MidPoint .......................................................................................... 17

    2.2 Thut ton MidPoint v ng trn ..............................................................23

    2.3 Thut ton MidPoint v Ellipse ....................................................................27

    2.4. ng cong tham s .................................................................................31

    2.4.1. ng cong Bezier ................................................................................31

    2.4.1.1. Thut ton de Casteljau .............................................................................. 31 2.4.1.2. Thut ton Horner....................................................................................... 34

    2.4.2. ng cong B-Spline .............................................................................37

    Bi tp chng 2 ...........................................................................................42

    Chng 3 T MU .......................................................................................44 3.1 Gii thiu v mu sc ................................................................................44 3.2 T mu n gin ......................................................................................44

    3.3 T mu theo dng qut (ScanConvert) ..........................................................48 3.4 T mu theo vt du loang (FloodFill) ..........................................................52 Bi tp chng 3 ...........................................................................................54

    Chng 4 PHP BIN I HAI CHIU ............................................................55 4.1 Nhc li cc php ton c s vi ma ma trn. ..................................................55

    4.2 Php tnh tin ...........................................................................................56

    4.3 Php bin i t l ....................................................................................57 4.4 Php quay ...............................................................................................57

    4.5 Php i xng .........................................................................................60 4.6 Php bin dng .........................................................................................60

  • Gio trnh Ha My Tnh 3

    4.7 Php bin i Affine ngc ........................................................................61

    4.8 H ta thun nht ..................................................................................62 4.9 Kt hp cc php bin i ...........................................................................63 Bi tp chng 4 ...........................................................................................64

    Chng 5 GIAO CC I TNG HA ....................................................66 5.1. M u ..................................................................................................66 5.2. Giao ca hai on thng .............................................................................67 5.3. on thng v hnh ch nht .......................................................................68

    5.3.1 Tm giao bng cch gii h phng trnh ....................................................... 69 5.3.2 Thut ton chia nh phn ............................................................................... 69 5.3.3 Thut ton Cohen-Sutherland ........................................................................ 72 5.3.4 Thut ton Liang-Barsky ............................................................................... 74

    5.4. Giao ca on thng v a gic li ...............................................................77 5.5. Giao hai a gic .......................................................................................80 5.6. K thut Ray tracing .................................................................................85 Chng 6 HA BA CHIU ........................................................................91 6.1. Gii thiu ha 3 chiu ...........................................................................91 6.2. Biu din i tng 3 chiu ........................................................................92 6.3. Cc php bin i 3 chiu ..........................................................................98

    6.3.1. H ta bn tay phi - bn tay tri .................................................................. 98 6.3.2. Cc php bin i Affine c s ......................................................................... 99

    6.3.2.1 Php quay quanh trc x ................................................................................ 99 6.3.2.2 Php quay quanh trc y .............................................................................. 100 6.3.2.3 Php quay quanh trc z ............................................................................. 100 6.3.2.4 Php quay quanh trc song song vi trc ta ....................................... 101 6.3.2.5 Php quay quanh trc bt k ..................................................................... 103

    PH LC: TH VIN HA OpenGL ....................................................... 107

    TI LIU THAM KHO .............................................................................. 120

  • Gio trnh Ha My Tnh 4

    M U

    ha my tnh l mt trong nhng lnh vc hp dn v pht trin nhanh ca

    Cng ngh Thng tin. N c ra i bi s kt hp ca 2 lnh vc thng tin v truyn

    hnh, v c s dng rng ri trong hu ht cc ng dng nh khoa hc v cng ngh, y hc, gio dc, kin trc, v k c gii tr. Ngy nay, nh vo s tin b ca

    khoa hc k thut nn phn cng v gi thnh ca my tnh cng lc cng ph hp,

    cc k thut ha c ng dng trong thc t nhiu nn ngy cng c nhiu ngi

    quan tm nghin cu n lnh vc ny.

    Tuy nhin, vic dy v hc k thut ha my tnh th khng n gin v ch ny c nhiu vn phc tp, lin quan n tin hc v c ton hc. Hu ht cc gii

    thut v, t mu cng cc php bin hnh u c xy dng da trn nn tng ca hnh hc khng gian hai chiu v ba chiu.

    Gio trnh ha my tnh ny c xy dng da trn kinh nghim ging dy qua v da trn ti liu tham kho chnh l : Donald Hearn, M. Pauline Baker;

    Computer Graphics; Prentice-Hall, Inc., Englewood Cliffs, New Jersey , 1986.

    Gio trnh ha my tnh l mt mn hc c ging dy cho sinh vin chuyn ngnh Cng ngh Thng tin vi 45 tit l thuyt v 30 tit thc tp. Ni dung ca gio trnh ny gm c 3 vn chnh nh sau :

    Trnh by cc thut ton v v t cc ng c bn nh ng thng, a gic, ng trn, ellipse v cc ng Bezier, B-Spline. Cc thut ton ny

    gip cho sinh vin c th t thit k v v t mu mt m hnh ha .

    Ni dung th hai cp n cc php bin i Affine, tm giao cc i tng, t mu ca ha hai chiu.

    Ni dung th ba trnh by v quan st, hin th v bin i Affine trn khng

    gian ba chiu.

    Trong qu trnh bin son chc khng trnh khi thiu st, ti xin trn trng nhn c s gp ca cc qu ng nghip v sinh vin gio trnh ngy cng c hon thin hn.

  • Gio trnh Ha My Tnh 5

    Chng 1

    GII THIU V HA MY TNH

    Ni dung chnh

    Tng quan v ha my tnh.

    Cc ng dng ca ha my tnh. Cc thnh phn c bn ca h ha my tnh.

    H ta thc v h ta ha.

    1.1 Tng quan ha my tnh

    ha my tnh bao gm tt c nhng g lin quan n vic s dng my tnh

    pht sinh ra hnh nh. Cc vn lin quan n cng vic ny bao gm: to, lu tr,

    thao tc trn cc m hnh v cc nh.

    Ngy nay, hu ht cc chng trnh son tho, bng tnh s dng ha trong

    giao din vi ngi dng. S pht trin ca ha my tnh ngy cng rng ri vi cc ch ha hai chiu (2D) v 3 chiu (3D), v cao hn, n phc v trong cc lnh vc x hi hc khc nhau nh khoa hc, gio dc, y hc, k thut, thng mi v

    gii tr. Tnh hp dn v a dng ca ha my tnh c th c minh ha rt trc quan thng qua vic kho st cc ng dng ca n.

    ha my tnh c s dng rt rng ri v c n 80% cc ng dng lin quan

    n hnh nh v c ng dng trong nhiu lnh vc khc nhau nh cng nghip,

    thng mi, qun l, gio dc, gii tr, v.v. S lng cc chng trnh ha ng dng rt ln v pht trin lin tc. Sau y l mt s ng dng tiu biu ca ha trong thc t:

    H tr thit k - CAD/CAM (Computer-Aided Design/ Computer-Aided Manufacturing): Cc h thng thit k v ch to vi s tr gip ca my tnh c ng dng trong cc lnh vc nh phn tch thit k kt cu xy dng,

    cng nghip in t, cng nghip thi trang, cc ngnh cng nghip ch to

    t, my bay, xe my....

  • Gio trnh Ha My Tnh 6

    th v bn (Graphs and Charts): y l ng dng ch yu trong lnh vc ha minh ha, ng dng ny cho php hin th cc biu d liu cng

    nh trong lnh vc biu din v x l ha. Mt trong s nhng ng dng hin nay l h thng thng tin a l GIS (Geographical Information System).:

    Gii tr: Vi s h tr ha hin nay chng ta c th sn xut nhiu sn phm

    phc v cho lnh vc gii tr c bit l phim hot hnh v cc tr chi trn

    my tnh. Nhiu phn mm v ngn ng lp trnh h tr ra i cho php ta to

    ra cc hnh nh ng gn vi vi cuc sng thc. Trong gio trnh ny chng

    ta s lm quen vi cng c OpenGL.

    ng dng m phng v thc ti o (Simulation and Virtual Reality): Bn cnh vic h tr thit k kin trc v trong sn xut cng nghip, ha my tnh

    cn c ng dng rt quan trng trong m phng cc cng trnh kin trc, cc

    di sn vn ha, trong ging dy cc mn hc. ng dng thc ti o l mc

    cao hn ca m phng. Thc ti o p dng cc k thut ha kt hp vi cc thit b 3D to ra cc ng dng m phng ging nh thc nhng c

    thc hin trn my tnh nh li my bay, bn sng trong qun s, gii phu

    trong y khoa, .

    X l nh (Image Processing): Cc k thut x l v thay i mt bc nh c sn v c p dng trong nhiu lnh vc ca i sng. V d ta c th s

    dng phn mm khi phc mt bc nh, phn tch cc bc nh c chp

    t v tinh...

    K thut nhn dng (Pattern Recognition): y l mt lnh vc ca k thut x l nh, cc chuyn gia s xy dng mt th vin nh gc bng cch p dng

    cc thut ton phn tch v chn lc t nhng nh mu c sn. Da trn th

    vin cc chuyn gia c th phn tch v t hp nh

    Giao din ha ngi dng (Graphical User Interface-GUI): Rt nhiu phn mm ng dng ngy nay cung cp GUI cho ngi dng. Thnh phn chnh ca mt giao din ha l chng trnh qun l ca s cho php ngi s

    dng hin th nhiu ca s ngi ta gi l cc ca s hin th. Nh c GUI

    m ngi s dng c th d dng thit k giao din cho cc chng trnh ng

    dng.

  • Gio trnh Ha My Tnh 7

    1.2 Cc thnh phn c bn ca h ha my tnh

    pht trin h thng ha my tnh ta cn phi trang b c phn cng ln phn mm cng nh cc ng dng khc. Trong , cc thit b phn cng l ty thuc vo

    tng ng dng ha c th m c th cn thit hoc khng cn thit.

    Phn cng

    Thit b thu nhn: ly d liu u vo cho ng dng ha nh bn phm, chut, my qut, camera, ...

    Thit b hin th: hin th hnh nh ca ng dng ha nh cc loi mn hnh

    CRT, LCD,

    Thit b tng tc: lm giao tip trung gian gia ngi dng v cc ng dng ha thc ti o, to cm gic ngi dng ging nh thao tc trc tip trong

    mi trng th gii thc nh gng tay, knh 3D,

    Phn mm

    Phn mm ha c th phn thnh 2 loi: cc cng c lp trnh v cc trnh ng

    dng ha phc v cho mt mc ch no . Cc cng c lp trnh cung cp mt

    tp cc th vin ha c th c dng trong cc ngn ng lp trnh cp cao nh

    Pascal, C/C++/C#, Java, hay thm tr c c mt th vin ha c th nhng vo

    cc ngn ng lp trnh cp bt k nh OpenGL, DirectX. Cc hm c s ca n bao

    gm vic to cc i tng c s ca hnh nh nh on thng, a gic, ng trn, thay i mu sc, chn khung nhn, bin i affine,

    pht trin cc ng dng ha my tnh cn c cc loi phn mm sau:

    To m hnh: 3DS Max, Maya,

    Lp trnh, pht trin ng dng: OpenGL, DirectX,

    1.3 H ta th gii thc, h ta thit b v h ta chun

    Mt h ha bao gm 3 min nh sau:

    Min iu khin : bao bc ton b h thng.

  • Gio trnh Ha My Tnh 8

    Min thc : nm trong min iu khin. Khi mt gi tr nm trong min

    thc, n s c chuyn thnh s thc du phy ng, v khi c mt s ri

    khi min ny th n s c chuyn thnh s nguyn.

    Min hin th : nm trong min iu khin nhng phn bit vi min thc. Ch c gi tr s nguyn mi nm trong min hin th.

    Trong lnh vc k thut ha, chng ta phi hiu c rng thc cht ca

    ha l lm th no c th m t v bin i c cc i tng trong th gii thc trn my tnh. Cc i tng trong th gii thc c m t bng ta trong min

    thc. Trong khi , h ta thit b li s dng h ta nguyn hin th cc hnh nh. y chnh l vn c bn cn gii quyt. Ngoi ra, cn c mt kh khn khc

    na l vi cc thit b khc nhau th c cc c trng v thng s k thut khc nhau.

    Do , cn c mt phng php chuyn i tng ng gia cc h ta v i tng

    c th m t gn ng vi hnh nh thc bn ngoi.

    Hai m hnh c bn ca ng dng ha l da trn mu s ha v da trn c trng hnh hc. Trong ng dng ha da trn mu s ha th cc i tng ha

    c to ra bi li cc pixel ri rc. Cc pixel ny c th c to ra bng cc chng trnh v, my qut, ... Cc pixel ny m t ta xc nh v tr v gi tr mu.

    Thun li ca ng dng ny l d dng thay i hnh nh bng cch thay i mu sc

    hay v tr ca cc pixel, hoc di chuyn vng nh t ni ny sang ni khc. Tuy nhin,

    iu bt li l khng th xem xt i tng t cc gc nhn khc nhau.

    ng dng ha da trn c trng hnh hc bao gm cc i tng ha c s nh on thng, a gic, ...v.v. Chng c lu tr bng cc m hnh v cc thuc

    tnh. Chng hn, on thng c m hnh bng hai im u v cui, c thuc tnh

    nh mu sc, dy. Ngi s dng khng thao tc trc tip trn cc pixel m thao

    tc trn cc thnh phn hnh hc ca i tng.

    H ta th gii thc

    H ta thc thng c dng m t cc i tng trong th gii thc l

    h ta Descartes. Trong h ta ny, mi im P c biu din bi mt cp ta

    (xp, yp) vi xp, yp R (xem hnh 1.1).

  • Gio trnh Ha My Tnh 9

    Hnh 1.1 H ta thc

    Trong :

    Ox : trc honh.

    Oy : trc tung.

    xp

    : honh im P.

    yp

    : tung im P.

    H ta thit b

    H ta thit b c dng cho mt thit b xut c th no , v d nh my

    in, mn hnh, ...v.v. Trong h ta thit b th cc im cng c m t bi cp ta

    (x,y). Tuy nhin, khc vi h ta thc l x, y . iu ny c ngha l cc im trong h ta thc c nh ngha lin tc, cn cc im trong h ta thit b l

    ri rc. Ngoi ra, cc ta x, y ca h ta thit b ch biu din c trong mt

    gii hn no ca .

    V d : phn gii ca mn hnh trong ch ha l 640x480. Khi , x

    (0,640) v y (0, 480) (xem hnh 1.2).

  • Gio trnh Ha My Tnh 10

    H ta mn hnh

    H ta thit b chun

    Do cch nh ngha cc h ta thit b khc nhau nn hnh nh hin th chnh

    xc trn thit b ny th cha chc hin th chnh xc trn tht b khc. Ngi ta xy dng mt h ta thit b chun i din chung cho tt c cc thit b c th m t cc hnh nh m khng ph thuc vo bt k thit b no.

    Trong h ta chun, cc ta x, y s c gn cc gi tr trong on t [0,1]. Nh vy, vng khng gian ca h ta chun chnh l hnh vung n v c gc tri

    di (0, 0) v gc phi trn l (1, 1).

    Quy trnh hin th cc i tng thc nh sau (xem hnh 1.3):

    Hnh 1.3 H ta thit b

  • Gio trnh Ha My Tnh 11

    Chng 2

    CC THUT TON

    V I TNG HA C BN

    Ni dung chnh

    Cc thut ton v on thng: DDA, Bresenham, MidPoint.

    Thut ton MidPoint v ng trn, ellipse.

    V ng cong tham s Bezier, B-Spline.

    2.1 Thut ton v on thng

    Hnh 2.1: Cc im gn on thng thc

    Xt on thng c h s gc m (0, 1] v x > 0. Vi cc on thng dng ny, nu (xi, yi) l im c xc nh bc th i th im k tip (xi+1, yi+1) bc th i+1 s l mt trong hai im sau:

    Vn t ra l chn im v nh th no on thng c v gn vi on

  • Gio trnh Ha My Tnh 12

    thng thc nht v ti u ha v mt tc , thi gian thc.

    2.1.1 Thut ton DDA (Digital DifferentialAnalyzer)

    DDA (hay cn gi l thut ton s gia) l thut ton v on thng xc nh cc im da vo h s gc ca phng trnh ng thng y = m.x + b. Trong , m = y/x, y = yi+1

    - yi

    , x = xi+1

    - xi. Nhn thy trong hnh v 2.1 th ta ca im x

    s tng 1 n v trn mi im v, cn vic quyt nh chn yi

    l yi

    + 1 hay yi

    s ph

    thuc vo gi tr sau khi lm trn ca tung y. Tuy nhin, nu tnh trc tip gi tr

    thc ca y mi bc t phng trnh y = m.x + b th cn mt php ton nhn v mt php ton cng s thc:

    yi+1

    = m.xi+1

    + b = m(xi

    + 1) + b = m.xi

    + b + m

    ti u tc , ngi ta kh php nhn trn s thc.

    Ta c : yi

    = m.xi

    + b

    yi+1

    = yi

    + m

    Tm li, khi 0 < m 1th:

    xi+1

    = xi

    + 1

    yi+1

    = yi

    + m

    Trng hp m > 1: chn bc tng trn trc y mt n v.

    xi+1

    = xi

    +

    yi+1

    = yi

    + 1

    Hai trng hp ny dng v mt im bt u t bn tri n im cui cng bn phi ca ng thng (xem hnh 2.2). Nu im bt u t bn phi n im cui cng bn tri th xt ngc li :

    0 < m 1: xi+1= xi 1

  • Gio trnh Ha My Tnh 13

    yi+1:= yi - m

    m > 1: xi+1 = xi

    yi+1 = yi 1

    Hnh 2.2 : Hai trng hp m >1 v 0 < m < 1

    Ci t minh ha thut ton 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

  • Gio trnh Ha My Tnh 14

    y = y+m

    }

    }

    Tng t, ta c th tnh ton cc im v cho trng hp m < 0, |m| 1 hoc |m| > 1. 2.1.2 Thut ton Bresenham

    Hnh 2.3 : Thut ton Bresenham v on thng c 0 m 1.

    Gi (xi +1, yi +1) l im thuc on thng (xem hnh 2.3). Ta c y = m(xi +1) + b.

    t d1 = yi +1 - yi ; d2 = (yi +1) - yi +1

    Vic chn im (xi +1, yi +1) l P1 hay P2 ph thuc vo vic so snh d1 v d2 hay du ca d1 - d2 :

    Nu d1 - d2 < 0 : chn im P1, tc l yi +1 = yi

    Nu d1 - d2 0 : chn im P2, tc l yi +1 = yi +1

    Xt Pi = x(d1 - d2)

    Ta c : d1 - d2 = 2yi+1 - 2yi - 1

    = 2m(xi+1) + 2b - 2yi - 1

  • Gio trnh Ha My Tnh 15

    Pi = x(d1 - d2) = x[2m(xi+1) + 2b - 2yi - 1]

    = x[2(y/x)(xi+1) + 2b - 2yi - 1]

    = 2y(xi+1) - 2x.yi + x(2b - 1)

    = 2y.xi - 2x.yi + 2y + x(2.b - 1)

    Vy C = 2y + x(2b - 1) = Const (hng s)

    Pi = 2y.xi - 2x.yi + C

    Nhn xt rng nu ti bc th i ta xc nh c du ca Pi th xem nh ta xc

    nh c im cn chn bc (i + 1). Ta c :

    Pi +1 - Pi = (2y.xi+1 2x.yi+1 + C) - (2y.xi - 2x.yi + C )

    Pi +1 = Pi + 2y 2x( yi+1 - yi )

    - Nu Pi < 0 : chn im P1, tc l yi +1= yi v Pi +1 = Pi + 2y.

    - Nu Pi 0 : chn im P2, tc l yi +1= yi +1 v Pi +1 = Pi + 2y 2x

    - Gi tr P0 c tnh t im v u tin (x0, y0) theo cng thc :

    P0 = 2y.x0 2x.y0 + C

    Do (x0, y0) l im nguyn thuc v on thng nn ta c :

    y0 = 2m.x0 + b = x0 + b

    Th vo phng trnh trn ta c :

    P0 = 2y x

    Ci t minh ha thut ton Bresenham

    void Bresenham_Line (int x1,int y1,int x2,int y2)

  • Gio trnh Ha My Tnh 16

    {

    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);

    }

    }

  • Gio trnh Ha My Tnh 17

    Nhn xt

    - Thut ton Bresenham ch thao tc trn s nguyn v ch tnh ton trn php

    cng v php nhn 2. iu ny l mt ci tin lm tng tc ng k so vi

    thut ton DDA.

    - tng chnh ca thut ton ny l ch xt du Pi quyt nh im k tip, v s dng cng thc truy hi Pi +1 - Pi tnh Pi bng cc php ton n

    gin trn s nguyn.

    - Tuy nhin, vic xy dng trng hp tng qut cho thut ton Bresenham c

    phc tp hn thut ton DDA.

    2.1.3 Thut ton MidPoint

    Pitteway cng b thut ton MidPoint vo 1967, Van Aken ci tin 1984. Xt h s gc thuc [0, 1]. Gi thit rng chn P v, xc nh pixel tip theo s l ti N hay NE (xem hnh 2.4). Giao ca ng thng vi Xp+1 ti Q, M l trung im ca NE v E.

    Hnh 2.4: Thut ton MidPoint v on thng

    tng ca thut ton MidPoint l xt im M xem nm pha no ca ng thng, nu M nm pha trn ng thng th chn E (tc l ng thng gn vi E hn NE), ngc li chn NE. V vy, ta cn xc nh v tr tng i ca M so vi ng thng cha on thng cn v.

    Phn tch thut ton v on thng da trn phng trnh dng tng qut ca

  • Gio trnh Ha My Tnh 18

    ng thng cha on thng: F(x, y)= a.x + b.y + c

    Ta c:

    Suy ra dng tng qut: . Hay tng ng:

    .

    T , ta c cc h s ca phng trnh dng tng qut l :

    a = dy, b = - dx, c = B.dx

    Gi tr hm ti M: F(M)=F(xp + 1, yp + ) = d o Nu d > 0, M nm di ng thng th chn NE. o Nu d < 0, M nm pha trn th chn E. o Nu d = 0, chn E hay NE ty .

    Gi tr ca hm ti M ca ca im tip theo s v o Gi gi tr d va tnh l:

    o Gi s va chn E:

    l s gia ca im tip theo.

    o Gi s va chn NE:

    l s gia ca

    im tip theo.

    Tnh gi tr khi u ca d ti cc trung im

  • Gio trnh Ha My Tnh 19

    o Gi s v on thng t (x0, y0) n (x1, y1), t trung im th nht c ta (x0 + 1, y0 + ). Suy ra:

    o F(x0, y0) = 0 dstart = a + = dy

    o Trnh s thp phn ca dstart, nh ngha li hm nh sau:

    F(x, y)=2(a.x + b.y + c)

    o Do vy, ta c:

    dstart = 2dy - dx; E = 2dy; NE = 2(dy - dx)

    Ci t minh ha thut ton 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;

  • Gio trnh Ha My Tnh 20

    glVertex2i(x, y);

    while (x

  • Gio trnh Ha My Tnh 21

    C mt tnh cht i xng c th p dng v on thng trong cc trng

    hp h s gc khng thuc [0, 1] m khng ph thuc vo thut ton. iu ny c ngha l ta s ly i xng cc on thng ny v trng hp thuc on

    [0,1], tnh ton xong mi ta (x, y) ta li ly i xng tr li ri v. Sau y l chng trnh ci t thut ton DDA tng qut cho tt c cc trng

    hp theo phng php ly i xng :

    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; }

  • Gio trnh Ha My Tnh 22

    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

  • Gio trnh Ha My Tnh 23

    }

    }

    2.2 Thut ton MidPoint v ng trn

    Trong h ta Descartes, phng trnh ng trn bn knh R c dng:

    Vi tm O(0,0) : x2 + y2 = R2 Vi tm C(xc, yc): (x - xc)2 + (y - yc )2 = R2

    Trong h ta cc :

    x = xc + R.cos

    y = yc + Y.sin

    vi [0, 2pi].

    Hnh 2.5: i xng 8 im trong ng trn

    Do tnh i xng ca ng trn C (xem hnh 2.5) nn ta ch cn v 1/8 cung trn, sau ly i xng qua 2 trc ta v 2 ng phn gic th ta v c c

    ng trn.

    Thut ton MidPoint a ra cch chn yi+1 l yi hay yi-1 bng cch so snh im

  • Gio trnh Ha My Tnh 24

    thc Q(xi+1, y) vi im gia M l trung im ca S1 v S2. Chn im bt u v l (0, R). Gi s (xi, yi) l im nguyn tm c bc th i (xem hnh 2.6), th im (xi+1, yi+1) bc i+1 l s la chn gia S1 v S2.

    Hnh 2.6 : ng trn vi im Q(x +1, y) v im MidPoint.

    t F(x, y) = x2 + y2 - R2, ta c :

    F(x, y) < 0 , nu im (x, y) nm trong ng trn. F(x, y) = 0 , nu im (x, y) nm trn ng trn. F(x, y) > 0 , nu im (x, y) nm ngoi ng trn.

    Xt Pi = F(M) = F(xi +1, y - ). Ta c :

    Nu Pi < 0 : im M nm trong ng trn. Khi , im thc Q gn vi im S1 hn nn ta chn yi+1 = yi.

    Nu Pi >= 0 : im M nm ngai ng trn. Khi , im thc Q gn vi im S2 hn nn ta chn yi+1 = yi - 1.

    Mt khc :

    Pi+1 - Pi = F(xi+1+1, yi+1 - ) - F(xi + 1, yi - )

  • Gio trnh Ha My Tnh 25

    = [(xi+1 +1)2 + (yi+1 - )2 - R2 ] - [(xi +1)2 + (yi - )2 - R2]

    = 2xi + 3 + ((yi+1)2 + (yi)2 ) - (yi+1 - yi)

    Vy :

    Nu Pi < 0 : chn yi+1 = yi. Khi , Pi+1 = Pi + 2xi + 3

    Nu Pi >= 0 : chn yi+1 = yi - 1. Khi , Pi+1 = Pi + 2xi - 2yi + 5.

    Pi ng vi im ban u (x0, y0) = (0, R) l:

    P0 = F(x0 + 1, y0 - ) = F(1, R - ) = R

    rt gn biu thc trn v trnh vic tnh ton s thc, ta t P0 = P0 -

    = 1 R. Ta c nhn xt rng du ca P0 khng thay i trong thut ton MidPoint.

    Ci t minh ha thut ton MidPoint v dng trn

    void Ve_doi_xung_8diem(int xc, int yc, int x, int y)

    {

    glVertex2i(x + xc, y + yc);

    glVertex2i(y + xc, x + yc);

    glVertex2i(-x + xc, -y + yc);

    glVertex2i(-y + xc, -x + yc);

    glVertex2i(-x + xc, y+ yc);

    glVertex2i(-y + xc, x + yc);

    glVertex2i(x + xc, -y + yc);

    glVertex2i(y + xc, -x + yc);

  • Gio trnh Ha My Tnh 26

    }

    void MidPoint_Circle(int xc, int yc, int r);

    {

    int x, y, p;

    x=0 ;

    y=r;

    p=1 - r;

    while ( y > x)

    {

    Ve_doi_xung_8diem(xc, yc, x, y);

    if (p < 0) p=p + 2*x + 3

    else

    {

    p = p + 2*(x - y) + 5 ;

    y =y - 1;

    }

    x = x + 1;

    }

    }

  • Gio trnh Ha My Tnh 27

    2.3 Thut ton MidPoint v Ellipse

    Xt phng trnh elp c tm ti gc ta

    p dng thut ton MidPoint v ng trn v elp. Tnh i xng ca elp l khi bit ta mt im c th d dng suy ra ta ba im i xng vi n qua

    cc trc Ox, Oy v gc ta .

    V elp ch c tnh cht i xng bn im nn ta phi v mt phn t ca elp,

    sau mi ly i xng v cc phn cn li ca elp. u tin ta tm ranh gii hai

    min trong gc phn t th nht ca elp

    Hnh 2.7: Phn chia hai min ca elp

    V tr: im P l tip im ca tip tuyn c h s gc 1

    Xc nh: Vc t vung gc vi tip tuyn ti tip im, gi tr gradient:

    Ti P cc thnh phn i v j ca vc t gradient c cng ln. tng ca thut ton l nh gi hm ti trung im hai ta pixel chn v tr tip theo v. Du ca n cho bit trung im nm trong hay ngoi elp.

    Hnh 2.8: Phn tch v hai min ca ellipse

  • Gio trnh Ha My Tnh 28

    Xt min 1

    Tnh bin quyt nh ti trung im u tin nu im ang xt l xp, yp:

    d = F(x, y) = F(xp + 1, yp - )

    Nu d < 0: chn E, x tng 1, y khng thay i.

    Nu d 0: chn SE, x tng 1, y gim 1:

    Xt min 2:

    Tng t, tnh bin quyt nh d = F(x, y) = F(xp + , yp - 1)

    o Nu d < 0: chn SE, x tng 1, y gim 1.

    o Nu d 0: chn S, x khng tng, y gim 1.

    Tm s gia nh min 1, ta c:

    o S = a2(-2yp + 3)

    o SE = b2(2xp + 2) + a2(-2y + 3)

    Tm gi tr khi u ca s gia d:

    Min 1: o Gi s a, b nguyn, im bt u v l (0, b) o Trung im th nht: (1, b - 1/2)

  • Gio trnh Ha My Tnh 29

    Min 2: Ph thuc vo trung im (xp + 1, yp - ) ca im tip theo im cui

    cng ca min 1.

    Ci t minh ha thut ton MidPoint v Elp

    void Ve_doi_xung_4diem(int xc, int yc, int x, int y)

    {

    glVertex2i(x + xc, y + yc);

    glVertex2i(-x + xc, y + yc);

    glVertex2i(-x + xc, -y + yc);

    glVertex2i(-y + xc, x + yc); } void ellipse(int xc, int yc, int a, int b) {

    int x, y;

    float d1, d2; x=0; //{Khi ng} y=b; d1=b2-a2b+a2/4; Ve_doixung_4diem(x, y); while (a2(y-1/2)>b2(x+1)) {Vng 1} {

  • Gio trnh Ha My Tnh 30

    If (d10) // {Vng 2} {

    if (d2

  • Gio trnh Ha My Tnh 31

    2.4. ng cong tham s 2.4.1. ng cong Bezier

    2.4.1.1. Thut ton de Casteljau

    Thut ton de Casteljau da trn dy cc im iu khin xy dng vi gi tr t trong on [0, 1] tng ng vi mt im P(t). Do , thut ton sinh ra mt dy cc im t cc im iu khin cho trc. Khi cc im iu khin thay i, ng

    cong s thay i theo. Cch xy dng ng cong da trn php ni suy tuyn tnh v do rt d dng giao tip. Ngoi ra, phng php ny cng a ra nhiu tnh cht

    quan trng ca ng cong.

    Parabol da trn ba im

    Trong mt phng R2 xt ba im P0, P1, P2. t

    Trong , t [0, 1]. Ni cch khc, vi mi t [0, 1], cc im )(10 tP , )(11 tP nm trn cc on thng P0P1 v P1P2 tng ng.

    Hnh 2.9: ng cong Bezier xc nh bi ba im iu khin

  • Gio trnh Ha My Tnh 32

    Lp li php ni suy tuyn tnh trn cc im mi )(10 tP v )(11 tP ta c:

    Qu tch ca )(:)( 20 tPtP = khi t thay i trong on [0, 1] s cho ta ng cong nh trn hnh (b).

    D dng suy ra

    Suy ra P(t) l ng cong parabol theo bin t.

    V d: Phng trnh ng cong Bezier P(t) tng ng ba im iu khin P0(1, 0), P1(2, 2), P2(6, 0) l:

    Tng qut cho trng hp s im iu khin 3 ta c:

    Thut ton de Casteljau cho L + 1 im iu khin

    Trong mt phng R2 xt L+1 im P0, P1,..., PL. Vi mi gi tr t cho trc, ta xy

    dng theo quy np ng cong )(0 tPL nh sau:

    Bc 1: [Khi to] t r = 0 v iri PtP =:)( vi mi i=0, 1, , L-r. Bc 2: [Kt thc?] Nu r = L dng; ngc li t

    Bc 3: Thay r bi r+1 v chuyn sang bc 2.

    Ci t minh ha thut ton Casteljau

    Point Casteljau(float t)

  • Gio trnh Ha My Tnh 33

    { Point Q[Max]; int i, r;

    for (i = 0; i

  • Gio trnh Ha My Tnh 34

    2.4.1.2. Thut ton Horner

    a thc Bernstein v ng cong Bezier

    Cch tip cn trong phn trc cho ta thut ton hnh hc v ng cong Bezier.

    Phn ny trnh by cch biu din gii tch ca ng cong Bezier.

    Tht vy, d dng chng minh rng ng cong Bezier P(t) tng ng cc im iu khin P0, P1,, PL, xc dnh bi:

    trong

    l a thc Bernstein, v

    kL

    l t hp chp k ca L phn t.

    V d, t nh ngha trn, ta c cc a thc Bernstein bc ba:

    th minh ha ca bn a thc ny khi t [0, 1]:

  • Gio trnh Ha My Tnh 35

    Hnh 2.10 . Cc a thc Bernstein bc ba

    V d, phng trnh tham s ca ng cong Bezier tng ng bn im iu

    khin P0(1, 0), P1(2, 3), P2(6, 0), P3 (9, 2) c dng:

    V ng cong Bezier qua a thc Bernstein

    Da vo lc Horner tnh gi tr a thc Bernstein, ta xy dng th tc

    xc nh ng cong Bezier hiu qu hn Casteljau. Mt v d nhn lng nhau ca lc Horner trong trng hp a thc bc ba:

    Tng t vi ng cong Bezier bc ba:

  • Gio trnh Ha My Tnh 36

    trong , s = 1 t. Nhn xt rng:

    Do , ta c chng trnh tnh gi tr hm Bezier P(t) trong trng hp tng qut, vi NumVertices chnh l s im iu khin L+1.

    Ci t minh ha thut ton Horner

    Point Horner_Bezier(float t) {

    int i, L_choose_i; float Fact, s; Point Q; s = 1.0 - t;

    Fact = 1.0;

    L_choose_i = 1;

    Q.x = P[0].x*s; Q.y = P[0].y*s; for(i = 1; i < L; i++) {

    Fact *= t;

    L_choose_i *= (L - i + 1)/i; Q.x = (Q.x + Fact*L_choose_i*P[i].x)*s; Q.y = (Q.y + Fact*L_choose_i*P[i].y)*s;

    } Q.x += Fact*t*P[L].x; Q.y += Fact*t*P[L].y; return(Q);

    }

  • Gio trnh Ha My Tnh 37

    2.4.2. ng cong B-Spline

    ng cong Bezier c iu khin mt cch ton cc, c ngha l khi mt

    im iu khin thay i th ton b ng cong cng thay i theo. Trong thc t, ta

    mong mun thay i mt on trn ng cong nh hnh 2.11, tc l iu khin mt

    cch a phng. iu ny ng cong Bezier khng thc hin c. Do , ta cn

    tm cc a thc trn li (hm trn) m vn gi tnh cht tt ca a thc Bernstein v cc a thc ny c gi tr cha trong on [0, 1] ngi thit k iu khin ng cong theo mong mun mt cch a phng.

    c th iu khin hnh dng cc hm trn, ta cn xy dng cc hm lin tc

    Rk(t) l nhng a thc tng khc. Do , Rk(t) trn mi khong (ti, ti+1] l mt a thc. Suy ra, ng cong P(t) l tng cc a thc tng khc vi trng lng l cc im iu khin. Chng hn, trong khong no th ng cong c dng:

    Hnh 2.11: Thay i ng cong mong mun

    Trong khong k tip, ng cong c cho bi mt cc a thc khc, v tt c cc on cong ny to thnh mt ng cong lin tc. ng cong ny c gi l

  • Gio trnh Ha My Tnh 38

    ng cong Spline. Trn mt h cc hm trn, ta chn xy dng cc hm trn c gi tr nh nht v do iu khin a phng tt nht. Khi , ta gi ng cong ny l B-Spline. Mi hm B-Spline phc thuc vo m v c bc m-1, chng ta k hiu Nk,m thay cho Rk(t). Do , phng trnh ng cong B-Spline c dng:

    Nh vy, xc nh ng cong B-Spline, ta cn:

    Vector knot T = (t0, t1, ..., ). L +1 im iu khin P0, P1, ..., PL.

    Bc m ca cc hm B-spline.

    Cng thc xc nh hm quy B-spline Nk,m

    vi k = 0, 1, , L, v

    V d, xt vector Knot T= (t0 = 0, t1 = 1, t2 = 2,...) c khong cch gia cc Knot l 1. Khi :

    th ca hm N0,2(t) trn on [0, 2] l cc a thc bc 1 v l mt tam gic vi cc nh (0, 0), (1, 1) v (2, 0).

  • Gio trnh Ha My Tnh 39

    Hnh 2.12: th cc hm B-spline tuyn tnh.

    Trong thc t, m = 3, v m = 4 thng c s dng tng ng vi ng

    cong B-Sline bc 2 v bc 3.

    m = 3

    Hnh 2.13: th hm B-Spline bc 2(m=2)

  • Gio trnh Ha My Tnh 40

    Hnh 2.14: th hm B-Spline bc 3 (m=4)

    Ci t minh ha thut ton v ng cong B-Spline

    void Create_Knot(int m) {

    if (L < m || L + m > Max) return;

    int i;

    for (i = 0; i < m; i++) Knot[i] = 0; for (; i

  • Gio trnh Ha My Tnh 41

    }

    int N(int k, int m, float t) {

    if (m == 1) { if (t < Knot[k] || t > Knot[k + 1]) return 0; return 1;

    } else { float Sum, Demo1, Demo2; Demo1 = Knot[k + m - 1] - Knot[k]; if (Demo1 != 0) Sum = (t - Knot[k]) * N(k, m - 1, t) / Demo1; else Sum = 0;

    Demo2 = Knot[k + m] - Knot[k + 1]; if (Demo2 != 0)

    Sum += (Knot[k + m] - t) * N(k + 1, m - 1, t) / Demo2; return Sum;

    } }

    Point Brestern_Spline(float t) { Create_Knot(M); Point Q = new Point(); Q.X = 0; Q.Y = 0; float x = 0, y = 0; for (int i = 0; i

  • Gio trnh Ha My Tnh 42

    { x += N(i, M, t) * P[i].X; y += N(i, M, t) * P[i].Y; } Q.X = (int)x; Q.Y = (int)y;

    return Q; }

    Bi tp chng 2

    1. Vit chng trnh v bu tri c 1.000 im sao, mi im sao xut hin vi mt mu ngu nhin. Nhng im sao ny hin ln ri t t tt cng

    rt ngu nhin.

    2. Vit chng trnh v on thng AB vi theo gii thut DDA.

    3. Vit chng trnh v on thng AB vi theo gii thut Bresenham. 4. Tng t nh bi tp 3 nhng s dng gii thut MidPoint trong trng

    hp h s gc thuc [0, 1]. 5. Ci tin bi tp 3, vit chng trnh v ng thng bng gii thut

    MidPoint cho tt c cc trng hp ca h s gc. Lu xt trng hp c bit khi ng thng song song vi trc tung hay vi trc honh.

    6. Vit chng trnh v on thng trong trng hp h s gc tng qut bng phng php ly i xng vi cc thut ton DDA, Bresenham, MidPoint.

    7. Vit chng trnh v mt ng trn tm O bn knh R theo thut ton MidPoint.

    8. Ci tin bi tp 7 v ng trn c (t mu ng trn). 9. Vit chng trnh v Elippse theo thut ton MidPoint. 10. Ci tin bi tp 9 v Elippse c (t mu Elippse). 11. Vit chng trnh v mt hnh ch nht, mt hnh vung v mt hnh

  • Gio trnh Ha My Tnh 43

    bnh hnh. 12. Vit chng trnh v mt tam gic. Ta cc nh c nhp t bn

    phm, mi cnh c mt mu khc nhau. 13. Vit chng trnh v mt a gic c n nh. 14. Vit chng trnh v ng cong Bezier vi n im iu khin: P1, P2,

    , Pn nhp t file text.

    15. Vit chng trnh v ng cong B-Spline vi n im iu khin: P1, P2, , Pn nhp t file text.

  • Gio trnh Ha My Tnh 44

    Chng 3

    T MU

    Ni dung chnh

    C s v mu sc.

    Cc thut ton t mu n gin Thut ton t mu bng dng qut (ScanConvert). Thut ton t mu theo bin (FloodFill).

    3.1 Gii thiu v mu sc

    T mu mt vng l thay i mu sc ca cc im v nm trong vng cn t.

    Mt vng t thng c xc nh bi mt ng khp kn no gi l ng bin.

    Dng ng bin n gin thng gp l a gic. Vic t mu thng chia lm 2 cng on :

    Xc nh v tr cc im cn t mu.

    Quyt nh t cc im trn bng mu no. Cng on ny s tr nn phc tp khi ta cn t theo mt mu t no ch khng phi t thun

    mt mu.

    Gio trnh gii thiu 3 cch tip cn chnh t mu:

    T mu theo tng im (c th gi l t mu n gin). T mu theo dng qut (ScanConvert). T mu da theo vt du loang (FloodFill).

    3.2 T mu n gin

    Thut ton ny bt u t vic xc nh mt im c thuc vng cn t hay

    khng , nu ng th s t vi mu mun t.

    Khng mt tnh tng qut, ta xt t mu mt a gic bt k. u tin ta tm hnh ch nht nh nht c cc cnh song song vi hai trc ta cha a gic cn t da

  • Gio trnh Ha My Tnh 45

    vo hai ta (xmin, ymin), (xmax, ymax). Trong , xmin, ymin l honh v tung nh nht, xmax, ymax l honh v tung ln nht ca cc nh ca a gic.

    Cho x i t xmin n xmax, y i t ymin n ymax. Xt im P(x, y) c thuc a gic khng, nu c th t vi mu cn t (xem hnh 3.1).

    Hnh 3.1: a gic ni tip hnh ch nht.

    Nguyn tc xc nh mt im nm trong a gic Mt im nm trong a gic th s giao im t mt tia bt k xut pht t im

    ct bin ca a gic phi l mt s l. Tia xut pht c th sang phi hay sang tri.

    c bit, ti cc nh cc tr th mt giao im phi c tnh 2 ln (xem hnh 3.2).

    V d : Xt a gic gm 13 nh l P0, P1, ....., P12

    Hnh 3.2: a gic c 13 nh.

  • Gio trnh Ha My Tnh 46

    Gi tung ca nh Pi l Pi.y . Nu :

    - Pi.y < Min(Pi+1.y, Pi-1.y) hay Pi.y > Max(Pi+1.y, Pi-1.y) th Pi l nh cc tr. - Pi-1.y < Pi.y < Pi+1.y hay Pi-1 > Pi.y > Pi+1.y th Pi l nh n iu.

    - Pi = Pi+1 v Pi.y < Min(Pi+2.y, Pi-1.y) hay Pi > Max(Pi+2.y, Pi-1.y) th on [Pi, Pi+1] l on cc tr.

    - Pi = Pi+1 v Pi-1.y < Pi.y < Pi+2.y hay Pi-1 > Pi.y > Pi+2.y th on [Pi,Pi+1] l on n iu.

    Thut ton xc nh im nm trong a gic

    - Vi mi nh ca a gic ta nh du l 0 hay 1 theo qui c nh sau: nu l

    nh cc tr hay on cc tr th nh s 0. Nu l nh n iu hay on n iu th nh du 1.

    - Xt s giao im ca tia na ng thng t P l im cn xt vi bin ca a

    gic. Nu s giao im l chn th kt lun im khng thc a gic. Ngc

    li, s giao im l l th im thuc a gic.

    Minh ha thut ton xt im thuc a gic

    int next(int i) { return ( (i + n + 1) mod n ); } int prev(int i) { return ((i + n - 1) mod n ); } bool PointInpoly(Point[] d; Point P;int n)

    { int count, I, x_cut;

    count = 0;

    for (i = 0; i< n; i++) if (d[i].y == P.y ) {

  • Gio trnh Ha My Tnh 47

    if d[i].x > P.x { if ((d[prev(i)].y < P.y) && (P.y < d[next(i)].y)) || ((d[prev(i)].y > P.y) && (P.y > d[next(i)].y)) count = count + 1;

    if (d[next(i)].y == P.y) if ((d[prev(i)].y < P.y) && (P.y < d[next(next(i))].y)) || ((d[prev(i)].y > P.y && (P.y > d[next(next(i))].y))

    count = count + 1;

    } } else //d[i].y = P.y if ((d[i].y < P.y) && (P.y < d[next(i)].y)) || ((d[i].y > P.y) && (P.y > d[next(i)].y)) { x_cut := d[i].x + Round((d[next(i)].x - d[i].x) / (d[next(i)].y - d[i].y) * (P.y - d[i].y)); if x_cut >= P.x count := count + 1; }

    if (count mod 2 = 0) return false; return true;

    }

    Minh ha thut ton t a gic

    void TomauDagiac ( Point[] d; int n, int maubien) {

    int x, y;

    Point P;

    for (x=xmin; x

  • Gio trnh Ha My Tnh 48

    if getpixel(x,y) != maubien putpixel(x,y,color); }

    }

    Nhn xt: Thut ton t n gin c u im l t rt mn v c th s dng c cho a gic li hay a gic lm, hoc a gic t ct, ng trn, ellipse. Tuy

    nhin, gii thut ny s tr nn chm khi ta phi gi hm PointInpoly nhiu ln.

    khc phc nhc im ny ngi ta a ra thut ton t mu theo dng qut.

    3.3 T mu theo dng qut (ScanConvert)

    tng: S dng giao im gia cc bin a gic v ng qut xc nh cc im nm trong a gic.

    Hnh 3.3: T mu theo dng qut.

    Cc bc thut ton:

    - Tm ymin, ymax ln lt l gi tr nh nht, ln nht ca tp cc tung ca cc

    nh ca a gic cho.

    - ng vi mi dng qut y = k vi k thay i t ymin n ymax, lp : - Tm tt c cc honh giao im ca dng qut y = k vi cc cnh ca a

    gic.

    - Sp xp cc honh giao im theo th t tng dn : x0, x1,..., xn.

    - V cc on thng trn ng thng y = k ln lt c gii hn bi cc cp cch qung nhau: (x0, x1), (x1, x2

    ), ....

    Vn cn ch

  • Gio trnh Ha My Tnh 49

    - Hn ch c s cnh cn tm giao im ng vi mi dng qut v ng vi mi

    dng qut khng phi lc no cng giao vi cc cnh ca a gic. - tm giao im gia cnh a gic v dng qut, ta c nhn xt sau:

    Trong , m l h s gc ca cnh.

    - Gii quyt trng hp s giao im i qua nh n iu th tnh s giao im

    l 1 hay i qua nh cc tr th tnh s giao im l 0 (hoc 2).

    Thut ton ScanConvert

    void ScanFill(Point[] Poly) { int min_y = Poly[0].Y, max_y = Poly[0].Y; int min_x = Poly[0].X, max_x = Poly[0].X; for (int i = 1; i < Poly.Length; i++) { if (Poly[i].Y > max_y) max_y = Poly[i].Y; if (Poly[i].Y < min_y) min_y = Poly[i].Y;

    if (Poly[i].X > max_x) max_x = Poly[i].X; if (Poly[i].X < min_x) min_x = Poly[i].X; } Point G = new Point(); Point A, B;

    for (int y = min_y; y < max_y; y++)

  • Gio trnh Ha My Tnh 50

    { List list = new List(); for (int i = 0; i < Poly.Length - 1; i++) { A = Poly[i]; B = Poly[i + 1]; if (Giao(A, B, new Point(min_x, y), new Point(max_x, y), ref G) == true) { if (G == Poly[j]) { if (j == 0) {

    if ((G.Y > Poly[Poly.Length - 1].Y && G.Y > Poly[1].Y) || (G.Y < Poly[Poly.Length - 1].Y && G.Y < Poly[1].Y))

    { list.Add(G); } } else {

    if ((G.Y > Poly[j - 1].Y && G.Y > Poly[j + 1].Y) || (G.Y < Poly[j - 1].Y && G.Y < Poly[j + 1].Y))

    { list.Add(G); } }

    else {

    list.Add(G); }

    } }

  • Gio trnh Ha My Tnh 51

    A = Poly[Poly.Length - 1]; B = Poly[0]; if (Giao(A, B, new Point(min_x, y), new Point(max_x, y), ref G) == true) { if (G == Poly[j]) { if (j == 0) {

    if ((G.Y > Poly[Poly.Length - 1].Y && G.Y > Poly[1].Y) || (G.Y < Poly[Poly.Length - 1].Y && G.Y < Poly[1].Y))

    { list.Add(G); } } else {

    if ((G.Y > Poly[j - 1].Y && G.Y > Poly[j + 1].Y) || (G.Y < Poly[j - 1].Y && G.Y < Poly[j + 1].Y))

    { list.Add(G); } }

    else {

    list.Add(G); }

    SortList(list); DrawList(list); } } void SortList(List list) {

  • Gio trnh Ha My Tnh 52

    for (int i = 0; i < list.Count - 1; i++) { for (int j = i + 1; j < list.Count; j++) { if (list[i].X > list[j].X) { Point t = list[i]; list[i] = list[j]; list[j] = t; } } } } void DrawList(List list) { for (int i = 0; i < list.Count - 1; i += 2) { Line (list[i], list[i + 1]); } }

    3.4 T mu theo vt du loang (FloodFill)

    tng

    Thut ton nhm t mu vng kn, gii hn bi mu Bcolor, mu s dng t

    l Fcolor vi im (x, y) nm trong vng t mu. Thut s dng php gi quy, ban u (x, y) c kim tra mu, nu mu ca

    n l Fcolor hoc Bcolor th tin trnh kt thc. Trong trng hp ngc li,

    im (x,y) c t vi mu Fcolor v qu trnh gi quy vi cc im lng ging ca (x, y). Cc im lng ging c s dng l bn lng ging.

  • Gio trnh Ha My Tnh 53

    X

    X (x, y) X X

    Suy ra, bn lng ging ca (x, y) l: (x + 1, y), (x - 1, y), (x, y + 1), (x, y - 1)

    Chng trnh minh ha thut ton FloodFill byte[] getPixel(int x, int y)

    { int[] Pos = new int[2];

    glRasterPos2i(x, y); glGetIntegerv(GL_CURRENT_RASTER_POSITION, Pos);

    int width = 1, height = 1; byte[] pixels = new byte[3 * width * height];

    glReadPixels(Pos[0], Pos[1], width, height, GL_RGB, GL_UNSIGNED_BYTE, pixels);

    return pixels; }

    void FloodFill(int x, int y, int Bcolor, byte[] Fcolor) {

    glColor3ubv(Fcolor); if(getPixel(x, y) != Bcolor && getPixel(x, y) != Fcolor) {

    glVertex2i(x, y); Boundary(x+1,y,Bcolor,Fcolor); Boundary(x-1,y,Bcolor,Fcolor); Boundary(x,y+1,Bcolor,Fcolor); Boundary(x,y-1,Bcolor,Fcolor);

    } }

    Thut ton quy trn s khng kh thi nu nh vng cn t mu ln. Khi ,

    thi gian thc thi v vng nh lu tr trong qu trnh quy l rt ln. khc phc

    iu ny, ta s xt thut ton kh quy bng cch dng mng lu tr cc pixel (hng i) thay v gi hm quy:

  • Gio trnh Ha My Tnh 54

    Chng trnh kh quy

    void FloodFill(int x, int y, int Bcolor, byte[] Fcolor) { glColor3ubv(Fcolor); byte[] color;

    int count=0;

    Point mPT[MaxPT]; mPT[count].x=x; mPT[count].y=y; while(count>0) { count--;

    color = getPixel(mPT[count].x, mPT[count].y); if(color != Bcolor && color != Fcolor) { glVertext2i(x,y);

    mPT[count].x=x+1; mPT[count++].y=y; mPT[count].x=x-1; mPT[count++].y=y;

    mPT[count].x=x; mPT[count++].y=y+1; mPT[count].x=x; mPT[count++].y=y-1;

    } }

    }

    Bi tp chng 3

    1. Vit chng trnh v mt a gic n nh, xt xem mt im P no c thuc

    a gic khng ?

    2. Vit chng trnh v mt a gic n nh. T a gic bng gii thut t n gin.

    3. Vit chng trnh v mt a gic n nh. T a gic bng gii thut FloodFill. Lu cho cc trng hp ca a gic : hnh ch nht, a gic li, a gic lm.

    4. Vit chng trnh v mt a gic n nh. T a gic bng gii thut

    ScanConvert.

  • Gio trnh Ha My Tnh 55

    Chng 4

    PHP BIN I HAI CHIU

    Ni dung chnh

    Cc php bin i ma trn.

    Cc php bin i Affine 2D c s. Cc php bin i 2D gp.

    4.1 Nhc li cc php ton c s vi ma ma trn.

    Cng, tr ma trn: Ch thc hin cho hai ma trn cng bc

    [A(m, n)] + [B(m, n)] = [C(m, n)]

    Nhn hai ma trn: Ma trn bc n1 m1 v ma trn bc n2 m2 nhn c vi nhau nu m1 = n2

    v

    o ma trn vung: Khng c php chia ma trn

    Nu [A][X]=[Y] th [X]=[A]-1 [Y], trong [A]-1 l ma trn o ca ma trn vung [A].

    [A][A]-1 = [I], trong [I] l ma trn n v.

    Tnh ||A||: Thay cc phn t ca[A] bng cc phn ph i s ca n. Phn ph i s ca phn t (aij) l:

  • Gio trnh Ha My Tnh 56

    [Mij] c to ra nh xa hng i, ct j ca [A].

    4.2 Php tnh tin

    C hai quan im v php bin i hnh hc, l :

    Bin i i tng : thay i ta ca cc im m t i tng theo mt

    qui tc no .

    Bin i h ta : To ra mt h ta mi v tt c cc im m t i

    tng s c chuyn v h ta mi.

    Cc php bin i hnh hc c s l : tnh tin, quay, bin i t l. Php bin i

    Affine hai chiu (gi tc l php bin i) l mt nh x T bin i im P(Px, Py) thnh im Q(Qx, Qy) theo h phng trnh sau:

    Nu gi trx v try ln lt l di theo trc honh v trc tung th ta im

    mi Q(x', y') sau khi tnh tin im P(x, y) s l :

    Trong , (trx, try) c gi l vector tnh tin hay vector di (xem hnh 4.1).

    Hay Q = P.M + tr,

  • Gio trnh Ha My Tnh 57

    Hnh 4.1 : Php bin i tnh tin im P thnh Q

    4.3 Php bin i t l

    Php bin i t l lm thay i kch thc i tng. co hay gin ta ca mt im P(x, y) theo trc honh v trc tung ln lt l Sx v Sy (gi l cc h s t l), ta nhn Sx v Sy ln lt cho cc ta ca P.

    Khi cc gi tr Sx, Sy nh hn 1, php bin i s thu nh i tng.

    Ngc li, khi cc gi tr ny ln hn 1, php bin i s phng ln i tng.

    Khi Sx = Sy , ngi ta gi l php ng dng. y l php bin i bo ton tnh cn xng ca i tng. Ta gi l php phng i nu |S|>1 v l php thu nh nu |S|

  • Gio trnh Ha My Tnh 58

    Php quay quanh gc ta

    Ta c cng thc bin i ca php quay im P(x, y) quanh gc ta gc (xem hnh 4.2):

    Hay Q = P.M, trong :

    Hnh 4.2 : Php quay quanh gc ta

    Php quay quanh mt im bt k

    Hnh 4.3 : Php quay quanh mt im bt k.

  • Gio trnh Ha My Tnh 59

    Xt im P(P.x, P.y) quay quanh im V(V.x, V.y) mt gc n im Q(Q.x,Q.y). Ta c th xem php quay quanh tm V c kt hp t php cc bin c bn sau:

    Php tnh tin (-V.x, -V.y) dch chuyn tm quay v gc ta . Quay quanh gc ta O mt gc . Php tnh tin (V.x, V.y) a tm quay v v tr ban u.

    Ta cn xc nh ta ca im Q (xem hnh 4.3).

    T php tnh tin (-V.x,-V.y) bin i im P thnh P' ta c:

    P' = P + V

    Hay

    P'.x = P.x - V.x

    P'.y = P.y - V.y

    Php quay quanh gc ta bin i im P' thnh Q'

    Q' = P'.M

    Hay

    Q'.x = P'.x.cos - P'.y.sin

    Q'.y = P'.x.sin + P'.y.cos

    Php tnh tin (V.x, V.y) bin i im Q' thnh Q ta c

    Q = Q' + V

    Hay

    Q.x = Q'.x + V.x

    Q.y = Q'.y + V.y

  • Gio trnh Ha My Tnh 60

    Q.x = (P.x - V.x)cos - (P.y - V.y) sin + V.x

    Q.y = (P.x - V.x)sin + (P.y - V.y) cos + V.y

    Q.x = P.x.cos - P.y.sin + V.x (1- cos) + V.y.sin

    Q.y = P.x.sin + P.y.cos - V.x.sin + V.y (1- cos)

    Vy, Q = P.M + tr, trong :

    4.5 Php i xng

    Php i xng trc c th xem l php quay quanh trc i xng mt gc 1800.

    Phng trnh ban u :

    Q.x = a.P.x + c.P.y + trx

    Q.y = b.P.x + d.P.y + try

    Hay

    o Trc i xng l trc honh :

    Ta c :

    o Tng t trc i xng l trc tung :

    Ta c :

    4.6 Php bin dng

    Php bin dng lm thay i, mo m hnh dng ca cc i tng. Bin dng

    theo phng trc x s lm thay i honh cn tung gi nguyn.

  • Gio trnh Ha My Tnh 61

    V d, bin i im P(P.x, P.y) thnh im Q(Q.x, Q.y) theo phng trc x l php bin i c biu din bi phng trnh sau:

    Q.x = P.x + h.P.y

    Q.y = P.y

    - Bin dng theo phng trc y s lm thay i tung cn honh gi nguyn.

    Q.x = P.x

    Q.y = g.P.x + P.y

    4.7 Php bin i Affine ngc

    Php bin i ngc dng khi phc mt php bin i thc hin. Gi Q l nh ca P qua php bin i T c ma trn bin i M l P.M

    Php bin i ngc T-1 s c ma trn bin i l M-1 l ma trn nghch o ca

    ma trn M. Vi ma trn bin i Affine dng:

    th ma trn nghch o l:

    Php tnh tin

  • Gio trnh Ha My Tnh 62

    Php quay

    Php bin i t l

    Php bin dng

    4.8 H ta thun nht

    Ta thun nht ca mt im trn mt phng c biu din bng b ba s t l (xh, yh, h) khng ng thi bng 0 v lin h vi cc ta (x, y) ca im bi cng thc :

    Nu mt im c ta thun nht l (x, y, z) th n cng c ta thun nht l (h.x, h.y, h.z), trong h l s thc khc 0 bt k. Mt im P(x, y) s c biu din di dng ta thun nht l (x, y, 1). Trong h ta thun nht cc ma trn ca

  • Gio trnh Ha My Tnh 63

    php bin i c biu din nh sau :

    Php tnh tin

    Php quay

    Php bin i t l

    Thun li ca h ta thun nht l khi ta kt hp hai hay nhiu php bin i

    affine thi ma trn hp ca nhiu php bin i c tnh bng cch nhn cc ma trn

    ca cc php bin i thnh phn.

    4.9 Kt hp cc php bin i

    Qu trnh p dng cc php bin i lin tip to nn mt php bin i tng th c gi l s kt hp cc php bin i.

    Kt hp php tnh tin

    Nu ta thc hin php tnh tin ln im P c im P', ri li thc hin tip

    mt php tnh tin khc ln P' c im Q. Nh vy, im Q l nh ca php bin i kt hp hai php tnh tin lin tip.

  • Gio trnh Ha My Tnh 64

    Vy kt hp hai php tnh tin l mt php tnh tin. T , ta c kt hp ca

    nhiu php tnh tin l mt php tnh tin.

    Kt hp php quay

    Tng t, ta c ta im Q l im kt qu sau khi kt hp hai php quay quanh gc ta MR1(1) v MR2(2) l :

    Kt hp php bin i t l

    Tng t nh php tnh tin, ta c ta im Q l im c c sau hai php tnh tin M1(Sx1, Sy1), M2(Sx2, Sy2) l:

    Bi tp chng 4

    1. V mt hnh bnh hnh bng cch s dng php tnh tin. (V on thng AB, sau tnh tin AB thnh on thng CD//AB; v AD, tnh tin AD thnh BC.

    2. Vit chng trnh v mt hnh vung ABCD (xem hnh v).

  • Gio trnh Ha My Tnh 65

    Tnh tin hnh vung n v tr khc.

    Phng to hnh vung ABCD.

    Bin dng hnh vung thnh hnh thoi.

    3. V mt elip, sau v thm 3 elip khc c cng tm vi elip cho, c dn trc Ox l k v Oy l 1.

    4. Vit chng trnh m phng s chuyn ng ca tri t quay quanh mt tri.

    5. Vit chng trnh v mt ng trn tm O bn knh R. V mt ng knh AB, v quay ng knh ny quanh tm ng trn.

    6. Tm v tr mi ca tam gic A(1, 1), B(3, 2), C(2, 4) qua php quay gc 30o qua im (5, 5).

  • Gio trnh Ha My Tnh 66

    Chng 5

    GIAO CC I TNG HA

    Ni dung chnh

    Khi nim ca s.

    Thit k v ci t c cc thut ton tm giao cc i tng ha: ng

    thng, hnh ch nht, a gic.

    K thut Ray tracing.

    5.1. M u

    Hnh nh trong h ta th gii thc c hin th trn cc h ta thit b

    da trn h ta ha. Chng hn, trong mt vng ha ta cn xc nh vng no ca hnh nh s c hin th v mun t n u trn h ta thit b. Mt vng

    n l hoc vi vng ca hnh nh c th c chn. Nhng vng ny c th c t

    nhng v tr tch bit, hoc mt vng c th c chn vo mt vng ln hn. Qu trnh bin i ny lin quan n nhng thao tc nh tnh tin, bin i t l vng c

    chn v xa b nhng phn bn ngoi vng c chn.

    Vng c dng hnh ch nht c xc nh trong h ta th gii thc c gi

    l mt ca s (window). Cn vng hnh ch nht trn thit b hin th ca s nh x n c gi l mt vng quan st (viewport).

    Hnh 5.1: Ca s v vng quan st

  • Gio trnh Ha My Tnh 67

    nh x mt vng ca s vo trong mt vng quan st, kt qu l ch hin th nhng phn trong phm vi ca s. Mi th bn ngoi ca s s b loi b. Cc th tc loi b cc phn hnh nh nm bn ngoi bin ca s c gi l cc thut ton tm

    giao hoc ct xn (clipping).

    Vn t ra trn y cng l mt trong nhng vn c s, quan trng ca

    ha my tnh nh xc nh phn giao ca cc i tng ha: giao ca hai on

    thng, on thng v hnh cha nht, a gic v hnh ch nht, Cc thut ton cn thc hin nhanh nht c th minh ha cp nht cc kt qu thay i trong ng dng

    ha. Phng php gii tch c dng gii quyt cc bi ton trong chng ny.

    5.2. Giao ca hai on thng

    Ta xt giao ca hai ng thng i qua hai im c minh ha thng qua th d

    n gin sau: ng thng i qua ta (4,2) v ta (2,0) c giao vi on thng i qua (0,4) v (4,0)?

    Gii php

    - Xc nh phng trnh ng thng qua 2 im y = ax + b, trong a = (y2 - y1)/(x2 - x1)

    - T th d trn, ta c: y = x - 2 v y = - x + 4 giao im ti (3, 1)

    Tng qut: nu ta c y = a1 + b1x v y = a2 + b2x th giao im s ti:

    xi = -(a1 - a2)/(b1 - b2) yi = a1 + b1xi

    Trng hp c bit: ng thng song song vi trc x hay trc y, hay song song vi nhau. Nu s dng phng php tm giao ng thng: i hi kim tra ta ca giao ng thng c nm trong cc on thng.

    Phng php biu din on thng bng tham s s hiu qu hn, on thng th nht t (xA, yA) n (xB, yB); on thng th hai t (xC, yC) n (xD, yD); tnh ton giao ca 2 on thng ti ta c t, s:

  • Gio trnh Ha My Tnh 68

    v

    Hnh 5.2: Biu din tham s ca on thng

    5.3. on thng v hnh ch nht

    V tr tng i ca on thng v hnh ch nht (R) c bn trng hp sau:

    1. C hai u mt ca on thng nm trong hnh ch nht, chng hn AB. 2. Mt trong hai u mt ca on thng nm trong hnh ch nht, chng hn

    BC.

    3. C hai u mt ca on thng nm ngoi hnh ch nht nhng c giao

    im, chng hn CD.

  • Gio trnh Ha My Tnh 69

    4. C hai u mt ca on thng nm ngoi hnh ch nht v khng c giao

    im, chng hn DE.

    Hnh 5.3: Cc trng hp giao ca on thng v hnh ch nht

    Hai trng hp 1 v 4 gi l cc trng hp tm thng, tc l xc nh c

    ngay c tn ti giao im hay khng. Cc trng hp cn li ta phi tin hnh thut

    ton xc nh giao im s c trnh by trong phn tip theo sau.

    Hnh 5.4: Hai trng hp tm thng ca giao on thng v hnh ch nht

    5.3.1 Tm giao bng cch gii h phng trnh

    a bi ton v xc nh giao im ca hai on thng c trnh by trong phn

    3.2. Theo phng php ny, chng ta cn tnh ton v kim tra nhiu kh nng; do

    khng hiu qu.

    5.3.2 Thut ton chia nh phn

  • Gio trnh Ha My Tnh 70

    Mt tip cn l da trn c ch nh m c pht trin bi Cohen v

    Sutherland. Mi im hai u mt on thng trong hnh nh s c gn mt m nh phn 4 bit, c gi l m vng, gip nhn ra vng ta ca mt im. Cc vng

    ny c xy dng da trn s xem xt vi bin ca s, nh hnh 6-8. Mi v tr bit trong m vng c dng ch ra mt trong bn v tr ta tng ng ca im so

    vi ca s: bn tri (left), phi (right), trn nh (top), di y (bottom). Vic nh s theo v tr bit trong m vng t 1 n 4 cho t phi sang tri, cc vng ta c th lin quan vi v tr bit nh sau:

    Hnh 5.5: M ha cc u mt ca on thng

    Gi tr 1 bt k v tr no ch ra rng im v tr tng ng, ngc li bit v tr l 0. Nu mt im nm trong ca s, m v tr l 0000. Mt im bn di v bn tri ca s c m vng l 0101.

    Ci t minh ha thut ton m ha

    byte EncodePoint(Point LeftTop, Point RightBottom, Point P) {

    byte code = 0; if (P.X < LeftTop.X) { code |= 8; } if (P.X > RightBottom.X) { code |= 4; } if (P.Y < RightBottom.Y)

  • Gio trnh Ha My Tnh 71

    { code |= 2; } if (P.Y > LeftTop.Y) { code |= 1; }

    return code;

    }

    Thut ton chia nh phn

    1. Nu E(A) = 0 v E(B) = 0 kt lun AB (R) = AB; thut ton dng.

    2. Nu [E(A) AND E(B)] != 0 kt lun AB (R) = ; kt thc thut ton.

    3. Nu E(A) = 0 v E(B) 0(tc A (R) v B (R)) thc hin:

    a. t C = A, D = B.

    b. Trong khi di ||CD|| ln hn t M l trung im ca on CD.

    Nu E(M) = 0 th cp nht C = M ngc li D = M.

    c. Kt lun AB (R) = AM; kt thc thut ton.

    4. Nu E(A) = 0 v E(B) = 0, hon i vai tr ca A v B; lp li bc 3.

    5. Ngc li, thc hin:

    a. t C = A, D = B.

    b. Trong khi di ||CD|| ln hn t M l trung im ca on CD.

    Nu E(M) = 0 p dng Bc 3 cho hai on MC v MD. Kt lun AB(R) = CD;kt thc thut ton.

    Nu [E(M) AND E(R)] != 0 t C = M.

  • Gio trnh Ha My Tnh 72

    Nu [E(M) AND E(D)] != 0 t D = M.

    Nu [E(R) AND E(D)] != 0 kt lun AB (R)= ; kt thc thut ton.

    Hnh 5.6: Minh ha ca thut ton chia nh phn.

    5.3.3 Thut ton Cohen-Sutherland

    Xc nh nhanh on thng c cn ct xn hay khng nh cc php ton logc

    AND v OR:

    Kt qu php OR hai m u mt on thng cho kt qu 0: c hai im

    nm trong ch nht.

    Kt qu php AND hai m u mt on thng cho kt qu khc 0: c hai im nm ngoi ch nht.

    Hnh 5.7: on thng giao vi hnh ch nht

    Giao ca on thng vi cc cnh ch nht song song trc tung:

    x c gi tr Xmin, Xmax v h s gc a = (y2 - y1)/(x2 - x1)

  • Gio trnh Ha My Tnh 73

    y = y1 + a(x x1)

    Giao on thng vi cc cnh song song trc honh:

    y c gi tr Ymin, Ymax v h s gc a = (y2 - y1)/(x2 - x1)

    x = x1 + (y - y1)/a

    Ci t thut ton Cohen-Shutherland

    void InterLineRectangle(Point LeftTop, Point RightBottom, Point A, Point B) { byte codeA, codeB, codeOut; float x = 0, y = 0; codeA = EncodePoint(LeftTop, RightBottom, A); codeB = EncodePoint(LeftTop, RightBottom, B); while (true) { if (codeA == 0 && codeB == 0) { return true;

    } if ((codeA & codeB) != 0) { return false; }

    if (codeA != 0) codeOut = codeA; else codeOut = codeB;

    if ((codeOut & 8) != 0)//L { x = LeftTop.X; y = A.Y + (float)((x - A.X) * (B.Y - A.Y)) / (float)(B.X - A.X); }

  • Gio trnh Ha My Tnh 74

    else if ((codeOut & 4) != 0) //R { x = RightBottom.X;

    y = A.Y + (float)((x - A.X) * (B.Y - A.Y)) / (float)(B.X - A.X); } else if ((codeOut & 2) != 0)//B { y = RightBottom.Y; x = A.X + (float)((y - A.Y) * (B.X - A.X)) / (float)(B.Y - A.Y); } else if ((codeOut & 1) != 0)//T { y = LeftTop.Y; x = A.X + (float)((y - A.Y) * (B.X - A.X)) / (float)(B.Y - A.Y); }

    if (codeOut == codeA) { A.X = (int)x; A.Y = (int)y; codeA = EncodePoint(LeftTop, RightBottom, A); } else { B.X = (int)x; B.Y = (int)y; codeB = EncodePoint(LeftTop, RightBottom, B); } } }

    5.3.4 Thut ton Liang-Barsky

  • Gio trnh Ha My Tnh 75

    Mt thut ton tm giao on thng v hnh ch nht hiu qu dng phng trnh

    tham s c pht trin bi Liang v Barsky. Nhn xt rng hnh ch nht (R) gm tp cc im nm trong mt phng gii hn bi cc ng thng qua cc cnh

    gii hn ca n; tc l:

    Phng trnh tham s ca on AB: P(t) := A + t (B - A) vi t [0, 1]. Nh vy bi ton a v xc nh cc gi tr tham s t tha h cc bt phng trnh sau:

    Hay tng ng : qi pit , i = 0,1, 2, 3. Trong :

    p0 = dx, q0 = xmin - xA

    p1 = -dx, q1 = xA - xmax

    p2 = dy, q2 = ymin - yA

    p3 = -dy, q3 = yA - yAmax

    vi dx = xB xA ; dy = yB yA.

    Nu tn ti ch s i {0, 1, 2, 3} sao cho pi = 0 v qi > 0 th h bt phng trnh trn v nghim ; tc l on thng AB giao vi hnh nht bng rng. Ngc li, ta t :

    t0 := max{0, max{ | pi > 0, i = 0, 1, 2, 3}}

    t1 := min{1,min{ | pi < 0, i = 0, 1, 2, 3}}.

    Khi h bt phng trnh tng ng vi : t0 t t1. iu ny ch ra rng, iu kin on thng AB c giao im vi hnh ch nht (R) l t0 t1 :

    T , ta c thut ton sau :

  • Gio trnh Ha My Tnh 76

    Bc 1: Tnh pi, qi vi i = 0, 1, 2, 3.

    Bc 2: Khi to i = 0 v t0 = 0, t1 = 1.

    Bc 3: Nu pi = 0 v qi > 0 th kt lun ; kt thc thut ton.

    Bc 4: Nu pi > 0 t t0 := max{t0, }. Chuyn sang bc 7.

    Bc 5: Nu pi < 0 t t1 := min{t1, }. Chuyn sang bc 7.

    Bc 6: Nu t0 > t1 th kt lun ; kt thc thut ton.

    Bc 7: Nu i < 3 thay i = i + 1 v lp li bc 3; Ngc li, kt lun

    ; trong :

    C = A + t0(B A)

    D = A +t1(B A)

    V d, xt hnh ch nht :

    v hai im A(1, -2) v B(10, 9). Ta c phng trnh tham s ca on thng AB l: A + t(B - A). Ta cn gii h phng trnh:

    Hay tng ng :

    Vy

    Suy ra, giao im ca AB v hnh ch nht l on thng CD, trong :

  • Gio trnh Ha My Tnh 77

    Thut ton Liang v Barsky gim bt cc tnh ton cn thit ct cc on. Mi

    ln cp nht t0 v t1 ch cn mt php chia, v cc giao im vi ca s c tnh ch

    mt ln, khi m cc gi tr t0 v t1 va hon thnh. Ngc li, thut ton ca Cohen-Sutherland lp li vic tnh giao im ca on vi cc bin ca s, v mi php tnh

    giao im cn c hai php chia v nhn.

    5.4. Giao ca on thng v a gic li

    V tr tng i ca mt im vi on thng

    Trong nhiu ng dng, ta quan tm n khi nim na mt phng trong v na mt

    phng ngoi xc nh bi mt on thng. Khi nim ny lin quan mt thit n php vector ca on thng.

    Hnh 5.8: V tr tng i ca im Q vi on thng l.

    Phng trnh tng qut ca on thng l c dng a.x + b.y + c = 0. K hiu:

    l cc na mt phng ngoi v na mt phng trong xc nh bi l, trong D = -c, n = (a, b)t. Tiu chun kim tra im Q thuc mt na phng no ca on thng l:

  • Gio trnh Ha My Tnh 78

    1.

    2.

    3.

    Thut ton xc nh giao im on thng v a gic li

    Hnh 5.9: Giao ca on thng v a gic li

    Thut ton Cyrus-Beck da trn tiu chun loi b n gin bng cch xc nh v tr tng i ca mt im vi mt on thng. Gi s a gic li (R) c nh ngha nh mt dy cc nh Pi = (xi, yi), i=0, 1,..., L, trong h ta thc vi P0 = PL. Mc ch ca phn ny l loi b nhng phn ca on AB khng nm trong ca s (R) (Hnh 5.9).

    K hiu li, i = 0, 1,..., L, l on thng i qua hai nh lin tip Pi, Pi+1. t:

    l cc na mt phng ngoi v mt phng trong xc nh bi li, trong ni l php vector ca li c chn hng ra na mt phng ngoi v Di l hng s no . V (R) l tp li nn c xc nh bi:

    tng ca thut ton nh sau:

  • Gio trnh Ha My Tnh 79

    Vi mi on thng li, i =0, 1,..., L, chng ta loi b phn ca on thng AB

    thuc na mt phng ngoi xc nh bi li v cp nht AB=AB( il ). Nu ti bc no , AB ( +il ) th kt lun giao ca on thng v a gic li

    bng trng; ngc li, nu bc cui cng phn on thng AB cn li nm trong (R) chnh l phn giao cn tm.

    Thut ton

    void Cyrus_Beck(Point *A, Point *B, VertPtr Poly) {

    float t_in = 0.0, t_out = 1.0, t_hit, Denom, D; Point F, S;

    Vector c, n, a;

    VertPtr Tempt = Poly; if (Tempt == NULL)

    return False; F = Tempt->Vertex;

    c.dx = (*B).x - (*A).x; c.dy = (*B).y - (*A).y; a.dx = (*A).x; a.dy = (*A).y; while ((Tempt = Tempt->Next) != NULL) {

    S = Tempt->Vertex;

    n.dx = (S.y - F.y); n.dy = -(S.x - F.x); D = n.dx*F.x + n.dy*F.y; if ((Denom = Dot2D(n, c)) == 0.0)

    if (Dot2D(n, a) > D) return false; else {

    t_hit = (D - Dot2D(n, a)) / Denom; if (Denom > 0.0)

  • Gio trnh Ha My Tnh 80

    if (t_out > t_hit) t_out = t_hit; else

    if (t_in < t_hit) t_in = t_hit; if (t_in > t_out) return false;

    } F=S;

    } F.x = (1 - t_in)*(*A).x + t_in*(*B).x; F.y = (1 - t_in)*(*A).y + t_in*(*B).y; S.x = (1 - t_out)*(*A).x + t_out*(*B).x; S.y = (1 - t_out)*(*A).y + t_out*(*B).y; *A = F;

    *B = S;

    return true;

    }

    5.5. Giao hai a gic

    Thut ton Sutherland-Hodgman

    K hiu Subj v Clip l danh sch cc nh ca hai a gic (S) v (C) tng ng. C bn kh nng xy ra gia mi cnh ca (S) v ca (C):

    1. Hai nh F v S nm trong: xut S.

    2. nh F nm trong v S nm ngoi: tm giao im I v xut n.

    3. Hai nh F v S nm ngoi: khng xut. 4. nh F nm ngoi v S nm trong: tm giao im I; xut I v S.

  • Gio trnh Ha My Tnh 81

    Hnh 5.10: Bn trng hp vi mi cnh ca (S)

    Xt v d hnh (a):

  • Gio trnh Ha My Tnh 82

    Hnh 5.11: V d thut ton Sutherland-Hodgman

  • Gio trnh Ha My Tnh 83

    1. Danh sch Subj sau khi ct (S) vi cnh bn tri ca (C):

    (1, 2, D, E, F, G, 3, 4, I, A, 1).

    2. Danh sch Subj sau khi ct (S) vi cnh bn di ca (C):

    (5, 6, E, F, 7, 5, 4, I, A, 1, 5).

    3. Danh sch Subj sau khi ct (S) vi cnh bn phi ca (C):

    (8, 9, F, 7, 5, 4, I, A, 1, 5, 8).

    4. Danh sch Subj sau khi ct (S) vi cnh bn trn ca (C):

    (9, F, 7, 5, 4, I, 10, 11, 5, 8, 9).

    Thut ton Weiler-Atherton

    Cch tip cn ca Weiler-Atherton nhm tm ra giao ca hai a gic bt k, thm ch c l hng trong cc a gic. Ngoi ra c th tm phn hp v hiu hai a gic na.

    Xt v d hnh 5.12 sau:

    Hnh 5.12: V d thut ton Weiler-Atherton

    Hai a gic (S) v (C) c biu din bi danh sch cc nh, k hiu Subj = (A, B, C, D, E, A) v Clip = (a, b, c, d, e, a) tng ng.

  • Gio trnh Ha My Tnh 84

    Tt c cc giao im ca hai a gic c xc nh v lu vo mt danh

    sch. Trong v d trn c tt c su giao im: 1, 2, 3, 4, 5, 6.

    Thc hin tin trnh: ln theo hng thun v nhy l xy dng hai danh

    sch:

    Subj: (A, 1, B, 2, C, 3, 4, D, 5, 6, E, A)

    Clip: (a, b, 4, 5, c, d, e, 6, 3, 2, 1, a)

    Xut pht t giao im i vo l im i t ngoi vo trong ca a gic (C), duyt trn (S) n khi gp giao im th chuyn sang duyt trn (C), v lp li. Qu kt thc khi gp im xut pht ban u. Tip tc kim tra giao im trn (S) cha c i qua v lp li tin trnh trn. Ta c hai a gic sinh ra l (1, B, 2, 1) v (3, 4, 5, 6, 3).

    Hp hai a gic (S) (C)

    i trn (S) theo hng thun cho n khi gp im ra l im i t trong ra ngoi ca a gic (C) duyt cho n khi gp giao im khc vi (C) th duyt sang (C) cho n khi gp giao im k tip ri chuyn sang (S). Qu trnh kt thc khi gp im xut pht ban u. Kt qu (S) (C) gm hai a gic:

    (2, C, 3, 2) (l hng). (4, D, 5, c, d, e, 6, E, A, 1, a, b, 4).

  • Gio trnh Ha My Tnh 85

    Hiu hai a gic (C) \ (S)

    i trn (S) theo hng thun cho n khi gp im vo duyt cho n khi gp giao im khc vi (C) th duyt sang (C) theo hng ngc cho n khi gp giao im k tip ri chuyn sang (S). Qu kt thc khi gp im xut pht ban u.

    (C) \ (S): (1, B, 2, 3, 4, b, a, 1); v (5, 6, e, d, c, 5). (S) \ (C): (4, 5, D, 4); v (6, 3, C, 2, 1, A, E, 6).

    5.6. K thut Ray tracing

    K thut Ray tracing l phng php p dng mt s khi nim hnh hc to ng dng ha m phng qu trnh chuyn ng ca tia sng trong bung kn. K

    thut Ray tracing l mt cng c quan trng trong ha my tnh tng hp hnh

    nh. Trong tng hp hnh nh, cc tia sng nhn to ln theo trong th gii thc ba

    chiu cha nhiu i tng. ng i ca mi tia sng xuyn qua cc i tng hoc phn x li ty theo mc phn x ca i tng cho n khi n dng li i

    tng no . Mu ca i tng ny s c t cho pixel tng ng trn thit b

    hin th. M phng qu trnh Ray tracing rt d dng trong khng gian hai chiu.

    Ta xt qu o ca tri pinpall nh khi va chm vo cc i tng trong bung kn. Hnh bn di minh ha nht ct ngang ca mt bung kn c nm bc tng v cha ba tr trn. Tri pinpall bt u ti v tr S va di chuyn theo hng vector c cho n gp vt cn s b phn x v di chuyn theo hng mi. Qu trnh c lp li nhiu ln. Qu o ca tri pinpall l ng gp khc m ta c th hnh dung ng i ca tia sng di chuyn trong bung kn.

    By gi ta s xy dng thut ton xc nh i tng giao vi tia sng s trc v v tr va trm ti . V tr va chm l im khi u cho cho ng i k tip vi

    hng di chuyn mi.

  • Gio trnh Ha My Tnh 86

    Hnh 5.13: V d v Ray tracing.

    Vector phn x

    Hnh 5.14 phn gii vector c gm thnh phn m dc theo n v thnh phn e vung gc vi n. Ta c, r = e m. Nhng e = c m nn r = c 2m.

    Hnh 5.14: Phn x tia sng

    V vector m l vector phn gii ca vector c theo vector n nn

    ,

    Th tc xc nh vector phn x r t vector c v php vector n

    void Reflection(Vector c, Vector n, Vector *r)

    {

  • Gio trnh Ha My Tnh 87

    float Coeff = 2.Dot2D(c, n)/Dot2D(n, n);

    (*r).dx = c.dx Coeff.n.dx;

    (*r).dy = c.dy Coeff.n.dy;

    }

    Giao ca tia sng v ng thng

    Phng trnh tham s ca tia sng xut pht t S chuyn ng theo vector ch

    phng c cho bi

    R(t):= S + c.t, t 0.

    Bc tng tng ng ng thng:

    trong , php vector n hng ra ngoi bung kn. Nu 0 th tia sng ct ng thng ti Ph = S + cth , trong :

    V d, cho ng thng 6x 8y + 10 = 0 v tia sng xut pht t S(2, 4) di chuyn theo vector ch phng c= (2, 1)t. ng thng c n =(6,8)t v D = 10. Ta c:

    Suy ra giao im I:

    I = S + t.c =(2, 4) + (2, 1) = (1, ).

    Vector phn x:

  • Gio trnh Ha My Tnh 88

    Th tc xc nh thi im giao th

    void Ray_With_Line(Point S, Vector c, Vector normal, float D, float *t_hit)

    {

    float Denom = Dot2D(normal, c);

    Vector2D s;

    PointToVector2D(S, &s);

    if (Denom == 0.0)

    *t_hit = -1.0;

    else

    *t_hit = (D - Dot2D(normal, s))/Denom;

    }

    Giao ca tia sng v hnh trn

    Hnh tr tng ng ng trn (C) bn knh R tm I. Xt s tng giao ca tia sng v ng trn. Ta c:

    Suy ra:

    Hay tng ng:

  • Gio trnh Ha My Tnh 89

    trong , .

    Nghim ca phng trnh (c th l nghim o)

    V d, cho ng trn (x 1)2 + (y 4)2 = 4 v tia sng xut pht t S(8, 9) di chuyn theo vector ch phng c = (-1, -1)t.

    Phng trnh giao im:

    A.t2 + 2B.t + C = 0,

    trong , .

    Suy ra:

    Vy ta giao im l Ph = S + th.c =(8 5, 9 5) = (3, 4).

    Vector phn x:

    Th tc xc nh thi im giao

    void Ray_With_Circle(Point S, Vector c, Point Center, float Rad,float *t_hit)

    {

    float A, B, C, delta;

    Vector tempt;

  • Gio trnh Ha My Tnh 90

    tempt.dx = S.x - Center.x;

    tempt.dy = S.y - Center.y;

    A = Dot2D(c, c);

    B = Dot2D(tempt, c);

    C = Dot2D(tempt, tempt) - Rad*Rad;

    delta = B*B - A*C;

    if (delta < 0.0)

    *t_hit = -1.0;

    else

    *t_hit = (-B - sqrt(delta))/A;

    }

  • Gio trnh Ha My Tnh 91

    Chng 6

    HA BA CHIU

    Ni dung chnh

    Gii thiu ha 3 chiu (3D). Hin th i tng 3D. Cc php bin i Affine 3D c s.

    6.1. Gii thiu ha 3 chiu

    Cc i tng trong th gii thc phn ln l cc i tng 3 chiu cn thit b

    hin th ch 2 chiu. Do vy, mun c hnh nh 3 chiu ta cn phi gi lp. Chin lc

    c bn l chuyn i tng bc. Hnh nh s c hnh thnh t t, ngy cng chi tit hn.

    Qui trnh hin th nh 3 chiu nh sau

    Bin i t h ta i tng sang h ta th gii thc. Mi i tng c

    m t trong mt h ta ring c gi l h ta i tng.

    C 2 cch m hnh ha i tng:

    o Solid modeling: m t cc vt th (k c bn trong). o Boudary representation: ch quan tm n b mt i tng.

    Cc i tng c th c biu din bng m hnh Wire-Frame. Nhn thy rng khi biu din i tng, ta c th chn gc ta v n v o lng sao cho vic biu

    din l thun li nht. Thng th ngi ta chun ha kch thc ca i tng khi biu din. Biu din bin cho php x l nhanh cn silid modeling cho hnh nh y v xc thc hn.

  • Gio trnh Ha My Tnh 92

    o Loi b cc i tng khng nhn thy c: Loi b cc i tng hon

    ton khng th nhn thy trong cnh. Thao tc ny gip ta lc b bt cc i tng khng cn thit do gim chi ph x l.

    o Chiu sng cc i tng: Gn cho cc i tng mu sc da trn cc c

    tnh ca cc cht to nn chng v cc ngun sng tn ti trong cnh. C

    nhiu m hnh chiu sng v to bng : constant-intensity, Interpolate,...

    o Chuyn t word space sang eye space. Thc hin mt php bin i h ta t v tr quan st v gc ta v mt phng quan st v mt v tr

    mong c.

    Hnh nh hin th ph thuc vo v tr quan st v gc nhn.

    H qui chiu c gc t ti v tr quan st v ph hp vi hng nhn s

    thun li cho cc x l tht.

    o Loi b phn nm ngoi: Thc hin vic xn i tng trong cnh cnh

    nm gn trong mt phn khng gian hnh chp ct gii hn vng quan st

    m ta gi l viewing frustum. Viewung frustum c trc trng vi tia nhn,

    kch thc gii hn bi vng ta mun quan st. o Chiu t khng gian nhn xung khng gian mn hnh: Thc hin vic chiu

    cnh 3 chiu t khng gian quan st xung khng gian mn hnh. C 2

    phng php chiu l php chiu song song v php chiu phi cnh. Khi

    chiu ta phi tin hnh vic kh mt khut c th nhn c hnh nh

    trung thc. Kh mt khut cho php xc nh v tr (x, y) trn mn hnh thuc v i tng no trong cnh.

    o Chuyn i tng sang dng pixel.

    o Hin th i tng.

    6.2. Biu din i tng 3 chiu

    Trong ha my tnh, cc i tng lp th c th c m t bng cc b mt ca chng. V d : mt hnh lp phng c xy dng t su mt phng, mt hnh tr

    c xy dng t s kt hp ca mt mt cong v hai mt phng v hnh cu c xy

    dng t ch mt mt cong. Thng thng biu din mt i tng bt k, ngi ta dng phng php xp x a cc mt v dng cc mt a gic.

  • Gio trnh Ha My Tnh 93

    im trong khng gian 3 chiu c ta (x,y,z) m t mt v tr trong khng gian.

    typedef struct { int x;

    int y;

    int z;

    } Point _3D ;

    Vect : xc nh bi 3 ta dx, dy, dz m t mt hng v di ca vc t.

    Vc t khng c v tr trong khng gian.

    222|| dzdydxV ++=

    Tch v hng ca hai vc t

    V1* V

    2 = dx

    1dx

    2 + dy

    1dy

    2 + dz

    1dz

    2

    Hay V1* V

    2 = |V

    1||V

    2| cos

    typedef struct { int dx; int dy; int dz;

    } Vector ;

    on thng trong khng gian 3 chiu: biu din t hp tuyn tnh ca 2 im

    biu din dng tham s ca on thng, ta c :

    P = P1

    + t( P2

    P1

    ) , ( 0 t 1)

    typedef struct { Point P1;

    Point P2;

    } Segment ;

  • Gio trnh Ha My Tnh 94

    Tia (Ray) : l mt on thng vi mt u nm v cc.

    Biu din dng tham s ca tia :

    P = P1

    + t.V , ( 0 t < )

    typedef struct { Point P1;

    Vector V;

    } Ray;

    ng thng (Line): l mt on thng vi c hai u nm v cc

    Biu din dng tham s ca ng thng

    P = P1 + t.V , ( t < )

    typedef struct { Point P1;

    Vector V;

    } Line;

    a gic (Polygon) : l mt vng gii hn bi hn dy cc im ng phng .

    typedef struct { Point *Points;

    int nPoints;

    } Polygon;

    C th biu din mt mt a gic bng mt tp hp cc nh v cc thuc tnh km theo. Khi thng tin ca mi mt a gic c nhp, d liu s c in vo cc bng s c dng cho cc x l tip theo, hin th v bin i.

    Cc bng d liu m t mt a gic c th t chc thnh hai nhm : bng hnh

    hc v bng thuc tnh. Cc bng lu tr d liu hnh hc cha ta cc nh v cc tham s cho bit v nh hng trong khng gian ca mt a gic. Thng tin v thuc

  • Gio trnh Ha My Tnh 95

    tnh ca cc i tng cha cc tham s m t trong sut, tnh phn x v cc thuc

    tnh kt cu ca i tng. Mt cch t chc thun tin lu tr cc d liu hnh hc l to ra 3 danh sch : mt bng lu nh, mt bng lu cnh v mt bng lu a gic.

    Trong :

    o Cc gi tr ta cho mi nh trong i tng c cha trong bng lu nh.

    o Bng cnh cha cc con tr tr n bng nh cho bit nh no c ni vi mt cnh ca a gic.

    o Cui cng l bng lu a gic cha cc con tr tr n bng lu cnh cho

    bit nhng cnh no to nn a gic.

    Mt phng (Plane) :

    typedef struct { Vector N;

    int d; } Plane;

    Phng trnh biu din mt phng c dng : A.x + B.y + C.z + D = 0. Trong (x, y, z) l mt im bt k ca mt phng v A, B, C, D l cc hng s din t thng tin khng gian ca mt phng.

    xc nh phng trnh mt phng, ta ch cn xc nh 3 im khng thng

    hng ca mt phng ny. Nh vy, xc nh phng trnh mt phng qua mt a

    gic, ta s s dng ta ca 3 nh u tin (x1,y1), (x2,y2), (x2,y3) trong a gic ny.

    T phng trnh mt phng trn, ta c:

    A.xk

    + B.yk

    + C.zk

    + D = 0 , k = 0, 1, 2, 3.

    Trong :

  • Gio trnh Ha My Tnh 96

    Khai trin cc nh thc trn ta c :

    A = y1 (z2

    z3) + y2 (z3

    z1) + y3 (z1

    z2)

    B = z1 (x2

    x3) + z2 (x3

    x1) + z3 (x1

    x2)

    C = x1 (y2

    - y3) + x2 (y3

    y1) + x3 (y1

    y2)

    A = - x1 (y2z3

    y3z2) x2 (y3z1

    y1z3) x3 (y1z2

    y2

    z1)

    Hng ca mt phng thng c xc nh thng qua vc t php tuyn ca n. Vc

    t php tuyn n = (A,B,C).

    Hnh 5.15: Mt phng trong khng gian

    M hnh khung ni kt

    Mt phng php thng dng v n gin m hnh ha i tng l m hnh

    khung ni kt. Mt m hnh khung ni kt gm c mt tp cc nh v tp cc cnh

    ni cc nh . Khi th hin bng m hnh ny, cc i tng 3 chiu c v rng v khng ging thc t lm. Tuy nhin, v bng m hnh ny th nhanh nn ngi ta thng dng n trong vic xem phc tho cc i tng. hon thin hn, ngi ta

    dng cc k thut to bng v loi b cc ng khut, mt khut.

  • Gio trnh Ha My Tnh 97

    Vi m hnh khung ni kt, hnh dng ca i tng 3 chiu c biu din bng

    hai danh sch: danh sch cc nh v danh sch cc cnh ni cc nh . Danh sch cc nh cho bit thng tin hnh hc, cn danh sch cc cnh xc nh thng tin v s

    kt ni. Chng ta hy quan st mt vt th ba chiu c biu din bng m hnh

    khung ni kt nh sau:

    Hnh 5.16: M hnh khung kt ni

    Bng danh sch cc cnh v nh biu din vt th

  • Gio trnh Ha My Tnh 98

    Ngi ta c th v cc i tng theo m hnh khung ni kt bng cch s dng cc

    php chiu song song hay php chiu phi cnh s c gii thiu chng 6.

    6.3. Cc php bin i 3 chiu

    6.3.1. H ta bn tay phi - bn tay tri

    H ta theo qui c bn tay phi : bn tay phi sao cho ngn ci hng

    theo trc z, khi nm tay li, cc tay chuyn ng theo hng t trc x n trc y.

    Hnh 5.17: H ta bn tay phi

    H ta ta theo qui c bn tay tri : bn tay phi sao cho ngn ci hng

    theo trc z, khi nm tay li, cc ngn tay chuyn ng theo hng t trc x n

    trc y.

    Hnh 5.18: H ta bn tay tri

    H ta thun nht: Mi im (x