computer graphics lecture 3 line & circle drawing
TRANSCRIPT
Computer Graphics
Computer Graphics
Lecture 3
Line & Circle Drawing
Computer Graphics
2
Towards the Ideal Line
• We can only do a discrete approximation
• Illuminate pixels as close to the true path as possible, consider bi-level display only– Pixels are either lit or not lit
Computer Graphics
3
What is an ideal line
• Must appear straight and continuous– Only possible axis-aligned and 45o lines
• Must interpolate both defining end points• Must have uniform density and intensity
– Consistent within a line and over all lines– What about antialiasing?
• Must be efficient, drawn quickly– Lots of them are required!!!
Computer Graphics
4
Simple Line
Based on slope-intercept algorithm from algebra:
y = mx + b
Simple approach:
increment x, solve for y
Floating point arithmetic required
Computer Graphics
5
Does it Work?It seems to work okay for lines with a slope of 1 or less,
but doesn’t work well for lines with slope greater than 1 – lines become more discontinuous in appearance and we must add more than 1 pixel per column to make it work.
Solution? - use symmetry.
Computer Graphics
6
Modify algorithm per octant
OR, increment along x-axis if dy<dx else increment along y-axis
Computer Graphics
7
DDA algorithm
• DDA = Digital Differential Analyser– finite differences
• Treat line as parametric equation in t :
)()(
)()(
121
121
yytyty
xxtxtx
),(
),(
22
11
yx
yxStart point -End point -
Computer Graphics
8
DDA Algorithm
• Start at t = 0
• At each step, increment t by dt
• Choose appropriate value for dt
• Ensure no pixels are missed:– Implies: and
• Set dt to maximum of dx and dy
)()(
)()(
121
121
yytyty
xxtxtx
dt
dyyy
dt
dxxx
oldnew
oldnew
1dt
dx1
dt
dy
12
12
yydy
xxdx
Computer Graphics
9
DDA algorithmline(int x1, int y1, int x2, int y2)
{float x,y;int dx = x2-x1, dy = y2-y1;int n = max(abs(dx),abs(dy));float dt = n, dxdt = dx/dt, dydt = dy/dt;
x = x1;y = y1;while( n-- ) {
point(round(x),round(y));x += dxdt;y += dydt;}
}
n - range of t.
Computer Graphics
10
DDA algorithm
• Still need a lot of floating point arithmetic.– 2 ‘round’s and 2 adds per pixel.
• Is there a simpler way ?
• Can we use only integer arithmetic ?– Easier to implement in hardware.
Computer Graphics
11
Observation on lines.
while( n-- ) {draw(x,y);move right;if( below line )move up;}
Computer Graphics
12
Testing for the side of a line.
• Need a test to determine which side of a line a pixel lies.
• Write the line in implicit form:
0),( cbyaxyxF
•If (b<0) F<0 for points above the line, F>0 for points below.
Computer Graphics
13
Testing for the side of a line.
• Need to find coefficients a,b,c.• Recall explicit, slope-intercept form :
• So:
0),( cbyaxyxF
bxdx
dyybmxy so and
0..),( cydxxdyyxF
Computer Graphics
Decision variable.
PreviousPixel(xp,yp)
Choices forCurrent pixel
Choices forNext pixel
Let’s assume dy/dx < 0.5 (we can use symmetry)
Evaluate F at point M
Referred to as decision variable
)2
1,1( pp yxFd
M
NE
E
Computer Graphics
15
Decision variable.Evaluate d for next pixel, Depends on whether E or NE Is chosen :
If E chosen :
cybxayxFd ppppnew )2
1()2()
2
1,2(
But recall :
cybxa
yxFd
pp
ppold
)2
1()1(
)2
1,1(
So :
dyd
add
old
oldnew
M
E
NE
PreviousPixel
(xp,yp)
Choices forCurrent pixel
Choices forNext pixel
Computer Graphics
16
Decision variable.
If NE was chosen :
cybxayxFd ppppnew )2
3()2()
2
3,2(
So :
dxdyd
badd
old
oldnew
M
E
NE
PreviousPixel
(xp,yp)
Choices forCurrent pixel
Choices forNext pixel
Computer Graphics
17
Summary of mid-point algorithm
• Choose between 2 pixels at each step based upon the sign of a decision variable.
• Update the decision variable based upon which pixel is chosen.
• Start point is simply first endpoint (x1,y1).
• Need to calculate the initial value for d
Computer Graphics
18
Initial value of d.
2
)2
1()1()
2
1,1(
11
1111
bacbyax
cybxayxFdstart
But (x1,y1) is a point on the line, so F(x1,y1) =0
2/dxdydstart
Conventional to multiply by 2 to remove fraction doesn’t effect sign.
2),( 11
bayxF
Start point is (x1,y1)
Computer Graphics
19
Midpoint algorithm
void MidpointLine(int x1,y1,x2,y2)
{
int dx=x2-x1;
int dy=y2-y1;
int d=2*dy-dx;
int increE=2*dy;
int incrNE=2*(dy-dx);
x=x1;
y=y1;
WritePixel(x,y);
while (x < x2) {if (d<= 0) {
d+=incrE;x++
} else {d+=incrNE;x++;y++;
}WritePixel(x,y);
}}
Computer Graphics
20
Circle drawing.• Can also use Bresenham to draw circles.
• Use 8-fold symmetry
Choices forNext pixel
M
E
SE
PreviousPixel
Choices forCurrent pixel
Computer Graphics
21
Circle drawing.
• Implicit form for a circle is:
)32(chosen is E If
)522(chosen is SE If
poldnew
ppoldnew
xdd
yxdd
• Functions are linear equations in terms of (xp,yp)
–Termed point of evaluation
222 )()(),( ryyxxyxf cc
Computer Graphics
22
Summary of line drawing so far.
• Explicit form of line– Inefficient, difficult to control.
• Parametric form of line.– Express line in terms of parameter t– DDA algorithm
• Implicit form of line– Only need to test for ‘side’ of line.– Bresenham algorithm.– Can also draw circles.
Computer Graphics
23
Problems with Bresenham algorithm
• Pixels are drawn as a single line unequal line intensity with change in angle.
Pixel density = n pixels/mm
Pixel density = 2.n pixels/mm
Can draw lines in darker colours according to line direction.-Better solution : antialiasing !-(eg. Gupta-Sproull algorithm)
Computer Graphics
Gupta-Sproull algorithm.• Calculate the distance of the line and the pixel
center
• Adjust the colour according to the distance
Computer Graphics
25
Gupta-Sproull algorithm.
M
NE
Calculate distance using features of mid-point algorithm
DAngle = v
dy
dx
22
cos
dydx
vdx
vD
E
Computer Graphics
Gupta-Sproull algorithm (cont)
Recall from the midpoint algorithm:
So
For pixel E:
So:
fraction) avoid to(doubled 02),( cbyaxyxF
y
1px
v
xp
NE
m
E xp+1
Line to draw
vyp
yp+1
Db
cax
)(
1py py v 1 pyy1px
pp y
b
cxa
)1(
Computer Graphics
Gupta-Sproull algorithm (cont)
From previous slide:
From the midpoint computation,
So:
dxb
pp
yb
cxav
)1(
2/),1()1( pppp yxFcbyxavdx
xp
NE
m
E xp+1
Line to draw
vyp
yp+1
D
Computer Graphics
Gupta-Sproull algorithm (cont)From the midpoint algorithm, we had the decision
variable (remember?)
Going back to our previous equation:
)2
1,()( 1 pp yxFMFd
xp
NE
m
E xp+1
Line to draw
vyp
yp+1
D
),1(2 pp yxFvdx cbyxa pp 22)1(2
cbybxa pp 22/2)2/1(2)1(2 byxF pp )2/1,1(
bMF )( bd dxd
Computer Graphics
Gupta-Sproull algorithm (cont)So,
And the denominator is constant
Since we are blurring the line, we also need to compute the distances to points yp – 1 and yp + 1
vdxdxdxvy
vdxdxdxvy
p
p
22)1(2 1for numerator
22)1(2 1for numerator
222 dydx
dxdD
Computer GraphicsGupta-Sproull algorithm (cont)
If the NE pixel had been chosen:
vdxdxdxvy
vdxdxdxvy
p
p
22)1(2 for numerator
22)1(2 2for numerator
dxd
bd
bMF
byxF
cbybxa
cbyxa
yxFvdx
pp
pp
pp
pp
)(
)2/1,1(
22/2)2/1(2)1(2
2)1(2)1(2
)1,1(2
Computer Graphics
Gupta-Sproull algorithm (cont)• Compute midpoint line algorithm, with the following alterations:
• At each iteration of the algorithm:
– If the E pixel is chosen, set numerator = d + dx
– If the NE pixel is chosen, set numerator = d – dx
– Update d as in the regular algorithm
– Compute D = numerator/denominator
– Color the current pixel according to D
– Compute Dupper = (2dx-2vdx)/denominator
– Compute Dlower = (2dx+2vdx)/denominator
– Color upper and lower accordingly