home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PASCAL / CNC11TP.ZIP / CIRCDAM2.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1989-01-19  |  2.2 KB  |  64 lines

  1. { Copyright (C) 1989 Adam Fritz, 133 Main St., Afton, N.Y. 13730 }
  2.  
  3. procedure StrokeCircle ( xc, yc : integer ; r : word ) ;
  4.  
  5.      { CircDAM2 - draw circle using difference angle       }
  6.      {            method, semi-circular symmetry, and      }
  7.      {            `minimum' angle step                     }
  8.  
  9. const
  10.    isinda : longint = $0B53 ;
  11.    icosda : longint = $7F80 ;
  12.  
  13. var
  14.    ixar,iyar        : word ;    { aspect ratio parameters }
  15.    iar              : longint ; { aspect ratio B16 }
  16.    ida              : integer ; { loop control }
  17.    ir               : longint ; { offset radius B14 }
  18.    ixa0,ixa1,ixa2   : longint ; { coordinate variables B14 }
  19.    iya0,iya1,iya2   : longint ; { coordinate variables B14 }
  20.    ix0,iy0,ix1,iy1,ix2,iy2 : integer ; { display variables }
  21.  
  22. begin
  23.                                 { constraint test }
  24.    if r < 511 then begin
  25.                                 { aspect ratio }
  26.       GetAspectRatio(ixar,iyar) ;
  27.       iar := SwapLong(longint(ixar)) div longint(iyar) ;
  28.                                 { initialize differences and offset }
  29.       ir := r shl 6 + idr ;
  30.       ixa2 := ir * icosda shl 1 ;
  31.       ixa1 := SwapLong(ir) ;
  32.       iya2 := -RoundScaleB16(ir * isinda shl 1) * iar ;
  33.       iya1 := 0 ;
  34.  
  35.       ix0 := RoundScaleB6(ir) ;
  36.       iy0 := 0 ;
  37.       ix2 := ix0 ;
  38.       iy2 := iy0 ;
  39.                                 { circle }
  40.       for ida := 1 to 35 do begin
  41.                                 { step coordinates }
  42.          ixa0 := (ixa1 - ixa1 div 256) shl 1 - ixa2 ;
  43.          iya0 := (iya1 - iya1 div 256) shl 1 - iya2 ;
  44.                                 { draw chord }
  45.          ix1 := RoundScaleB6(LongHi(ixa0)) ;
  46.          iy1 := RoundScaleB6(LongHi(iya0)) ;
  47.                                 { semi-circular symmetry }
  48.          Line(xc+ix0,yc+iy0,xc+ix1,yc+iy1) ;
  49.          Line(xc-ix0,yc-iy0,xc-ix1,yc-iy1) ;
  50.                                 { ladder down }
  51.          ixa2 := ixa1 ;  ixa1 := ixa0 ;
  52.          iya2 := iya1 ;  iya1 := iya0 ;
  53.          ix0 := ix1 ;  iy0 := iy1
  54.  
  55.       end ;
  56.                                 { closure }
  57.       Line(xc+ix1,yc+iy1,xc-ix2,yc-iy2) ;
  58.       Line(xc-ix1,yc-iy1,xc+ix2,yc+iy2)
  59.  
  60.    end
  61. end ;
  62.  
  63. { Copyright (C) 1989 Adam Fritz, 133 Main St., Afton, N.Y. 13730 }
  64.