Title: Computer Graphics
1Computer Graphics
- Lecture 3
- Line Circle Drawing
2Towards 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
3What 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!!!
4Simple Line
Based on slope-intercept algorithm from algebra
y mx b Simple approach
increment x, solve for y Floating point
arithmetic required
5Does it Work?
It seems to work okay for lines with a slope of
1 or less, but doesnt 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.
6Modify algorithm per octant
OR, increment along x-axis if dyltdx else
increment along y-axis
7DDA algorithm
- DDA Digital Differential Analyser
- finite differences
- Treat line as parametric equation in t
Start point - End point -
8DDA 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
9DDA algorithm
line(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.
10DDA algorithm
- Still need a lot of floating point arithmetic.
- 2 rounds and 2 adds per pixel.
- Is there a simpler way ?
- Can we use only integer arithmetic ?
- Easier to implement in hardware.
11Observation on lines.
while( n-- ) draw(x,y) move right if( below
line ) move up
12Testing 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
- If (blt0) Flt0 for points above the line, Fgt0 for
points below.
13Testing for the side of a line.
- Need to find coefficients a,b,c.
- Recall explicit, slope-intercept form
- So
14Decision variable.
Lets assume dy/dx lt 0.5 (we can use
symmetry) Evaluate F at point M Referred to as
decision variable
NE
M
E
Previous Pixel (xp,yp)
Choices for Current pixel
Choices for Next pixel
15Decision variable.
Evaluate d for next pixel, Depends on whether E
or NE Is chosen If E chosen
NE
M
E
Previous Pixel (xp,yp)
Choices for Next pixel
Choices for Current pixel
16Decision variable.
If NE was chosen
M
NE
E
Previous Pixel (xp,yp)
Choices for Next pixel
Choices for Current pixel
17Summary 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
18Initial value of d.
Start point is (x1,y1)
But (x1,y1) is a point on the line, so F(x1,y1) 0
Conventional to multiply by 2 to remove fraction
? doesnt effect sign.
19Midpoint algorithm
- void MidpointLine(int x1,y1,x2,y2)
-
- int dxx2-x1
- int dyy2-y1
- int d2dy-dx
- int increE2dy
- int incrNE2(dy-dx)
- xx1
- yy1
- WritePixel(x,y)
while (x lt x2) if (dlt 0) dincrE x
else dincrNE x y WritePixel
(x,y)
20Circle drawing.
- Can also use Bresenham to draw circles.
- Use 8-fold symmetry
E
M
SE
Previous Pixel
Choices for Next pixel
Choices for Current pixel
21Circle drawing.
- Implicit form for a circle is
- Functions are linear equations in terms of
(xp,yp) - Termed point of evaluation
22Summary 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.
22
23Problems with Bresenham algorithm
- Pixels are drawn as a single line ? unequal line
intensity with change in angle.
Pixel density ?2.n pixels/mm
- Can draw lines in darker colours according to
line direction. - Better solution antialiasing !
- (eg. Gupta-Sproull algorithm)
Pixel density n pixels/mm
24Gupta-Sproull algorithm.
- Calculate the distance of the line and the pixel
center - Adjust the colour according to the distance
25Gupta-Sproull algorithm.
Calculate distance using features of mid-point
algorithm
dy
NE
dx
Angle ?
v
M
D
E
26Gupta-Sproull algorithm (cont)
- Recall from the midpoint algorithm
- So
- For pixel E
- So
27Gupta-Sproull algorithm (cont)
- From previous slide
- From the midpoint computation,
- So
28Gupta-Sproull algorithm (cont)
- From the midpoint algorithm, we had the decision
variable (remember?) - Going back to our previous equation
29Gupta-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
30Gupta-Sproull algorithm (cont)
- If the NE pixel had been chosen
31Gupta-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 (2dx2vdx)/denominator
- Color upper and lower accordingly