Circle Drawing Algorithms
-
Upload
niharranjanroy -
Category
Documents
-
view
212 -
download
0
description
Transcript of Circle Drawing Algorithms
Nihar Ranjan Roy,
https://sites.google.com/site/niharranjanroy/
1
Circle Drawing Techniques
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
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
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
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)
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
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
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
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)
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….
PROBLEM
Find all the points in the first quadrant for
radius=10
Nihar Ranjan Roy,
https://sites.google.com/site/niharranjanroy/
11
(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)
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
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
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
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
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.
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