Top Banner
Circle Drawing Asst. Prof. Dr. Ahmet Sayar Kocaeli University Computer Engineering Advanced Computer Graphics Spring 2012
21

Circle Drawing Asst. Prof. Dr. Ahmet Sayar Kocaeli University Computer Engineering Advanced Computer Graphics Spring 2012.

Mar 26, 2015

Download

Documents

Ashley Grant
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Circle Drawing Asst. Prof. Dr. Ahmet Sayar Kocaeli University Computer Engineering Advanced Computer Graphics Spring 2012.

Circle Drawing

Asst. Prof. Dr. Ahmet SayarKocaeli University

Computer EngineeringAdvanced Computer Graphics

Spring 2012

Page 2: Circle Drawing Asst. Prof. Dr. Ahmet Sayar Kocaeli University Computer Engineering Advanced Computer Graphics Spring 2012.

A circle is a set of points that are all at a given distance r from a center position ( xc , yc ).

For any circle point ( x , y ), this distance relationship is expressed by the Pythagorean theorem in Cartesian coordinates as

We could use this equation to calculate the position of points on a circle circumference by stepping along the x axis in unit steps from xc - r to xc + r and calculating the corresponding y values at each position as

Properties of Circle

Page 3: Circle Drawing Asst. Prof. Dr. Ahmet Sayar Kocaeli University Computer Engineering Advanced Computer Graphics Spring 2012.

A Simple Circle Drawing Algorithm

The equation for a circle is:

where r is the radius of the circle

So, we can write a simple circle drawing algorithm by solving the equation for y at unit x intervals using:

222 ryx

22 xry

Page 4: Circle Drawing Asst. Prof. Dr. Ahmet Sayar Kocaeli University Computer Engineering Advanced Computer Graphics Spring 2012.

Brute Force Method

20020 220 y

20120 221 y

20220 222 y

61920 2219 y

02020 2220 y

Computational cost: floating point multiplications, subtraction, square-root, rounding

Page 5: Circle Drawing Asst. Prof. Dr. Ahmet Sayar Kocaeli University Computer Engineering Advanced Computer Graphics Spring 2012.

Issues on Brute Force Method

Problems in the brute force method– Involves considerable computations at each steps. Lots of float-

point calculations– Spacing between plotted pixel positions is not uniform

Eliminating unequal spacing– Expressing the circle equation in parametric polar form

x= xc+ r cos(alpha), y= yc+ r sin(alpha) for 0o < alpha < 360o

– For a more continuous boundary, set the step size at 1/r

Reducing computation cost– Considering the symmetry of circles– Still require a good deal of computation time for a octant

Page 6: Circle Drawing Asst. Prof. Dr. Ahmet Sayar Kocaeli University Computer Engineering Advanced Computer Graphics Spring 2012.

Common approach

However, unsurprisingly this is not a brilliant solution!Firstly, the resulting circle has large gaps where the slope approaches the verticalSecondly, the calculations are not very efficient

– The square (multiply) operations– The square root operation – try really hard to

avoid these!

We need a more efficient, more accurate solution

Page 7: Circle Drawing Asst. Prof. Dr. Ahmet Sayar Kocaeli University Computer Engineering Advanced Computer Graphics Spring 2012.

Midpoint Circle Algorithm (1/4)

Only need to draw the arc between (0, r) and (r/sqrt(2),r/sqrt(2))

The coordinates of the other pixels can be implied from the 8-way symmetry rule.

45o

Page 8: Circle Drawing Asst. Prof. Dr. Ahmet Sayar Kocaeli University Computer Engineering Advanced Computer Graphics Spring 2012.

Eight-Way Symmetry

The first thing we can notice to make our circle drawing algorithm more efficient is that circles centred at (0, 0) have eight-way symmetry

(x, y)

(y, x)

(y, -x)

(x, -y)(-x, -y)

(-y, -x)

(y, -x)

(-x, y)

2

R

Page 9: Circle Drawing Asst. Prof. Dr. Ahmet Sayar Kocaeli University Computer Engineering Advanced Computer Graphics Spring 2012.

Mid-Point Circle Algorithm

Similarly to the case with lines, there is an incremental algorithm for drawing circles – the mid-point circle algorithm

In the mid-point circle algorithm we use eight-way symmetry so only ever calculate the points for the top right eighth of a circle, and then use symmetry to get the rest of the points

Page 10: Circle Drawing Asst. Prof. Dr. Ahmet Sayar Kocaeli University Computer Engineering Advanced Computer Graphics Spring 2012.

