You are on page 1of 29

Bi gi ng h a my tnh (C p nh t thng 9/2009)

Gi ng vin:
ng Nguy n c Ti n V Qu c Hong L Phong

Xt o n th ng c h s gc 0 < m < 1 v Dx > 0. i m c n ch n (xi+1 , yi+1) b c th (i+1) s l m t trong hai tr ng h p nh hnh v sau:

HCMUS - 2009

Bi gi ng

h a my tnh

ng Nguy n

c Ti n - V Qu c Hong - L Phong

HCMUS - 2009

Bi gi ng

h a my tnh

ng Nguy n

c Ti n - V Qu c Hong - L Phong

[2.5] Ng i ta c th c i thi n t c ci t thu t ton v o n th ng b ng cch ch c n v m t n a o n th ng, ph n cn l i l y i x ng n a o n th ng v . Hy ci t minh h a trn gi y v i thu t ton Bresenham/MidPoint. Gi s i m u l x1, y1, i m cu i l x2, y2 v ta c 0 < (y2 y1)/(x2 x1) 1, x1 > x2. Th i gian: 30 pht.

HCMUS - 2009

Bi gi ng

h a my tnh

ng Nguy n

c Ti n - V Qu c Hong - L Phong

void LineBres (int x1, int y1, int x2, int y2) { int Dx, Dy, p, Const1, Const2; int x, y; Dx = x2 - x1; Dy = y2 - y1; p = 2*Dy Dx; [2.5] Ng i ta c th c i thi n t c Const1 = 2*Dy; Const2 = 2*(Dy-Dx); ci t thu t ton v o n th ng b ng cch ch c n v m t x = x1; y = y1; n a o n th ng, ph n cn l i l y putpixel(x, y, Color); i x ng n a o n th ng v . for(i=x1; i<x2; i++){ Hy ci t minh h a trn gi y v i thu t ton if (p<0) Bresenham/MidPoint. Gi s i m p += Const1; u l x1, y1, i m cu i l x2, y2 v ta c else{ 0 < (y2 y1)/(x2 x1) 1, p += Const2; x1 > x2. y++; } x++; putpixel(x, y, Color); } } // LineBres
HCMUS - 2009 Bi gi ng h a my tnh ng Nguy n c Ti n - V Qu c Hong - L Phong 5

