SlideShare a Scribd company logo
1 of 49
Computer Graphics 4:
    Bresenham Line
  Drawing Algorithm,
    Circle Drawing &
       Polygon Filling


 Course Website: http://www.comp.dit.ie/bmacnamee
2
of
39
                                             Contents
     In today’s lecture we’ll have a look at:
        – Bresenham’s line drawing algorithm
        – Line drawing algorithm comparisons
        – Circle drawing algorithms
          • A simple technique
          • The mid-point circle algorithm
        – Polygon fill algorithms
        – Summary of raster drawing algorithms
3
of
39
                                         The Big Idea
     Move across the x axis in unit intervals and
     at each step choose between two different y
     coordinates
                                   For example, from
      5
       (x +1, y +1)
                                   position (2, 3) we
                                   have to choose
          k       k

      4
     (x , y )
      k       k
                                   between (3, 3) and
      3                            (3, 4)
                      (x +1, y )
                                   We would like the
                      k   k

      2
                                   point that is closer to
              2     3      4     5
                                   the original line
4
of
39
5
of
39
6
of
39
       Deriving The Bresenham Line Algorithm

     At sample position xk+1
                              yk+1
     the vertical separations            dupper
                                 y
     from the mathematical                        dlower
                                yk
     line are labelled dupper
     and dlower                      xk+1
     The y coordinate on the mathematical line at
     xk+1 is:
                    y = m( xk + 1) + b
7
of
       Deriving The Bresenham Line Algorithm
39                                  (cont…)
     So, dupper and dlower are given as follows:
                  d lower = y − yk
                          = m( xk + 1) + b − yk
     and:
                d upper = ( yk + 1) − y
                       = yk + 1 − m( xk + 1) − b
     We can use these to make a simple decision
     about which pixel is closer to the mathematical
     line
8
of
       Deriving The Bresenham Line Algorithm
39                                  (cont…)
     This simple decision is based on the difference
     between the two pixel positions:
       d lower − d upper = 2m( xk + 1) − 2 yk + 2b − 1
     Let’s substitute m with ∆y/∆x where ∆x and
     ∆y are the differences between the end-points:
                                      ∆y
       ∆x(d lower   − d upper ) = ∆x(2 ( xk + 1) − 2 yk + 2b − 1)
                                      ∆x
                             = 2∆y ⋅ xk − 2∆x ⋅ yk + 2∆y + ∆x(2b − 1)

                             = 2∆y ⋅ xk − 2∆x ⋅ yk + c
9
of
       Deriving The Bresenham Line Algorithm
39                                  (cont…)
     So, a decision parameter pk for the kth step
     along a line is given by:
                pk = ∆x(d lower − d upper )
                     = 2∆y ⋅ xk − 2∆x ⋅ yk + c
     The sign of the decision parameter pk is the
     same as that of dlower – dupper
     If pk is negative, then we choose the lower
     pixel, otherwise we choose the upper pixel
10
of
       Deriving The Bresenham Line Algorithm
39                                  (cont…)
     Remember coordinate changes occur along
     the x axis in unit steps so we can do
     everything with integer calculations
     At step k+1 the decision parameter is given
     as:
              pk +1 = 2∆y ⋅ xk +1 − 2∆x ⋅ yk +1 + c
     Subtracting pk from this we get:
        pk +1 − pk = 2∆y ( xk +1 − xk ) − 2∆x( yk +1 − yk )
11
of
       Deriving The Bresenham Line Algorithm
39                                  (cont…)
     But, xk+1 is the same as xk+1 so:
             pk +1 = pk + 2∆y − 2∆x( yk +1 − yk )
     where yk+1 - yk is either 0 or 1 depending on
     the sign of pk
     The first decision parameter p0 is evaluated
     at (x0, y0) is given as:
                       p0 = 2∆y − ∆x
12
of
39
                 The Bresenham Line Algorithm
            BRESENHAM’S LINE DRAWING ALGORITHM
                                (for |m| < 1.0)
     1.   Input the two line end-points, storing the left end-point
          in (x0, y0)
     2.   Plot the point (x0, y0)
     3.   Calculate the constants Δx, Δy, 2Δy, and (2Δy - 2Δx)
          and get the first value for the decision parameter as:
                              p0 = 2∆y − ∆x
     4.   At each xk along the line, starting at k = 0, perform the
          following test. If pk < 0, the next point to plot is
          (xk+1, yk) and:
                             pk +1 = pk + 2∆y
13
of
39
          The Bresenham Line Algorithm (cont…)

          Otherwise, the next point to plot is (xk+1, yk+1) and:
                       pk +1 = pk + 2∆y − 2∆x
     5.   Repeat step 4 (Δx – 1) times

     ACHTUNG! The algorithm and derivation
     above assumes slopes are less than 1. for
     other slopes we need to adjust the algorithm
     slightly
