(self, color)
Use Xiaolin Wu's line algorithm: http://en.wikipedia.org/wiki/Xiaolin_Wu%27s_line_algorithm
        
        function plot(x, y, c) is
            plot the pixel at (x, y) with brightness c (where 0 ≤ c ≤ 1)
        
        function ipart(x) is
            return integer part of x
        
        function round(x) is
            return ipart(x + 0.5)
        
        function fpart(x) is
            return fractional part of x
        
        function rfpart(x) is
            return 1 - fpart(x)
        
        function drawLine(x1,y1,x2,y2) is
            dx = x2 - x1
            dy = y2 - y1
            if abs(dx) < abs(dy) then                 
              swap x1, y1
              swap x2, y2
              swap dx, dy
            end if
            if x2 < x1
              swap x1, x2
              swap y1, y2
            end if
            gradient = dy / dx
            
            // handle first endpoint
            xend = round(x1)
            yend = y1 + gradient * (xend - x1)
            xgap = rfpart(x1 + 0.5)
            xpxl1 = xend  // this will be used in the main loop
            ypxl1 = ipart(yend)
            plot(xpxl1, ypxl1, rfpart(yend) * xgap)
            plot(xpxl1, ypxl1 + 1, fpart(yend) * xgap)
            intery = yend + gradient // first y-intersection for the main loop
            
            // handle second endpoint
            xend = round (x2)
            yend = y2 + gradient * (xend - x2)
            xgap = fpart(x2 + 0.5)
            xpxl2 = xend  // this will be used in the main loop
            ypxl2 = ipart (yend)
            plot (xpxl2, ypxl2, rfpart (yend) * xgap)
            plot (xpxl2, ypxl2 + 1, fpart (yend) * xgap)
            
            // main loop
            for x from xpxl1 + 1 to xpxl2 - 1 do
                plot (x, ipart (intery), rfpart (intery))
                plot (x, ipart (intery) + 1, fpart (intery))
                intery = intery + gradient
        end function
Use Xiaolin Wu's line algorithm: http://en.wikipedia.org/wiki/Xiaolin_Wu%27s_line_algorithm
        
        function plot(x, y, c) is
            plot the pixel at (x, y) with brightness c (where 0 ≤ c ≤ 1)
        
        function ipart(x) is
            return integer part of x
        
        function round(x) is
            return ipart(x + 0.5)
        
        function fpart(x) is
            return fractional part of x
        
        function rfpart(x) is
            return 1 - fpart(x)
        
        function drawLine(x1,y1,x2,y2) is
            dx = x2 - x1
            dy = y2 - y1
            if abs(dx) < abs(dy) then                 
              swap x1, y1
              swap x2, y2
              swap dx, dy
            end if
            if x2 < x1
              swap x1, x2
              swap y1, y2
            end if
            gradient = dy / dx
            
            // handle first endpoint
            xend = round(x1)
            yend = y1 + gradient * (xend - x1)
            xgap = rfpart(x1 + 0.5)
            xpxl1 = xend  // this will be used in the main loop
            ypxl1 = ipart(yend)
            plot(xpxl1, ypxl1, rfpart(yend) * xgap)
            plot(xpxl1, ypxl1 + 1, fpart(yend) * xgap)
            intery = yend + gradient // first y-intersection for the main loop
            
            // handle second endpoint
            xend = round (x2)
            yend = y2 + gradient * (xend - x2)
            xgap = fpart(x2 + 0.5)
            xpxl2 = xend  // this will be used in the main loop
            ypxl2 = ipart (yend)
            plot (xpxl2, ypxl2, rfpart (yend) * xgap)
            plot (xpxl2, ypxl2 + 1, fpart (yend) * xgap)
            
            // main loop
            for x from xpxl1 + 1 to xpxl2 - 1 do
                plot (x, ipart (intery), rfpart (intery))
                plot (x, ipart (intery) + 1, fpart (intery))
                intery = intery + gradient
        end function
