001         package com.croftsoft.core.awt;
002    
003         import java.awt.*;
004    
005         /*********************************************************************
006         * <P>
007         * Supplementary static methods for the java.awt.Graphics class.
008         * <P>
009         * @version
010         *   1997-04-16
011         * @author
012         *   <a href="https://www.croftsoft.com/">David Wallace Croft</a>
013         *********************************************************************/
014    
015         public final class  GraphicsLib {
016         //////////////////////////////////////////////////////////////////////
017         //////////////////////////////////////////////////////////////////////
018    
019         //////////////////////////////////////////////////////////////////////
020         //////////////////////////////////////////////////////////////////////
021    
022         /*********************************************************************
023         * Coughs a hairball if the targetPoint and the originPoint are equal.
024         *********************************************************************/
025         public static Point [ ]  rasterize (
026           Point  originPoint,
027           Point  targetPoint ) {
028         //////////////////////////////////////////////////////////////////////
029           int  delta_x = targetPoint.x - originPoint.x;
030           int  delta_y = targetPoint.y - originPoint.y;
031    //     if ( ( delta_x == 0 ) && ( delta_y == 0 ) ) return null;
032           Point [ ]  array;
033           int  step = -1;
034           int  y = originPoint.y;
035           int  num_y = delta_y > 0 ? delta_y : -delta_y;
036           if ( delta_x == 0 ) {
037             array = new Point [ num_y ];
038             if ( targetPoint.y > originPoint.y ) step = 1;
039             for ( int  i = 0; i < array.length; i++ ) {
040               y += step;
041               array [ i ] = new Point ( originPoint.x, y );
042             }
043             return array;
044           }
045           int  x = originPoint.x;
046           int  num_x = delta_x > 0 ? delta_x : -delta_x;
047           if ( delta_y == 0 ) {
048             array = new Point [ num_x ];
049             if ( targetPoint.x > originPoint.x ) step = 1;
050             for ( int  i = 0; i < array.length; i++ ) {
051               x += step;
052               array [ i ] = new Point ( x, originPoint.y );
053             }
054             return array;
055           }
056           double  m = ( ( double ) delta_y ) / ( ( double ) delta_x );
057           double  b = y - m * x;
058           if ( num_y > num_x ) {
059             array = new Point [ num_y ];
060             if ( targetPoint.y > originPoint.y ) step = 1;
061             for ( int  i = 0; i < array.length; i++ ) {
062               y += step;
063               double  x_double = ( y - b ) / m;
064               if ( x_double > x + 0.5 ) x++;
065               else if ( x_double < x - 0.5 ) x--;
066               array [ i ] = new Point ( x, y );
067             }
068           } else {
069             array = new Point [ num_x ];
070             if ( targetPoint.x > originPoint.x ) step = 1;
071             for ( int  i = 0; i < array.length; i++ ) {
072               x += step;
073               double  y_double = m * x + b;
074               if ( y_double > y + 0.5 ) y++;
075               else if ( y_double < y - 0.5 ) y--;
076               array [ i ] = new Point ( x, y );
077             }
078           }
079           return array;
080         }
081    
082         //////////////////////////////////////////////////////////////////////
083         //////////////////////////////////////////////////////////////////////
084         }