14
of
39
                              Bresenham Example
     Let’s have a go at this
     Let’s plot the line from (20, 10) to (30, 18)
     First off calculate all of the constants:
        – Δx: 10
        – Δy: 8
        – 2Δy: 16
        – 2Δy - 2Δx: -4
     Calculate the initial decision parameter p0:
        – p0 = 2Δy – Δx = 6
15
of
39
                    Bresenham Example (cont…)

18                                                        k   pk   (xk+1,yk+1)

17                                                        0

16
                                                          1
                                                          2
15
                                                          3
14
                                                          4
13
                                                          5
12
                                                          6
11                                                        7
10                                                        8

     20   21   22   23 24   25   26   27   28   29   30
                                                          9
16
of
39
                         Bresenham Exercise
     Go through the steps of the Bresenham line
     drawing algorithm for a line going from
     (21,12) to (29,16)
17
of
39
                    Bresenham Exercise (cont…)

18                                                        k   pk   (xk+1,yk+1)

17                                                        0

16                                                        1

15                                                        2
                                                          3
14
                                                          4
13
                                                          5
12
                                                          6
11
                                                          7
10                                                        8
     20   21   22   23 24   25   26   27   28   29   30
18
of
39
          Bresenham Line Algorithm Summary

     The Bresenham line algorithm has the
     following advantages:
       – An fast incremental algorithm
       – Uses only integer calculations
     Comparing this to the DDA algorithm, DDA
     has the following problems:
       – Accumulation of round-off errors can make
         the pixelated line drift away from what was
         intended
       – The rounding operations and floating point
         arithmetic involved are time consuming
19
of
39
         A Simple Circle Drawing Algorithm
     The equation for a circle is:
                      x +y =r
                       2    2    2



     where r is the radius of the circle
     So, we can write a simple circle drawing
     algorithm by solving the equation for y at
     unit x intervals using:
                      y = ± r 2 − x2
20
of
     A Simple Circle Drawing Algorithm
39                            (cont…)

                    y0 = 20 2 − 0 2 ≈ 20

                    y1 = 20 2 − 12 ≈ 20

                    y2 = 20 2 − 2 2 ≈ 20



                    y19 = 20 2 − 19 2 ≈ 6

                    y20 = 20 2 − 20 2 ≈ 0
21
of
              A Simple Circle Drawing Algorithm
39                                     (cont…)
     However, unsurprisingly this is not a brilliant
     solution!
     Firstly, the resulting circle has large gaps
     where the slope approaches the vertical
     Secondly, the calculations are not very
     efficient
        – The square (multiply) operations
        – The square root operation – try really hard to
          avoid these!
     We need a more efficient, more accurate
     solution
22
of
39
                                     Eight-Way Symmetry
     The first thing we can notice to make our circle
     drawing algorithm more efficient is that circles
     centred at (0, 0) have eight-way symmetry
                          (-x, y)      (x, y)


                (-y, x)                          (y, x)

                                           R
                                            2
               (-y, -x)                          (y, -x)


                          (-x, -y)     (x, -y)
23
of
39
                    Mid-Point Circle Algorithm
     Similarly to the case with lines,
     there is an incremental
     algorithm for drawing circles –
     the mid-point circle algorithm
     In the mid-point circle algorithm
     we use eight-way symmetry so
                                         The mid-point circle
     only ever calculate the points      algorithm was
     for the top right eighth of a       developed by Jack
                                         Bresenham, who we
     circle, and then use symmetry       heard about earlier.
     to get the rest of the points       Bresenham’s patent
                                         for the algorithm can
                                         be viewed here.
24
of
39
         Mid-Point Circle Algorithm (cont…)
     Assume that we have
                                               (xk+1, yk)
     just plotted point (xk, yk)   (xk, yk)


     The next point is a
     choice between (xk+1, yk)                (xk+1, yk-1)

     and (xk+1, yk-1)
     We would like to choose
     the point that is nearest to
     the actual circle
     So how do we make this choice?
25
of
39
         Mid-Point Circle Algorithm (cont…)
     Let’s re-jig the equation of the circle slightly
     to give us:
                    f circ ( x, y ) = x 2 + y 2 − r 2
     The equation evaluates as follows:
                      < 0, if ( x, y ) is inside the circle boundary
                      
      f circ ( x, y ) = 0, if ( x, y ) is on the circle boundary
                      > 0, if ( x, y ) is outside the circle boundary
                      
     By evaluating this function at the midpoint
     between the candidate pixels we can make
     our decision
26
of
39
         Mid-Point Circle Algorithm (cont…)
     Assuming we have just plotted the pixel at
     (xk,yk) so we need to choose between (xk+1,yk)
     and (xk+1,yk-1)
     Our decision variable can be defined as:
               pk = f circ ( xk + 1, yk − 1 )
                                           2
                  = ( xk + 1) 2 + ( yk − 1 ) 2 − r 2
                                           2
     If pk < 0 the midpoint is inside the circle and
     and the pixel at yk is closer to the circle
     Otherwise the midpoint is outside and yk-1 is