Use Xiaolin Wu s line algorithm : http : // en . wikipedia . org / wiki / Xiaolin_Wu%27s_line_algorithm function plot ( x y c ) is plot the pixel at ( x y ) with brightness c ( where 0 ≤ c ≤ 1 ) function ipart ( x ) is return integer part of x function round ( x ) is return ipart ( x + 0 . 5 ) function fpart ( x ) is return fractional part of x function rfpart ( x ) is return 1 - fpart ( x ) function drawLine ( x1 y1 x2 y2 ) is dx = x2 - x1 dy = y2 - y1 if abs ( dx ) < abs ( dy ) then swap x1 y1 swap x2 y2 swap dx dy end if if x2 < x1 swap x1 x2 swap y1 y2 end if gradient = dy / dx // handle first endpoint xend = round ( x1 ) yend = y1 + gradient * ( xend - x1 ) xgap = rfpart ( x1 + 0 . 5 ) xpxl1 = xend // this will be used in the main loop ypxl1 = ipart ( yend ) plot ( xpxl1 ypxl1 rfpart ( yend ) * xgap ) plot ( xpxl1 ypxl1 + 1 fpart ( yend ) * xgap ) intery = yend + gradient // first y - intersection for the main loop // handle second endpoint xend = round ( x2 ) yend = y2 + gradient * ( xend - x2 ) xgap = fpart ( x2 + 0 . 5 ) xpxl2 = xend // this will be used in the main loop ypxl2 = ipart ( yend ) plot ( xpxl2 ypxl2 rfpart ( yend ) * xgap ) plot ( xpxl2 ypxl2 + 1 fpart ( yend ) * xgap ) // main loop for x from xpxl1 + 1 to xpxl2 - 1 do plot ( x ipart ( intery ) rfpart ( intery )) plot ( x ipart ( intery ) + 1 fpart ( intery )) intery = intery + gradient end function
def iter_pixels(self, color):
        """
        Use Xiaolin Wu's line algorithm: http://en.wikipedia.org/wiki/Xiaolin_Wu%27s_line_algorithm
        
        function plot(x, y, c) is
            plot the pixel at (x, y) with brightness c (where 0 ≤ c ≤ 1)
        
        function ipart(x) is
            return integer part of x
        
        function round(x) is
            return ipart(x + 0.5)
        
        function fpart(x) is
            return fractional part of x
        
        function rfpart(x) is
            return 1 - fpart(x)
        
        function drawLine(x1,y1,x2,y2) is
            dx = x2 - x1
            dy = y2 - y1
            if abs(dx) < abs(dy) then                 
              swap x1, y1
              swap x2, y2
              swap dx, dy
            end if
            if x2 < x1
              swap x1, x2
              swap y1, y2
            end if
            gradient = dy / dx
            
            // handle first endpoint
            xend = round(x1)
            yend = y1 + gradient * (xend - x1)
            xgap = rfpart(x1 + 0.5)
            xpxl1 = xend  // this will be used in the main loop
            ypxl1 = ipart(yend)
            plot(xpxl1, ypxl1, rfpart(yend) * xgap)
            plot(xpxl1, ypxl1 + 1, fpart(yend) * xgap)
            intery = yend + gradient // first y-intersection for the main loop
            
            // handle second endpoint
            xend = round (x2)
            yend = y2 + gradient * (xend - x2)
            xgap = fpart(x2 + 0.5)
            xpxl2 = xend  // this will be used in the main loop
            ypxl2 = ipart (yend)
            plot (xpxl2, ypxl2, rfpart (yend) * xgap)
            plot (xpxl2, ypxl2 + 1, fpart (yend) * xgap)
            
            // main loop
            for x from xpxl1 + 1 to xpxl2 - 1 do
                plot (x, ipart (intery), rfpart (intery))
                plot (x, ipart (intery) + 1, fpart (intery))
                intery = intery + gradient
        end function
        """
        def _plot(x, y, c):
            """
            plot the pixel at (x, y) with brightness c (where 0 ≤ c ≤ 1)
            """
            return int(x), int(y), color.get_for_brightness(c)
        dx = self.end_x - self.start_x
        dy = self.end_y - self.start_y
        x1, x2, y1, y2 = self.start_x, self.end_x, self.start_y, self.end_y
        if abs(dx) > abs(dy):
            x1, y1 = y1, x1
            x2, y2 = y2, x2
            dx, dy = dy, dx
        if x2 < x1:
            x1, x2 = x2, x1
            y1, y2 = y2, y1
        
        gradient = fdiv(dy, dx)
        
        xend = round(x1)
        yend = y1 + gradient * (xend - x1)
        xgap = _rfpart(x1 + 0.5)
        xpxl1 = xend 
        ypxl1 = _ipart(yend)
        yield _plot(xpxl1, ypxl1, _rfpart(yend) * xgap)
        yield _plot(xpxl1, ypxl1 + 1, _fpart(yend) * xgap)
        
        intery = yend + gradient
        
        xend = _round(x2)
        yend = y2 + gradient *  (xend - x2)
        xgap = _fpart(x2 + 0.5)
        xpxl2 = xend
        ypxl2 = _ipart(yend)
        yield _plot(xpxl2, ypxl2, _rfpart(yend) * xgap)
        yield _plot(xpxl2, ypxl2 + 1, _fpart(yend) * xgap)
        
        for x in range (xpxl1 + 1, xpxl2 - 1):
            yield _plot(x, _ipart(intery), _rfpart(intery))
            yield _plot(x, _ipart(intery) + 1, _fpart(intery))
            intery += gradient
def iter_pixels ( self , color ) : def _plot ( x , y , c ) : """
            plot the pixel at (x, y) with brightness c (where 0 ≤ c ≤ 1)
            """ return int ( x ) , int ( y ) , color . get_for_brightness ( c ) dx = self . end_x - self . start_x dy = self . end_y - self . start_y x1 , x2 , y1 , y2 = self . start_x , self . end_x , self . start_y , self . end_y if abs ( dx ) > abs ( dy ) : x1 , y1 = y1 , x1 x2 , y2 = y2 , x2 dx , dy = dy , dx if x2 < x1 : x1 , x2 = x2 , x1 y1 , y2 = y2 , y1 gradient = fdiv ( dy , dx ) xend = round ( x1 ) yend = y1 + gradient * ( xend - x1 ) xgap = _rfpart ( x1 + 0.5 ) xpxl1 = xend ypxl1 = _ipart ( yend ) yield _plot ( xpxl1 , ypxl1 , _rfpart ( yend ) * xgap ) yield _plot ( xpxl1 , ypxl1 + 1 , _fpart ( yend ) * xgap ) intery = yend + gradient xend = _round ( x2 ) yend = y2 + gradient * ( xend - x2 ) xgap = _fpart ( x2 + 0.5 ) xpxl2 = xend ypxl2 = _ipart ( yend ) yield _plot ( xpxl2 , ypxl2 , _rfpart ( yend ) * xgap ) yield _plot ( xpxl2 , ypxl2 + 1 , _fpart ( yend ) * xgap ) for x in range ( xpxl1 + 1 , xpxl2 - 1 ) : yield _plot ( x , _ipart ( intery ) , _rfpart ( intery ) ) yield _plot ( x , _ipart ( intery ) + 1 , _fpart ( intery ) ) intery += gradient