brunoperry

Raster line (Brezanham alghorithm) AS3 implementation

Jul 28th, 2011
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /**
  2.  *
  3.  * Raster line (Brezanham alghorithm) AS3 implementation
  4.  * @param c Number
  5.  * @param x0 int
  6.  * @param x1 int
  7.  * @param y0 int
  8.  * @param y1 int
  9.  *
  10.  * @return void
  11.  *
  12.  * @reference http://en.wikipedia.org/wiki/Bresenham's_line_algorithm
  13.  *
  14.  */
  15. function line( x0:int, y0:int, x1:int, y1:int, c:Number=0x000460 ):void
  16. {
  17.     var Dx:int = x1 - x0;
  18.     var Dy:int = y1 - y0;
  19.              
  20.     var steep:Boolean = Math.abs( Dy ) >= Math.abs( Dx );
  21.  
  22.     if( steep )
  23.     {
  24.         var tmp:Number = x0;
  25.         x0 = y0;
  26.         y0 = tmp;
  27.                
  28.         tmp = x1;
  29.         x1  = y1;
  30.         y1  = tmp;
  31.         //x1^= y1 ^= x0 ^= y0
  32.                
  33.         Dx = x1 - x0;
  34.         Dy = y1 - y0;
  35.     }
  36.            
  37.     var xstep:int = 1;
  38.  
  39.     if( Dx < 0 )
  40.     {
  41.         xstep = -1;
  42.         Dx = -Dx;
  43.     }
  44.            
  45.     var ystep:int = 1;
  46.     if( Dy < 0 )
  47.     {
  48.         ystep = -1;
  49.         Dy = -Dy;
  50.     }
  51.            
  52.     var TwoDy:Number = 2 * Dy;
  53.     var TwoDyTwoDx:Number = TwoDy - 2*Dx;
  54.     var E:int = TwoDy - Dx;
  55.            
  56.     var Y:int = y0;
  57.    
  58.     var xDraw:int;
  59.     var yDraw:int;
  60.            
  61.     for( var X:int = x0; X != x1; X += xstep )
  62.     {
  63.         if ( steep )
  64.         {
  65.                    
  66.             xDraw = Y;
  67.             yDraw = X;
  68.                    
  69.         }
  70.         else
  71.         {
  72.             xDraw = X;
  73.             yDraw = Y;
  74.         }
  75.  
  76.         plot( xDraw, yDraw, c ); //PLOT THE LINE DOT ON YOUR BITMAP DATA
  77.  
  78.         // next
  79.  
  80.         if( E > 0 )
  81.         {
  82.             E += TwoDyTwoDx; //E += 2*Dy - 2*Dx;
  83.             Y = Y + ystep;
  84.         }
  85.         else
  86.         {
  87.             E += TwoDy; //E += 2*Dy;
  88.         }
  89.     }
  90. }
Advertisement
Add Comment
Please, Sign In to add comment