27
of
39
            Mid-Point Circle Algorithm (cont…)
     To ensure things are as efficient as possible
     we can do all of our calculations
     incrementally
     First consider:
                              (
                 pk +1 = f circ xk +1 + 1, yk +1 − 1
                                                           2
                                                             )
                      = [( xk + 1) + 1] + yk +1 − 1
                                        2
                                                   (             2
                                                                     )   2
                                                                             −r   2

     or:
           pk +1 = pk + 2( xk + 1) + ( y    2
                                            k +1   − y ) − ( yk +1 − yk ) + 1
                                                       2
                                                       k

     where yk+1 is either yk or yk-1 depending on
     the sign of p
28
of
39
         Mid-Point Circle Algorithm (cont…)
     The first decision variable is given as:
                    p0 = f circ (1, r − 1 )
                                         2
                       = 1 + (r − 1 ) 2 − r 2
                                       2
                       = 5 −r
                            4
     Then if pk < 0 then the next decision variable
     is given as:
                     pk +1 = pk + 2 xk +1 + 1
     If pk > 0 then the decision variable is:
                pk +1 = pk + 2 xk +1 + 1 − 2 yk + 1
29
of
39
                 The Mid-Point Circle Algorithm
                  MID-POINT CIRCLE ALGORITHM
     •   Input radius r and circle centre (xc, yc), then set the
         coordinates for the first point on the circumference of a
         circle centred on the origin as:
                            ( x0 , y0 ) = (0, r )
     •   Calculate the initial value of the decision parameter as:
                              p0 = 5 − r
                                    4
     •   Starting with k = 0 at each position xk, perform the
         following test. If pk < 0, the next point along the circle
         centred on (0, 0) is (xk+1, yk) and:
                         pk +1 = pk + 2 xk +1 + 1
30
of
39
          The Mid-Point Circle Algorithm (cont…)

          Otherwise the next point along the circle is (xk+1, yk-1)
          and:
                      pk +1 = pk + 2 xk +1 + 1 − 2 yk +1
     4.   Determine symmetry points in the other seven octants
     5.   Move each calculated pixel position (x, y) onto the
          circular path centred at (xc, yc) to plot the coordinate
          values:
                        x = x + xc       y = y + yc

     6.   Repeat steps 3 to 5 until x >= y
31
of
39
        Mid-Point Circle Algorithm Example
     To see the mid-point circle algorithm in
     action lets use it to draw a circle centred at
     (0,0) with radius 10
32
of
                 Mid-Point Circle Algorithm Example
39                                           (cont…)

10                                            k   pk   (xk+1,yk+1)   2xk+1   2yk+1
9
8
                                              0
7                                             1
6
                                              2
5
4                                             3
3
                                              4
2
1                                             5
0                                             6
     0   1   2   3 4   5   6   7   8   9 10
33
of
39
        Mid-Point Circle Algorithm Exercise
     Use the mid-point circle algorithm to draw
     the circle centred at (0,0) with radius 15
34
of
                Mid-Point Circle Algorithm Example
39                                          (cont…)
16                                                   pk   (xk+1,yk+1)
                                                k                       2xk+1   2yk+1
15
14                                               0
13
                                                 1
12
11                                               2
10                                               3
 9                                               4
 8                                               5
 7
                                                 6
 6
                                                 7
 5
 4                                               8
 3                                               9
 2                                              10
 1                                              11
 0
                                                12
     0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
35
of
39
      Mid-Point Circle Algorithm Summary
     The key insights in the mid-point circle
     algorithm are:
        – Eight-way symmetry can hugely reduce the
          work in drawing a circle
        – Moving in unit steps along the x axis at each
          point along the circle’s edge we need to
          choose between two possible y coordinates
36
of
39
                               Filling Polygons
     So we can figure out how to draw lines and
     circles
     How do we go about drawing polygons?
     We use an incremental algorithm known as
     the scan-line algorithm
37
of
39
          Scan-Line Polygon Fill Algorithm
     10                      Scan Line


     8



     6


     4



     2



      0
             2   4   6   8       10      12   14   16
38
of
39
            Scan-Line Polygon Fill Algorithm
     The basic scan-line algorithm is as follows:
        – Find the intersections of the scan line with all
          edges of the polygon
        – Sort the intersections by increasing x
          coordinate
        – Fill in all pixels between pairs of intersections
          that lie interior to the polygon
39
of
     Scan-Line Polygon Fill Algorithm
39                           (cont…)
40
of
39
                      Line Drawing Summary
     Over the last couple of lectures we have
     looked at the idea of scan converting lines
     The key thing to remember is this has to be
     FAST
     For lines we have either DDA or Bresenham
     For circles the mid-point algorithm
41
of
39
     Anti-Aliasing
42
of
39
     Summary Of Drawing Algorithms
43
of
39
     Mid-Point Circle Algorithm (cont…)

                                6


                                5


                                4


                                3


           1    2    3    4
44
of
39
     Mid-Point Circle Algorithm (cont…)

                                6

               M
                                5


                                4


                                3


           1       2   3   4
