; ono-lines.lsp 11june2009 dmemos ( define ( vertical_line x y1 y2 ) ( for ( y y1 y2 ) ( point x y ))) ( define ( horizontal_line x1 x2 y ) ( for ( x x1 x2 ) ( point x y ))) ( define (normal_line x1 y1 x2 y2 ) ( set 'dm (div ( sub y2 y1 ) ( sub x2 x1 ))) ( if (<= (abs dm ) 1 ) ( begin ; flat line ( set 'y y1 ) ( if ( > x1 x2 ) ( set 'dm (sub dm ))) ( for ( x x1 x2 ) ( point x y ) ( set 'y ( add y dm )))) ( begin ; steep line ( set 'dm ( div 1 dm )) ( set 'x x1 ) ( if ( > y1 y2 ) ( set 'dm (sub dm ))) ( for ( y y1 y2 ) ( point x y ) ( set 'x ( add x dm )))))) ( define ( line x1 y1 x2 y2 ) ( if ( = x1 x2 ) ( if ( = y1 y2 ) ( point x1 y1 ) ( vertical_line x1 y1 y2 )) ( if ( = y1 y2 ) ( horizontal_line x1 x2 y1 ) ( normal_line x1 y1 x2 y2 )))) ( define ( drawline plist ) ( line ( plist 0 ) ( plist 1 ) ( plist 2 ) ( plist 3 ))) ( define ( drawpath plist ) ( for ( i 0 (- ( length plist ) 4) 2 ) ( drawline ( i 4 plist ) ))) ( define ( drawpolygon plist ) ( drawpath plist ) ( line ( plist -2) (plist -1 ) (plist 0 ) ( plist 1)))