Upload
lydiep
View
217
Download
0
Embed Size (px)
Citation preview
1
CS 430/536 Computer Graphics I
Circle Drawing and Clipping Week 3, Lecture 6
David Breen, William Regli and Maxim Peysakhov Geometric and Intelligent Computing Laboratory
Department of Computer Science Drexel University
http://gicl.cs.drexel.edu
3
Scan Conversion of Circles
• Generalization of the line algorithm
• Assumptions: – circle at (0,0) – Fill 1/8 of the circle,
then use symmetry
Using the 8-way symmetry of a circle:
1994 Foley/VanDam/Finer/Huges/Phillips ICG
Not using the 8-way symmetry of a circle
4
Scan Conversion of Circles
• Implicit representation of the circle function:
• Note: < 0 for points inside the circle, and > 0 for points outside the circle
5
Scan Conversion of Circles • Assume we finished pixel • What pixel to draw next?
(going clockwise) • Note: the slope of the circular
arc is between 0 and –1 – Hence, choice is between:
E and SE • Idea:
If the circle passes above the midpoint M, then we go to E next, otherwise we go to SE
1994 Foley/VanDam/Finer/Huges/Phillips ICG
6
Scan Conversion of Circles
• We need a decision variable D:
• If then M is below the arc, hence the E pixel is closer to the line.
• If then M is above the arc, hence the SE pixel is closer to the line.
1994 Foley/VanDam/Finer/Huges/Phillips ICG
7
Case I: When E is next • What increment for computing a new D? • Next midpoint is:
• Hence, increment by: Pics/Math courtesy of Dave Mount @ UMD-CP
8
Case II: When SE is next • What increment for computing a new D? • Next midpoint is:
• Hence, increment by: Pics/Math courtesy of Dave Mount @ UMD-CP
9
Scan Conversion of Circles
• How to compute the initial value of D: • We start with x = 0 and y = R, so the
first midpoint is at x = 1, y = R-1/2:
10
Scan Conversion of Circles
• Converting this to an integer algorithm: – Need only know if D is positive or negative – D & R are integers – Note D is incremented by an integer value – Therefore D + 1/4 is positive only when D
is positive; it is safe to drop the 1/4 • Hence: set the initial D to 1 – R
(subtracting 1/4)
11
Circle Scan Conversion Algorithm
• Given radius R and center (0, 0) – First point (0, R)
• Initial decision parameter D = 1- R • While x ≤ y
– If (D < 0) • x++; D += 2x + 3;
– else • x++; y--; D += 2(x - y) + 5
– WritePoints(x,y)
13
Clipping Circles
• Accept/Reject test – Does bounding box of
the circle intersect with clipping box?
• If yes, condition pixel write on clipping box inside/outside test
14
Properties of Ellipses
• “Elongated circle” • For all points on
ellipse, sum of distances to foci is constant
d1+ d2 = const • If F1=(x1, y1) and
F2=(x2, y2) then
y
x
d1
d2
P=(x,y)F1
F2
€
(x − x1)2 + (y − y1)
2 + (x − x2)2 + (y − y2)
2 = const
15
Properties of Ellipses
• Equation simplified if ellipse axis parallel to coordinate axis
• Parametric form
y
x
ry
rx
xc
yc
€
x − xcrx
2
+y − ycry
2
=1
€
x = xc + rx cosθy = yc + ry sinθ
16
Symmetry Considerations • 4-way symmetry • Unit steps in x until reach
region boundary • Switch to unit steps in y
(x,y)
ry
rx
(x,-y)
(-x,y)
(-x,-y)
Region1
Region 2
Slope = -1
• Step in x while
• Switch to steps in y when
€
f (x,y) = ry2x 2 + rx
2y 2 − rx2ry
2
dydx
= −ry2xrx2y
dydx
= −1
ry2x = rx
2y
€
ry2x < rx
2y
€
ry2x ≥ rx
2y
17
Midpoint Algorithm (initializing) • Similar to circles • The initial value for region 1
• The initial value for region 2
• We have initial values, now we need the increments
1994 Foley/VanDam/Finer/Huges/Phillips ICG
(x,y)
ryRegion
1Region 2
Slope = -1
€
Dinit1 = f (1,ry − 12)
= ry2 − rx
2ry + 14 rx
2
€
Dinit2 = f (xp + 12 ,yp −1)
= ry2(xp + 1
2)2 + rx
2(yp −1)2 − rx
2ry2
18
Making a Decision
• Computing the decision variable
• If then M is below the arc, hence the E pixel is closer to the line.
• If then M is above the arc, hence the SE pixel is closer to the line.
1994 Foley/VanDam/Finer/Huges/Phillips ICG
€
D = f (xp +1,yp − 12)
= ry2(xp +1)2 + rx
2(yp − 12)2 − rx
2ry2
19
Computing the Increment
1994 Foley/VanDam/Finer/Huges/Phillips ICG
€
Dnew = f (xp + 2,yp − 12)
= ry2(xp + 2)2 + rx
2(yp − 12)2 − rx
2ry2
= Dold + ry2(2xp + 3)
Dnew = f (xp + 2,yp − 32)
= ry2(xp + 2)2 + rx
2(yp − 32)2 − rx
2ry2
= Dold + ry2(2xp + 3) + rx
2(−2yp + 2)
increment =ry2(2xp + 3) Dold < 0
ry2(2xp + 3) + rx
2(−2yp + 2) Dold ≥ 0
E case
SE case
21
Computing the Increment in 2nd Region
• Decision variable in 2nd region
• If then M is left of the arc, hence the SE pixel is closer to the line.
• If then M is right of the arc, hence the S pixel is closer to the line.
1994 Foley/VanDam/Finer/Huges/Phillips ICG
€
D = f (xp + 12 ,yp −1)
= ry2(xp + 1
2)2 + rx
2(yp −1)2 − rx
2ry2
22
Computing the Increment in 2nd Region
1994 Foley/VanDam/Finer/Huges/Phillips ICG
€
Dnew = f (xp + 32 ,yp − 2)
= ry2(xp + 3
2)2 + rx
2(yp − 2)2 − rx
2ry2
= Dold + rx2(−2yp + 3) + ry
2(2xp + 2)
Dnew = f (xp + 12 ,yp − 2)
= ry2(xp + 1
2)2 + rx
2(yp − 2)2 − rx
2ry2
= Dold + rx2(−2yp + 3)
increment =rx2(−2yp + 3) + ry
2(2xp + 2) Dold < 0rx2(−2yp + 3) Dold ≥ 0
SE case
S case
23
Midpoint Algorithm for Ellipses
Set first point to (0,ry) Set the Decision variable to
Loop (x = x+1) If D < 0 then pick E and
If D ≥ 0 then pick SE and
Until
2212ykyDDrxr+=++
2221122ykyxkDDrxrry++=++−
22222211222,222ykykyxkxkxrxrxrryryr++=+=−2222ykxkrxry≥
Set first point to the last computed Set the Decision variable to
Loop (y = y - 1) If D < 0 then pick SE and
If D ≥ 0 then pick S and
Until y < 0 Use symmetry to complete the
ellipse
Region 1 Region 2
€
Dinit1 = ry2 − rx
2ry + 14 rx
2
€
D + = ry2(2xp + 3)
€
D + = ry2(2xp + 3) + rx
2(−2yp + 2)
€
2ry2xk ≥ 2rx
2yk
€
Dinit2 = ry2(xp + 1
2)2 + rx
2(yp −1)2 − rx
2ry
€
D + = ry2(2xp + 2) + rx
2(−2yp + 3)
€
D + = rx2(−2yp + 3)