45
of
39
     Mid-Point Circle Algorithm (cont…)

                                 6
                         M
                                 5


                                 4


                                 3


           1    2    3       4
46
of
39
     Blank Grid
47
of
39
     Blank Grid
48
of
39
                                               Blank Grid

     10
     9
     8
     7
     6
     5
     4
     3
     2
     1
     0

          0   1   2   3 4   5   6   7   8   9 10
49
of
39
     Blank Grid

More Related Content

What's hot

Lab lecture 1 line_algo
Lab lecture 1 line_algoLab lecture 1 line_algo
Lab lecture 1 line_algosimpleok
 
Circle algorithm
Circle algorithmCircle algorithm
Circle algorithmPooja Dixit
 
Lines and curves algorithms
Lines and curves algorithmsLines and curves algorithms
Lines and curves algorithmsMohammad Sadiq
 
Bressenham’s Midpoint Circle Drawing Algorithm
Bressenham’s Midpoint Circle Drawing AlgorithmBressenham’s Midpoint Circle Drawing Algorithm
Bressenham’s Midpoint Circle Drawing AlgorithmMrinmoy Dalal
 
Ellipses drawing algo.
Ellipses drawing algo.Ellipses drawing algo.
Ellipses drawing algo.Mohd Arif
 
Midpoint circle algo
Midpoint circle algoMidpoint circle algo
Midpoint circle algoMohd Arif
 
Bresenham derivation
Bresenham derivationBresenham derivation
Bresenham derivationKumar
 
Bresenhamcircle derivation
Bresenhamcircle derivationBresenhamcircle derivation
Bresenhamcircle derivationMazharul Islam
 
Lec05 circle ellipse
Lec05 circle ellipseLec05 circle ellipse
Lec05 circle ellipseMaaz Rizwan
 
Circle generation algorithm
Circle generation algorithmCircle generation algorithm
Circle generation algorithmAnkit Garg
 
Computer Graphic - Lines, Circles and Ellipse
Computer Graphic - Lines, Circles and EllipseComputer Graphic - Lines, Circles and Ellipse
Computer Graphic - Lines, Circles and Ellipse2013901097
 
2 3 Bzca5e
2 3 Bzca5e2 3 Bzca5e
2 3 Bzca5esilvia
 
Mid-Point Cirle Drawing Algorithm
Mid-Point Cirle Drawing AlgorithmMid-Point Cirle Drawing Algorithm
Mid-Point Cirle Drawing AlgorithmNeha Kaurav
 
Computer graphics - bresenham line drawing algorithm
Computer graphics - bresenham line drawing algorithmComputer graphics - bresenham line drawing algorithm
Computer graphics - bresenham line drawing algorithmRuchi Maurya
 

What's hot (20)

Bresenham circle
Bresenham circleBresenham circle
Bresenham circle
 
Lab lecture 1 line_algo
Lab lecture 1 line_algoLab lecture 1 line_algo
Lab lecture 1 line_algo
 
Cs580
Cs580Cs580
Cs580
 
Circle algorithm
Circle algorithmCircle algorithm
Circle algorithm
 
Lines and curves algorithms
Lines and curves algorithmsLines and curves algorithms
Lines and curves algorithms
 
Dda line-algorithm
Dda line-algorithmDda line-algorithm
Dda line-algorithm
 
Bressenham’s Midpoint Circle Drawing Algorithm
Bressenham’s Midpoint Circle Drawing AlgorithmBressenham’s Midpoint Circle Drawing Algorithm
Bressenham’s Midpoint Circle Drawing Algorithm
 
Line circle draw
Line circle drawLine circle draw
Line circle draw
 
Ellipses drawing algo.
Ellipses drawing algo.Ellipses drawing algo.
Ellipses drawing algo.
 
Midpoint circle algo
Midpoint circle algoMidpoint circle algo
Midpoint circle algo
 
Bresenham derivation
Bresenham derivationBresenham derivation
Bresenham derivation
 
Computer Graphics
Computer GraphicsComputer Graphics
Computer Graphics
 
Bresenhamcircle derivation
Bresenhamcircle derivationBresenhamcircle derivation
Bresenhamcircle derivation
 
Lec05 circle ellipse
Lec05 circle ellipseLec05 circle ellipse
Lec05 circle ellipse
 
Circle generation algorithm
Circle generation algorithmCircle generation algorithm
Circle generation algorithm
 
Computer Graphic - Lines, Circles and Ellipse
Computer Graphic - Lines, Circles and EllipseComputer Graphic - Lines, Circles and Ellipse
Computer Graphic - Lines, Circles and Ellipse
 
2 3 Bzca5e
2 3 Bzca5e2 3 Bzca5e
2 3 Bzca5e
 
Mid-Point Cirle Drawing Algorithm
Mid-Point Cirle Drawing AlgorithmMid-Point Cirle Drawing Algorithm
Mid-Point Cirle Drawing Algorithm
 
