Unformatted text preview:

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 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 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 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 Y axis X axis y increases by 1 y does not change Integer endpoints Y Y1 Y0 X X1 X0 X1 Y1 0 Y X Y X0 Y0 X slope Y X Which point is closer A yi 1 1 yi 1 B xi 1 y mx b ideal line xi error A yi 1 1 y error B y yi 1 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 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 At the outset we start from point x 0 y0 Thus at step i 1 our formula for d i 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 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 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 Triangle Illustration Non Convex Polygons Bucket Sort Y 0 1 2 3 4 5 6 7 8 10 11 12 13 6 5 XLO 8 7 7 XHI 8 9 10 11 12 9 13 11 14 13 15 15 16 17 17 Handling Corners 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


View Full Document

USF CS 686 - Drawing Lines

Documents in this Course
Load more
Download Drawing Lines
Our administrator received your request to download this document. We will send you the file to your email shortly.
Loading Unlocking...
Login

Join to view Drawing Lines and access 3M+ class-specific study document.

or
We will never post anything without your permission.
Don't have an account?
Sign Up

Join to view Drawing Lines and access 3M+ class-specific study document.

or

By creating an account you agree to our Privacy Policy and Terms Of Use

Already a member?