Midpoint Circle Algorithm),( pp yxP E

SE

M

Choose E as the next pixel if M lies inside the circle, and SE otherwise.

d =d<0: Select E

dnew = d + (2xp+3)

d>0: Select SEdnew = d + (2xp–2yp+5)

22

2

2

1)1(

2

1,1 RyxyxF

xp xp+1

y-1/2

d

r2 = x2+y2

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

Page 11: Circle Drawing Asst. Prof. Dr. Ahmet Sayar Kocaeli University Computer Engineering Advanced Computer Graphics Spring 2012.

Choosing the Next Pixel

M

(x, y) (x+1, y)

(x+1, y-1)

E

SE

0)2/1,1( yxF

0)2/1,1( yxF

choose SE

choose E

)2/1,1()( yxFMFddecision variable d

Page 12: Circle Drawing Asst. Prof. Dr. Ahmet Sayar Kocaeli University Computer Engineering Advanced Computer Graphics Spring 2012.

Change of d when E is chosen

Mold

(x, y) (x+1, y)

(x+1, y-1)

E

SE

(x+2, y)

(x+2, y-1)

Mnew

32

)2/1()1(

)2/1()2(222

222

xddd

Ryxd

Ryxd

oldnew

old

new

Page 13: Circle Drawing Asst. Prof. Dr. Ahmet Sayar Kocaeli University Computer Engineering Advanced Computer Graphics Spring 2012.

Change of d when SE is chosen

Mold

(x, y) (x+1, y)E

SE

(x+1, y-2) (x+2, y-2)

Mnew

522

)2/1()1(

)2/3()2(222

222

yxddd

Ryxd

Ryxd

oldnew

old

new

Page 14: Circle Drawing Asst. Prof. Dr. Ahmet Sayar Kocaeli University Computer Engineering Advanced Computer Graphics Spring 2012.

Initial value of d

Rd

RRd

RFd

MFd

4/5

)2/1()1(

)2/1,1(

)(

0

2220

0

00

(0,R)

M0

(1,R)

(1,R-1)

Remember f(x+1,y+1/2) when we talked about midpoint line drawing

Page 15: Circle Drawing Asst. Prof. Dr. Ahmet Sayar Kocaeli University Computer Engineering Advanced Computer Graphics Spring 2012.

Midpoint Circle Algorithm (3/4)

Start with P (x = 0, y = R).

x = 0;y = R;d = 5/4 – R; /* real */While (x < y) {

If (d >= 0) // SE is chosen y = y – 1 d = d + 2 * (x – y) + 5

else // E is chosen d = d + 2 * x + 3

x = x+1; WritePixel(x, y)

}

Where is the arch drawn?

Page 16: Circle Drawing Asst. Prof. Dr. Ahmet Sayar Kocaeli University Computer Engineering Advanced Computer Graphics Spring 2012.

New Decision Variable

Our circle algorithm requires arithmetic with real numbers.

Let’s create a new decision variable kdkd=d-1/4

Substitute kd+1/4 for d in the code.

Note kd > -1/4 can be replaced with h > 0 since kd will always have an integer value.

Page 17: Circle Drawing Asst. Prof. Dr. Ahmet Sayar Kocaeli University Computer Engineering Advanced Computer Graphics Spring 2012.

Midpoint Circle Algorithm

Start with P (x = 0, y = R).

x = 0;y = R;kd = 1 – R;While (x < y) {

If (kd >= 0) // SE is chosen y = y – 1 kd = kd + 2 * (x – y) + 5

else // E is chosen kd = kd + 2 * x + 3

x = x+1; WritePixel(x, y)

}

Page 18: Circle Drawing Asst. Prof. Dr. Ahmet Sayar Kocaeli University Computer Engineering Advanced Computer Graphics Spring 2012.

LINE DRAWING with Midpoint Algorithm

x=xL y=yL

d=xH - xL c=yL - yH

sum=2c+d //initial value // decision param sum is multiplied with 2, act val (c+d/2)draw(x,y)

while ( x < xH) // iterate until reaching the end pointif ( sum < 0 ) // below the line and choose NE

sum += 2dy++

x++sum += 2cdraw(x,y)

Compare this with the algorithm presented in the previous slide

EXPLAIN !

Page 19: Circle Drawing Asst. Prof. Dr. Ahmet Sayar Kocaeli University Computer Engineering Advanced Computer Graphics Spring 2012.

Initial value of decision param: sum

What about starting value?

eydxcyxf LLLL )()1(),1( 21

21

dcyxfyxf LLLL 21

21 ),(),1(

(xL+1,yL+1/2)

dcyxfyxf LLLL 21

21 ),(),1(

is on the line!),( LL yx

dcyxf LL 21

21 ),1(

Sum = 2c + d

Page 20: Circle Drawing Asst. Prof. Dr. Ahmet Sayar Kocaeli University Computer Engineering Advanced Computer Graphics Spring 2012.

Drawing circle in OpenGL

OpenGL does not have any primitives for drawing curves or circles. However we can approximate a circle using a triangle fan like this:

glBegin(GL_TRIANGLE_FAN)

glVertex2f(x1, y1)

for angle# = 0 to 360 step 5

glVertex2f(x1 + sind(angle#) * radius#, y1 + cosd(angle#) * radius#)

next

glEnd()

Page 21: Circle Drawing Asst. Prof. Dr. Ahmet Sayar Kocaeli University Computer Engineering Advanced Computer Graphics Spring 2012.

If you want to use mid-point to draw circle

If you calculate the points on circle through the given mid-point algorithm, then use

glBegin(GL_POINTS)

glVertex2f(x1, y1)

glEnd()