Dda algo notes
Dda algo notesDda algo notes
Dda algo notes
 
Computer graphics - bresenham line drawing algorithm
Computer graphics - bresenham line drawing algorithmComputer graphics - bresenham line drawing algorithm
Computer graphics - bresenham line drawing algorithm
 

Similar to Bresenhams

Lect3 bresenham circlesandpolygons
Lect3 bresenham circlesandpolygonsLect3 bresenham circlesandpolygons
Lect3 bresenham circlesandpolygonsBCET
 
Lecture-4-Scan_Conversion_Bresenhams_Algorithm.ppt
Lecture-4-Scan_Conversion_Bresenhams_Algorithm.pptLecture-4-Scan_Conversion_Bresenhams_Algorithm.ppt
Lecture-4-Scan_Conversion_Bresenhams_Algorithm.pptKhondokarMdMehediHas
 
Bresenham derivation
Bresenham derivationBresenham derivation
Bresenham derivationMuhammad Fiaz
 
Bresenham's line drawing algorithm
Bresenham's line drawing algorithmBresenham's line drawing algorithm
Bresenham's line drawing algorithmnehrurevathy
 
Output Primitive and Brenshamas Line.pptx
Output Primitive and Brenshamas Line.pptxOutput Primitive and Brenshamas Line.pptx
Output Primitive and Brenshamas Line.pptxNaveenaKarthik3
 
Computer graphics LINE DRAWING algorithm.pptx
Computer graphics LINE DRAWING algorithm.pptxComputer graphics LINE DRAWING algorithm.pptx
Computer graphics LINE DRAWING algorithm.pptxR S Anu Prabha
 
Chapter 3 Output Primitives
Chapter 3 Output PrimitivesChapter 3 Output Primitives
Chapter 3 Output PrimitivesPrathimaBaliga
 
Integration techniques
Integration techniquesIntegration techniques
Integration techniquesKrishna Gali
 
Computer graphics lab report with code in cpp
Computer graphics lab report with code in cppComputer graphics lab report with code in cpp
Computer graphics lab report with code in cppAlamgir Hossain
 
Graphics6 bresenham circlesandpolygons
Graphics6 bresenham circlesandpolygonsGraphics6 bresenham circlesandpolygons
Graphics6 bresenham circlesandpolygonsThirunavukarasu Mani
 
Graphics6 bresenham circlesandpolygons
Graphics6 bresenham circlesandpolygonsGraphics6 bresenham circlesandpolygons
Graphics6 bresenham circlesandpolygonsKetan Jani
 
Computer Graphics Unit 2
Computer Graphics Unit 2Computer Graphics Unit 2
Computer Graphics Unit 2SanthiNivas
 
Unit-2 raster scan graphics,line,circle and polygon algorithms
Unit-2 raster scan graphics,line,circle and polygon algorithmsUnit-2 raster scan graphics,line,circle and polygon algorithms
Unit-2 raster scan graphics,line,circle and polygon algorithmsAmol Gaikwad
 
Unit 2
Unit 2Unit 2
Unit 2ypnrao
 

Similar to Bresenhams (20)

Lect3 bresenham circlesandpolygons
Lect3 bresenham circlesandpolygonsLect3 bresenham circlesandpolygons
Lect3 bresenham circlesandpolygons
 
Lecture-4-Scan_Conversion_Bresenhams_Algorithm.ppt
Lecture-4-Scan_Conversion_Bresenhams_Algorithm.pptLecture-4-Scan_Conversion_Bresenhams_Algorithm.ppt
Lecture-4-Scan_Conversion_Bresenhams_Algorithm.ppt
 
bresenham circles and polygons in computer graphics(Computer graphics tutorials)
bresenham circles and polygons in computer graphics(Computer graphics tutorials)bresenham circles and polygons in computer graphics(Computer graphics tutorials)
bresenham circles and polygons in computer graphics(Computer graphics tutorials)
 
Bresenham derivation
Bresenham derivationBresenham derivation
Bresenham derivation
 
Bresenham's line drawing algorithm
Bresenham's line drawing algorithmBresenham's line drawing algorithm
Bresenham's line drawing algorithm
 
Output Primitive and Brenshamas Line.pptx
Output Primitive and Brenshamas Line.pptxOutput Primitive and Brenshamas Line.pptx
Output Primitive and Brenshamas Line.pptx
 
Computer graphics LINE DRAWING algorithm.pptx
Computer graphics LINE DRAWING algorithm.pptxComputer graphics LINE DRAWING algorithm.pptx
Computer graphics LINE DRAWING algorithm.pptx
 
Computer graphics 2
Computer graphics 2Computer graphics 2
Computer graphics 2
 
Integration
IntegrationIntegration
Integration
 
Chapter 3 Output Primitives
Chapter 3 Output PrimitivesChapter 3 Output Primitives
Chapter 3 Output Primitives
 
Integration techniques
Integration techniquesIntegration techniques
Integration techniques
 
