Circle Drawing Algorithms

18
Nihar Ranjan Roy, https://sites.google.com/site/niharranjanroy/ 1 Circle Drawing Techniques

description

Lecture Notes

Transcript of Circle Drawing Algorithms

Page 1: Circle Drawing Algorithms

Nihar Ranjan Roy,

https://sites.google.com/site/niharranjanroy/

1

Circle Drawing Techniques

Page 2: Circle Drawing Algorithms

Nihar Ranjan Roy,

https://sites.google.com/site/niharranjanroy/

2

Circle Generating Algorithms

» Direct

» Polar coordinate based

» Bresenham’s circle drawing algo

» Mid-point circle drawing algo

Page 3: Circle Drawing Algorithms

Nihar Ranjan Roy,

https://sites.google.com/site/niharranjanroy/

3

Direct Circle Algorithm

Cartesian Coordinates

Circle equation:

( x - xc )2 + ( y - yc )2 = r2

Step along x axis from xc - r to xc + r

and calculate

y = yc ± r2 - ( x - xc )2

(xc,,yc)

r

Xc - r Xc + r

Page 4: Circle Drawing Algorithms

Nihar Ranjan Roy,

https://sites.google.com/site/niharranjanroy/

4

Polar Coordinates

Polar coordinate equation

x = xc + r cos

y = yc + r sin

step through values of

from 0 to 2πr cos

r sin

Page 5: Circle Drawing Algorithms

Nihar Ranjan Roy,

https://sites.google.com/site/niharranjanroy/

5

Optimisation and speed-up

• Symmetry of a

circle can be used

• Calculations of

point Coordinates

only for a first one-

eighth of a circle

(x,y)

(y,x)

(x,-y)

(y,-x)

(-x,y)

(-y,x)

(-y,-x)

(-x,-y)

Page 6: Circle Drawing Algorithms

Nihar Ranjan Roy,

https://sites.google.com/site/niharranjanroy/

6

Mid-Point Circle Drawing Algorithm

D=F(x,y)=x2+y2-r2

Xi Xi+1

Yi

Yi-1

Yi-1/2

D Location

=0 On circle

<0 Inside circle

>0 Outside circle

Page 7: Circle Drawing Algorithms

Nihar Ranjan Roy,

https://sites.google.com/site/niharranjanroy/

7

Mid-Point Circle Drawing Algorithm

D=f(x,y)=x2+y2-r2

Di=f(Xi+1,Yi-1/2)=(Xi+1)2+(Yi-1/2)

2-r2

Di+1=(Xi+1+1)2+(Yi+1-1/2)

2-r2

Now 2 - 1 gives

Di+1=Di+2Xi-(Y2

i+1-Y2i)+(Yi+1-Yi)+3

Xi Xi+1

Yi

Yi-1

Yi-1/2

1

2

Page 8: Circle Drawing Algorithms

Nihar Ranjan Roy,

https://sites.google.com/site/niharranjanroy/

8

Mid-Point Circle Drawing Algorithm….

Di+1=Di+2Xi-(Y2

i+1-Y2i)+(Yi+1-Yi)+3

If Di<0 then

Yi+1=Yi

Di+1=Di+2Xi+3

Else

Yi+1=Yi-1

Di+1=Di+2(Xi-Yi)+5

X++;

Xi Xi+1

Yi

Yi-1

Yi-1/2

Page 9: Circle Drawing Algorithms

Nihar Ranjan Roy,

https://sites.google.com/site/niharranjanroy/

9

Now the initial condition

D0=?

Put Xi=0 and Yi=r in eq. 1

D0= 5/4 – r ≈ 1 - r

Mid-Point Circle Drawing Algorithm…

(0,r)

Page 10: Circle Drawing Algorithms

Nihar Ranjan Roy,

https://sites.google.com/site/niharranjanroy/

10

void midPointCircle(int xc, int yc, int rad, intcol)

//center of circle,radius,

