drawing lines n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Drawing Lines PowerPoint Presentation
Download Presentation
Drawing Lines

Loading in 2 Seconds...

play fullscreen
1 / 17

Drawing Lines - PowerPoint PPT Presentation


  • 82 Views
  • Uploaded on

Drawing Lines. The Bresenham Algorithm for drawing lines and filling polygons. Plotting a line-segment. Bresenham published algorithm in 1965 It was originally to be used with a plotter It adapts well to raster “scan conversion” It uses only integer arithmetic operations

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Drawing Lines' - delila


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
drawing lines

Drawing Lines

The Bresenham Algorithm for drawing lines and filling polygons

plotting a line segment
Plotting a line-segment
  • Bresenham published algorithm in 1965
  • It was originally to be used with a plotter
  • It adapts well to raster “scan conversion”
  • It uses only integer arithmetic operations
  • It is an “iterative” algorithm: each step is based on results from the previous step
  • The sign of an “error term” governs the choice among two alternative actions
scan conversion
Scan conversion

The actual line is comprised of points drawn from a continuum,

but it must be “approximated” using pixels from a discrete grid.

the various cases
The various cases
  • Horizontal or vertical lines are easy cases
  • Lines that have slope 1 or -1 are easy, too
  • Symmetries leave us one remaining case: 0 < slope < 1
  • As x-coodinate is incremented, there are just two possibilities for the y-coordinate: (1) y-coordinate is increased by one; or (2) y-coordinate remains unchanged
0 slope 1
0 < slope < 1

Y-axis

X-axis

y increases by 1

y does not change

integer endpoints
Integer endpoints

ΔY = Y1 – Y0

ΔX = X1 – X0

(X1,Y1)

0 < ΔY < ΔX

ΔY

(X0,Y0)

ΔX

slope = ΔY/ΔX

which point is closer
Which point is closer?

y = mx + b

A

yi -1+1

yi -1

B

ideal line

xi

xi -1

error(A) = (yi -1 + 1) – y*

error(B) = y* - (yi -1)

the decision variable
The Decision Variable
  • Choose B if and only if error(B)<error(A)
  • Or equivalently: error(B) – error(A) < 0
  • Formula: error(B) – error(A) = 2m(xi – x0) + 2(y0 – yi -1) -1
  • Remember: m = Δy/Δx (slope of line)
  • Multiply through by Δx (to avoid fractions)
  • Let di = Δx( error(B) – error(A) )
  • Rule is: choose B if and only if di < 0
computing d i 1 from d i
Computing di+1 from di

di+1 = 2(Δy)(xi+1 – x0) +2(Δx)(y0 – yi) – Δx

di = 2(Δy)(xi – x0) + 2(Δx)(y0 – yi-1) – Δx

The difference can be expressed as:

di+1 = di + 2(Δy)(xi+1 – xi) – 2(Δy)(yi – yi-1)

Recognize that xi+1 – xi = 1 at every step

And also: yi – yi-1 will be either 0 or 1

(depending on the sign of the previous d)

how does algorithm start
How does algorithm start?
  • At the outset we start from point (x0,y0)
  • Thus, at step i =1, our formula for di is: d1 = 2(Δy) - Δx
  • And, at each step thereafter:

if ( d i < 0 ) { di+1 = di + 2(Δy); yi+1 = yi; }

else { di+1 = di + 2(Δy-Δx); yi+1 = yi + 1; }

xi+1 = xi + 1;

bresdemo cpp
‘bresdemo.cpp’
  • The example-program is on class website:

http://nexus.cs.usfca.edu/~cruse/cs686/

  • It draws line-segments with various slopes
  • The Michener algorithm (for a circle-fill) is also included, for comparative purposes
  • Extreme slopes (close to zero or infinity) are not displayed in this demo program
  • They can be added by you as an exercise
filling a triangle or polygon
Filling a triangle or polygon
  • The Bresenham’s method can be adapted
  • But an efficient data-structure is needed
  • All the sides need to be handled together
  • We let the y-coordinate steadily increment
  • For sides which are “nearly horizontal” the x-coordinates can change by more than 1
bucket sort
Bucket-Sort

Y

0

XLO

XHI

1

2

8

8

3

7

9

4

6

10

5

5

11

6

7

12

7

9

13

8

11

14

10

13

15

11

15

16

12

17

17

13

in class exercises
In-class exercises
  • For the ‘bresdemo.cpp’ program:
    • Supply a function that tests the capability of the Breshenham line-drawing algorithm to draw lines having the full range of slopes
  • For the ‘fillpoly.cpp’ program:
    • Modify the program code so that it will work with polygons having more than three sides