void LineBres (int x1, int y1, int x2, int y2) { int Dx, Dy, p, Const1, Const2; int x, y; Dx = x2 - x1; Dy = y2 - y1; p = 2*Dy Dx; [2.5] Ng i ta c th c i thi n t c Const1 = 2*Dy; Const2 = 2*(Dy-Dx); ci t thu t ton v o n th ng b ng cch ch c n v m t x = x1; y = y1;// x = x2; y = y2; n a o n th ng, ph n cn l i l y putpixel(x, y, Color); i x ng n a o n th ng v . for(i=x1; i<x2; i++){ Hy ci t minh h a trn gi y v i thu t ton if (p<0) Bresenham/MidPoint. Gi s i m p += Const1; u l x1, y1, i m cu i l x2, y2 v ta c else{ 0 < (y2 y1)/(x2 x1) 1, p += Const2; x1 > x2. y--; y++; } x--; x++; putpixel(x, y, Color); } } // LineBres
HCMUS - 2009 Bi gi ng h a my tnh ng Nguy n c Ti n - V Qu c Hong - L Phong 6

HCMUS - 2009

Bi gi ng

h a my tnh

ng Nguy n

c Ti n - V Qu c Hong - L Phong

void circleSym4(int R) { r2 = R * R; putPixel(0, R); putPixel(0, -R); for (x = 1; x <= R; x++) { y = round(sqrt(r2 - x*x)); putPixel(x, y); putPixel(x, -y); putPixel(-x, y); putPixel(-x, -y); } }
HCMUS - 2009 Bi gi ng h a my tnh ng Nguy n c Ti n - V Qu c Hong - L Phong 8

void circleSym8(int R) { r2 = R * R; putPixel(0, R); putPixel(0, -R); putPixel(R, 0); putPixel(-R, 0); x = 1; y = round(sqrt(r2 - x*x)); while (x < y) { putPixel(x, y); putPixel(x, -y); putPixel(-x, y); putPixel(-x, -y); putPixel(y, x); putPixel(y, -x); putPixel(-y, x); putPixel(-y, -x); x++ y = round(sqrt(r2 - x*x)); } }
HCMUS - 2009 Bi gi ng h a my tnh ng Nguy n c Ti n - V Qu c Hong - L Phong 9

HCMUS - 2009

Bi gi ng

h a my tnh

ng Nguy n

c Ti n - V Qu c Hong - L Phong

10

HCMUS - 2009

Bi gi ng

h a my tnh

ng Nguy n

c Ti n - V Qu c Hong - L Phong

11

HCMUS - 2009

Bi gi ng

h a my tnh

ng Nguy n

c Ti n - V Qu c Hong - L Phong

12

HCMUS - 2009

Bi gi ng

h a my tnh

ng Nguy n

c Ti n - V Qu c Hong - L Phong

13

HCMUS - 2009

Bi gi ng

h a my tnh

ng Nguy n

c Ti n - V Qu c Hong - L Phong

14

p0 = ?

HCMUS - 2009

Bi gi ng

h a my tnh

ng Nguy n

c Ti n - V Qu c Hong - L Phong

15

void CircleMidPoint (int R) { x = 0; y = R; Put8Pixels(x, y); p = 1 - R; // 5/4-R Gi i thch t i sao? while (x < y){ if (p < 0) { p += 2*x + 3; } else { p += 2*(x -y) + 5; y--; } x++; Put8Pixels(x, y); } } // CircleMidPoint
HCMUS - 2009 Bi gi ng h a my tnh ng Nguy n c Ti n - V Qu c Hong - L Phong 16

ng trn tm I(0, 0), bn knh R = 15


i 0 1 2 3 4 5 6 7 8 9 10 11 xi 0 1 2 3 4 5 6 7 8 9 10 11
h a my tnh

yi 15 15 15 15 14 14 14 13 13 12 11 10

pi -14 -11 -6 1 -18 -7 6 -5 12 7 6 9


ng Nguy n

Tnh ton 1-15 -14+2.0+3 -11+2.1+3 -6+2.2+3 1+2.(3-15)+5 -18+2.4+3 -7+2.5+3 6+2.(6-14)+5 -5+2.7+3 12+2.(8-13)+5 7+2.(9-12)+5 9+2.(10-11)+5
c Ti n - V Qu c Hong - L Phong 17

HCMUS - 2009

Bi gi ng

HCMUS - 2009

Bi gi ng

h a my tnh

ng Nguy n

c Ti n - V Qu c Hong - L Phong

18

i 0 1 2 3 4 5 6 7 8 9 10 11

xi 0 1 2 3 4 5 6 7 8 9 10 11

yi 15 15 15 15 14 14 14 13 13 12 11 10

pi -14 -11 -6 1 -18 -7 6 -5 12 7 6 9

Tnh ton 1-15 -14+2.0+3 -11+2.1+3 -6+2.2+3 1+2.(3-15)+5 -18+2.4+3 -7+2.5+3 6+2.(6-14)+5 -5+2.7+3 12+2.(8-13)+5 7+2.(9-12)+5 9+2.(10-11)+5

Delta1 3 5 7 9 11 13 15 17 19 21 23 25

Delta2 -25 -23 -21 -19 -15 -13 -11 -7 -5 -1 3 7

HCMUS - 2009

Bi gi ng

h a my tnh

ng Nguy n

c Ti n - V Qu c Hong - L Phong

19

x = 0; y = r; p = 1-r; Delta1 = 2*x+3; Delta2 = 2*(x-y)+5; Put8Pixel(x,y); while (x<y){ if (p<0) { p += Delta1; } else { p += Delta2; Delta2 += 2; y--; } x++; Delta1 += 2; Delta2 += 2; Put8Pixel(x,y); }

HCMUS - 2009

Bi gi ng

h a my tnh

ng Nguy n

c Ti n - V Qu c Hong - L Phong

20

HCMUS - 2009

Bi gi ng

h a my tnh

ng Nguy n

c Ti n - V Qu c Hong - L Phong

21

HCMUS - 2009

Bi gi ng

h a my tnh

ng Nguy n

c Ti n - V Qu c Hong - L Phong

22

HCMUS - 2009

Bi gi ng

h a my tnh

ng Nguy n

c Ti n - V Qu c Hong - L Phong

23

HCMUS - 2009

Bi gi ng

h a my tnh

ng Nguy n

c Ti n - V Qu c Hong - L Phong

24

Cng th c t ng qut c a Ellipse l: b2x2 + a2y2 - a2b2 = 0

HCMUS - 2009

Bi gi ng

h a my tnh

ng Nguy n

c Ti n - V Qu c Hong - L Phong

25

p = b2 - a2*b + a2/4; Const1 = 2*b2; Const2 = 2*a2; MaxX = a2/sqrt(a2+b2)); x = 0; y = b; Delta2 = 2*a2*(1-y)+b2*(2*x+3); Delta1 = b2*(2*x+3); Put4Pixel(x,y); while (x<MaxX){ if (p>=0){ p += Delta2; Delta2 += Const2; y--; } else { p += Delta1; } Delta2+=Const1; Delta1+=Const1; x++; Put4Pixel(x,y); }
HCMUS - 2009 Bi gi ng h a my tnh ng Nguy n c Ti n - V Qu c Hong - L Phong 26

1. [2.8] S d ng t ng thu t ton Bresenham, xy d ng thu t ton v ng trn c tm l g c t a , bn knh R. 2. Trong ph ng php v ng trn theo Bresenham v MidPoint, thu t ton no c l i h n? Gi i thch.

HCMUS - 2009

Bi gi ng

h a my tnh

ng Nguy n

c Ti n - V Qu c Hong - L Phong

27

3. * Hy a ra thu t ton cho php v ng cong b c 3 thng qua 4 i m phn bi t. Trong : m i i m p trn ng gi a 2 i m cho tr c th i v (i+1) c t a : P = (xi(t), yi(t)). Trong :

V i t [0, 1].

HCMUS - 2009

Bi gi ng

h a my tnh

ng Nguy n

c Ti n - V Qu c Hong - L Phong

28

HCMUS - 2009

Bi gi ng

h a my tnh

ng Nguy n

c Ti n - V Qu c Hong - L Phong

29

You might also like