{ int x=0, y=rad, d=1-rad;

putpixel(xc+x, yc+y, col);

while(y>x)

{

if(d<0)

d+=2*x+3;

else

{d+=2*(y-x)+5; y--;}

x++;

putpixel(xc+x, yc+y, col);

}

}

Mid-Point Circle Drawing Algorithm….

Page 11: Circle Drawing Algorithms

PROBLEM

Find all the points in the first quadrant for

radius=10

Nihar Ranjan Roy,

https://sites.google.com/site/niharranjanroy/

11

Page 12: Circle Drawing Algorithms

(x0,y0)=(0,10)

d0=1-r=1-10=-9

Nihar Ranjan Roy,

https://sites.google.com/site/niharranjanroy/

12

Current next

0,10 d<0

d=d+2x+3=-9+2*0+3=-6

(1,10)

(1,10) d<0

d=d+2x+3=-6+2*1+3=-1

(2,10)

(2,10) d<0

d=d+2x+3=-1+2*2+3=6

(3,10)

(3,10) d>0

d=d+2(x-y)+5=6-14+5=-3

(4,9)

(4,9) d<0

d=d+2x+3=-3+2*4+3=8

(5,9)

(5,9) d>0

d=d+2(x-y)+5=8-8+5=5

(6,8)

(6,8) d>0

d=d+2(x-y)+5=5-4+5=5

(7,7)

Page 13: Circle Drawing Algorithms

Nihar Ranjan Roy,

https://sites.google.com/site/niharranjanroy/

13

Bresenhams Circle Drawing Technique

D(T)=(xi+1)2+yi2-r2

D(S)=(xi+1)2+(yi-1)2-r2

D(T)=always positive

D(S)=always negative

di=D(T)+D(S)Xi

Xi+1

Yi

Yi-1

T

S

r

Page 14: Circle Drawing Algorithms

Nihar Ranjan Roy,

https://sites.google.com/site/niharranjanro

y/

14

Bresenhams Circle Drawing Technique

di=D(T)+D(S)

XiXi+1

Yi

Yi-1

T

S

r

di Selection

=0 Choose any

<0 Choose T

>0 Choose S

Page 15: Circle Drawing Algorithms

Nihar Ranjan Roy,

https://sites.google.com/site/niharranjanroy/

15

Bresenhams Circle Drawing Technique

di=D(T)+D(S)

di=2(xi+1)2+yi2+(yi-1)2-2r2

di+1=2(xi+1+1)2+yi+12+(yi+1-1)2-2r2

Now 2 – 1 gives us

di+1=di+4xi+2(y2i+1-y

2i)-2(yi+1-yi)+6

XiXi+1

Yi

Yi-1

T

S

r

1

2

Page 16: Circle Drawing Algorithms

Nihar Ranjan Roy,

https://sites.google.com/site/niharranjanroy/

16

Bresenhams Circle Drawing Technique

di+1=di+4xi+2(y2i+1-y

2i)-2(yi+1-yi)+6

If di<0 then T is chosen so yi+1=yi

di+1=di+4xi+6

Else

S is chosen yi+1=yi-1

di+1=di+4(xi-yi)+10

d0=3-2r by subs xi=0 and yi=r in eq. 1Xi

Xi+1

Yi

Yi-1

T

S

r

Page 17: Circle Drawing Algorithms

Nihar Ranjan Roy,

https://sites.google.com/site/niharranjanroy/

17

Bresenham’s circle algorithm

1. Input radius r

2. Plot a point at (0, r) set x=0 and y=r

3. Calculate the initial decision parameter as d0 = 3-2 r

4. while (x<y)

5. {if (d<0)

6. d=d+4x+6;

7. else

8. {d=d+4(x-y)+10;

9. y--;}

10.x++;

11.}

12.

Page 18: Circle Drawing Algorithms

PROBLEM

Find all the points in the first octant for

radius=10 using Bresenhams circle drawing

technique.

Nihar Ranjan Roy,

https://sites.google.com/site/niharranjanroy/

18