Computer Graphics - PowerPoint PPT Presentation

About This Presentation
Title:

Computer Graphics

Description:

Computer Graphics Lecture 3 Line & Circle Drawing Gupta-Sproull algorithm. Calculate the distance of the line and the pixel center Adjust the colour according to the ... – PowerPoint PPT presentation

Number of Views:387
Avg rating:3.0/5.0
Slides: 32
Provided by: McK109
Category:

less

Transcript and Presenter's Notes

Title: Computer Graphics


1
Computer Graphics
  • Lecture 3
  • Line Circle Drawing

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

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!!!

4
Simple Line
Based on slope-intercept algorithm from algebra
y mx b Simple approach
increment x, solve for y Floating point
arithmetic required
5
Does 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.
6
Modify algorithm per octant
OR, increment along x-axis if dyltdx else
increment along y-axis
7
DDA algorithm
  • DDA Digital Differential Analyser
  • finite differences
  • Treat line as parametric equation in t

Start point - End point -
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

9
DDA 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.
10
DDA 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.

11
Observation on lines.
while( n-- ) draw(x,y) move right if( below
line ) move up
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
  • If (blt0) Flt0 for points above the line, Fgt0 for
    points below.

13
Testing for the side of a line.
  • Need to find coefficients a,b,c.
  • Recall explicit, slope-intercept form
  • So

14
Decision 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
15
Decision 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
16
Decision variable.
If NE was chosen
M
NE
E
Previous Pixel (xp,yp)
Choices for Next pixel
Choices for Current pixel
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

18
Initial 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.
19
Midpoint 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)
20
Circle 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
21
Circle drawing.
  • Implicit form for a circle is
  • Functions are linear equations in terms of
    (xp,yp)
  • Termed point of evaluation

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.

22
23
Problems 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
24
Gupta-Sproull algorithm.
  • Calculate the distance of the line and the pixel
    center
  • Adjust the colour according to the distance

25
Gupta-Sproull algorithm.
Calculate distance using features of mid-point
algorithm
dy
NE
dx
Angle ?
v
M
D
E
26
Gupta-Sproull algorithm (cont)
  • Recall from the midpoint algorithm
  • So
  • For pixel E
  • So

27
Gupta-Sproull algorithm (cont)
  • From previous slide
  • From the midpoint computation,
  • So

28
Gupta-Sproull algorithm (cont)
  • From the midpoint algorithm, we had the decision
    variable (remember?)
  • Going back to our previous equation

29
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

30
Gupta-Sproull algorithm (cont)
  • If the NE pixel had been chosen

31
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 (2dx2vdx)/denominator
  • Color upper and lower accordingly
Write a Comment
User Comments (0)
About PowerShow.com