Computer graphics lab report with code in cpp
Computer graphics lab report with code in cppComputer graphics lab report with code in cpp
Computer graphics lab report with code in cpp
 
Graphics6 bresenham circlesandpolygons
Graphics6 bresenham circlesandpolygonsGraphics6 bresenham circlesandpolygons
Graphics6 bresenham circlesandpolygons
 
Graphics6 bresenham circlesandpolygons
Graphics6 bresenham circlesandpolygonsGraphics6 bresenham circlesandpolygons
Graphics6 bresenham circlesandpolygons
 
Nis differentiation1
Nis differentiation1Nis differentiation1
Nis differentiation1
 
Computer Graphics Unit 2
Computer Graphics Unit 2Computer Graphics Unit 2
Computer Graphics Unit 2
 
2.circle
2.circle2.circle
2.circle
 
Unit-2 raster scan graphics,line,circle and polygon algorithms
Unit-2 raster scan graphics,line,circle and polygon algorithmsUnit-2 raster scan graphics,line,circle and polygon algorithms
Unit-2 raster scan graphics,line,circle and polygon algorithms
 
Computer Graphics - lines, Circles and ellipse
Computer Graphics - lines, Circles and ellipseComputer Graphics - lines, Circles and ellipse
Computer Graphics - lines, Circles and ellipse
 
Unit 2
Unit 2Unit 2
Unit 2
 

Bresenhams

  • 1. Computer Graphics 4: Bresenham Line Drawing Algorithm, Circle Drawing & Polygon Filling Course Website: http://www.comp.dit.ie/bmacnamee
  • 2. 2 of 39 Contents In today’s lecture we’ll have a look at: – Bresenham’s line drawing algorithm – Line drawing algorithm comparisons – Circle drawing algorithms • A simple technique • The mid-point circle algorithm – Polygon fill algorithms – Summary of raster drawing algorithms
  • 3. 3 of 39 The Big Idea Move across the x axis in unit intervals and at each step choose between two different y coordinates For example, from 5 (x +1, y +1) position (2, 3) we have to choose k k 4 (x , y ) k k between (3, 3) and 3 (3, 4) (x +1, y ) We would like the k k 2 point that is closer to 2 3 4 5 the original line
  • 6. 6 of 39 Deriving The Bresenham Line Algorithm At sample position xk+1 yk+1 the vertical separations dupper y from the mathematical dlower yk line are labelled dupper and dlower xk+1 The y coordinate on the mathematical line at xk+1 is: y = m( xk + 1) + b
  • 7. 7 of Deriving The Bresenham Line Algorithm 39 (cont…) So, dupper and dlower are given as follows: d lower = y − yk = m( xk + 1) + b − yk and: d upper = ( yk + 1) − y = yk + 1 − m( xk + 1) − b We can use these to make a simple decision about which pixel is closer to the mathematical line
  • 8. 8 of Deriving The Bresenham Line Algorithm 39 (cont…) This simple decision is based on the difference between the two pixel positions: d lower − d upper = 2m( xk + 1) − 2 yk + 2b − 1 Let’s substitute m with ∆y/∆x where ∆x and ∆y are the differences between the end-points: ∆y ∆x(d lower − d upper ) = ∆x(2 ( xk + 1) − 2 yk + 2b − 1) ∆x = 2∆y ⋅ xk − 2∆x ⋅ yk + 2∆y + ∆x(2b − 1) = 2∆y ⋅ xk − 2∆x ⋅ yk + c
  • 9. 9 of Deriving The Bresenham Line Algorithm 39 (cont…) So, a decision parameter pk for the kth step along a line is given by: pk = ∆x(d lower − d upper ) = 2∆y ⋅ xk − 2∆x ⋅ yk + c The sign of the decision parameter pk is the same as that of dlower – dupper If pk is negative, then we choose the lower pixel, otherwise we choose the upper pixel
  • 10. 10 of Deriving The Bresenham Line Algorithm 39 (cont…) Remember coordinate changes occur along the x axis in unit steps so we can do everything with integer calculations At step k+1 the decision parameter is given as: pk +1 = 2∆y ⋅ xk +1 − 2∆x ⋅ yk +1 + c Subtracting pk from this we get: pk +1 − pk = 2∆y ( xk +1 − xk ) − 2∆x( yk +1 − yk )
  • 11. 11 of Deriving The Bresenham Line Algorithm 39 (cont…) But, xk+1 is the same as xk+1 so: pk +1 = pk + 2∆y − 2∆x( yk +1 − yk ) where yk+1 - yk is either 0 or 1 depending on the sign of pk The first decision parameter p0 is evaluated at (x0, y0) is given as: p0 = 2∆y − ∆x
  • 12. 12 of 39 The Bresenham Line Algorithm BRESENHAM’S LINE DRAWING ALGORITHM (for |m| < 1.0) 1. Input the two line end-points, storing the left end-point in (x0, y0) 2. Plot the point (x0, y0) 3. Calculate the constants Δx, Δy, 2Δy, and (2Δy - 2Δx) and get the first value for the decision parameter as: p0 = 2∆y − ∆x 4. At each xk along the line, starting at k = 0, perform the following test. If pk < 0, the next point to plot is (xk+1, yk) and: pk +1 = pk + 2∆y
  • 13. 13 of 39 The Bresenham Line Algorithm (cont…) Otherwise, the next point to plot is (xk+1, yk+1) and: pk +1 = pk + 2∆y − 2∆x 5. Repeat step 4 (Δx – 1) times ACHTUNG! The algorithm and derivation above assumes slopes are less than 1. for other slopes we need to adjust the algorithm slightly
  • 14. 14 of 39 Bresenham Example Let’s have a go at this Let’s plot the line from (20, 10) to (30, 18) First off calculate all of the constants: – Δx: 10 – Δy: 8 – 2Δy: 16 – 2Δy - 2Δx: -4 Calculate the initial decision parameter p0: – p0 = 2Δy – Δx = 6
  • 15. 15 of 39 Bresenham Example (cont…) 18 k pk (xk+1,yk+1) 17 0 16 1 2 15 3 14 4 13 5 12 6 11 7 10 8 20 21 22 23 24 25 26 27 28 29 30 9
  • 16. 16 of 39 Bresenham Exercise Go through the steps of the Bresenham line drawing algorithm for a line going from (21,12) to (29,16)
  • 17. 17 of 39 Bresenham Exercise (cont…) 18 k pk (xk+1,yk+1) 17 0 16 1 15 2 3 14 4 13 5 12 6 11 7 10 8 20 21 22 23 24 25 26 27 28 29 30
  • 18. 18 of 39 Bresenham Line Algorithm Summary The Bresenham line algorithm has the following advantages: – An fast incremental algorithm – Uses only integer calculations Comparing this to the DDA algorithm, DDA has the following problems: – Accumulation of round-off errors can make the pixelated line drift away from what was intended – The rounding operations and floating point arithmetic involved are time consuming
  • 19. 19 of 39 A Simple Circle Drawing Algorithm The equation for a circle is: x +y =r 2 2 2 where r is the radius of the circle So, we can write a simple circle drawing algorithm by solving the equation for y at unit x intervals using: y = ± r 2 − x2
  • 20. 20 of A Simple Circle Drawing Algorithm 39 (cont…) y0 = 20 2 − 0 2 ≈ 20 y1 = 20 2 − 12 ≈ 20 y2 = 20 2 − 2 2 ≈ 20 y19 = 20 2 − 19 2 ≈ 6 y20 = 20 2 − 20 2 ≈ 0
  • 21. 21 of A Simple Circle Drawing Algorithm 39 (cont…) However, unsurprisingly this is not a brilliant solution! Firstly, the resulting circle has large gaps where the slope approaches the vertical Secondly, the calculations are not very efficient – The square (multiply) operations – The square root operation – try really hard to avoid these! We need a more efficient, more accurate solution
  • 22. 22 of 39 Eight-Way Symmetry The first thing we can notice to make our circle drawing algorithm more efficient is that circles centred at (0, 0) have eight-way symmetry (-x, y) (x, y) (-y, x) (y, x) R 2 (-y, -x) (y, -x) (-x, -y) (x, -y)
  • 23. 23 of 39 Mid-Point Circle Algorithm Similarly to the case with lines, there is an incremental algorithm for drawing circles – the mid-point circle algorithm In the mid-point circle algorithm we use eight-way symmetry so The mid-point circle only ever calculate the points algorithm was for the top right eighth of a developed by Jack Bresenham, who we circle, and then use symmetry heard about earlier. to get the rest of the points Bresenham’s patent for the algorithm can be viewed here.
  • 24. 24 of 39 Mid-Point Circle Algorithm (cont…) Assume that we have (xk+1, yk) just plotted point (xk, yk) (xk, yk) The next point is a choice between (xk+1, yk) (xk+1, yk-1) and (xk+1, yk-1) We would like to choose the point that is nearest to the actual circle So how do we make this choice?
  • 25. 25 of 39 Mid-Point Circle Algorithm (cont…) Let’s re-jig the equation of the circle slightly to give us: f circ ( x, y ) = x 2 + y 2 − r 2 The equation evaluates as follows: < 0, if ( x, y ) is inside the circle boundary  f circ ( x, y ) = 0, if ( x, y ) is on the circle boundary > 0, if ( x, y ) is outside the circle boundary  By evaluating this function at the midpoint between the candidate pixels we can make our decision
  • 26. 26 of 39 Mid-Point Circle Algorithm (cont…) Assuming we have just plotted the pixel at (xk,yk) so we need to choose between (xk+1,yk) and (xk+1,yk-1) Our decision variable can be defined as: pk = f circ ( xk + 1, yk − 1 ) 2 = ( xk + 1) 2 + ( yk − 1 ) 2 − r 2 2 If pk < 0 the midpoint is inside the circle and and the pixel at yk is closer to the circle Otherwise the midpoint is outside and yk-1 is
  • 27. 27 of 39 Mid-Point Circle Algorithm (cont…) To ensure things are as efficient as possible we can do all of our calculations incrementally First consider: ( pk +1 = f circ xk +1 + 1, yk +1 − 1 2 ) = [( xk + 1) + 1] + yk +1 − 1 2 ( 2 ) 2 −r 2 or: pk +1 = pk + 2( xk + 1) + ( y 2 k +1 − y ) − ( yk +1 − yk ) + 1 2 k where yk+1 is either yk or yk-1 depending on the sign of p
  • 28. 28 of 39 Mid-Point Circle Algorithm (cont…) The first decision variable is given as: p0 = f circ (1, r − 1 ) 2 = 1 + (r − 1 ) 2 − r 2 2 = 5 −r 4 Then if pk < 0 then the next decision variable is given as: pk +1 = pk + 2 xk +1 + 1 If pk > 0 then the decision variable is: pk +1 = pk + 2 xk +1 + 1 − 2 yk + 1
  • 29. 29 of 39 The Mid-Point Circle Algorithm MID-POINT CIRCLE ALGORITHM • Input radius r and circle centre (xc, yc), then set the coordinates for the first point on the circumference of a circle centred on the origin as: ( x0 , y0 ) = (0, r ) • Calculate the initial value of the decision parameter as: p0 = 5 − r 4 • Starting with k = 0 at each position xk, perform the following test. If pk < 0, the next point along the circle centred on (0, 0) is (xk+1, yk) and: pk +1 = pk + 2 xk +1 + 1
  • 30. 30 of 39 The Mid-Point Circle Algorithm (cont…) Otherwise the next point along the circle is (xk+1, yk-1) and: pk +1 = pk + 2 xk +1 + 1 − 2 yk +1 4. Determine symmetry points in the other seven octants 5. Move each calculated pixel position (x, y) onto the circular path centred at (xc, yc) to plot the coordinate values: x = x + xc y = y + yc 6. Repeat steps 3 to 5 until x >= y
  • 31. 31 of 39 Mid-Point Circle Algorithm Example To see the mid-point circle algorithm in action lets use it to draw a circle centred at (0,0) with radius 10
  • 32. 32 of Mid-Point Circle Algorithm Example 39 (cont…) 10 k pk (xk+1,yk+1) 2xk+1 2yk+1 9 8 0 7 1 6 2 5 4 3 3 4 2 1 5 0 6 0 1 2 3 4 5 6 7 8 9 10
  • 33. 33 of 39 Mid-Point Circle Algorithm Exercise Use the mid-point circle algorithm to draw the circle centred at (0,0) with radius 15
  • 34. 34 of Mid-Point Circle Algorithm Example 39 (cont…) 16 pk (xk+1,yk+1) k 2xk+1 2yk+1 15 14 0 13 1 12 11 2 10 3 9 4 8 5 7 6 6 7 5 4 8 3 9 2 10 1 11 0 12 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
  • 35. 35 of 39 Mid-Point Circle Algorithm Summary The key insights in the mid-point circle algorithm are: – Eight-way symmetry can hugely reduce the work in drawing a circle – Moving in unit steps along the x axis at each point along the circle’s edge we need to choose between two possible y coordinates
  • 36. 36 of 39 Filling Polygons So we can figure out how to draw lines and circles How do we go about drawing polygons? We use an incremental algorithm known as the scan-line algorithm
  • 37. 37 of 39 Scan-Line Polygon Fill Algorithm 10 Scan Line 8 6 4 2 0 2 4 6 8 10 12 14 16
  • 38. 38 of 39 Scan-Line Polygon Fill Algorithm The basic scan-line algorithm is as follows: – Find the intersections of the scan line with all edges of the polygon – Sort the intersections by increasing x coordinate – Fill in all pixels between pairs of intersections that lie interior to the polygon
  • 39. 39 of Scan-Line Polygon Fill Algorithm 39 (cont…)
  • 40. 40 of 39 Line Drawing Summary Over the last couple of lectures we have looked at the idea of scan converting lines The key thing to remember is this has to be FAST For lines we have either DDA or Bresenham For circles the mid-point algorithm
  • 41. 41 of 39 Anti-Aliasing
  • 42. 42 of 39 Summary Of Drawing Algorithms
  • 43. 43 of 39 Mid-Point Circle Algorithm (cont…) 6 5 4 3 1 2 3 4
  • 44. 44 of 39 Mid-Point Circle Algorithm (cont…) 6 M 5 4 3 1 2 3 4
  • 45. 45 of 39 Mid-Point Circle Algorithm (cont…) 6 M 5 4 3 1 2 3 4
  • 46. 46 of 39 Blank Grid
  • 47. 47 of 39 Blank Grid
  • 48. 48 of 39 Blank Grid 10 9 8 7 6 5 4 3 2 1 0 0 1 2 3 4 5 6 7 8 9 10
  • 49. 49 of 39 Blank Grid