home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PASCAL / CNC11TP.ZIP / CIRCDAI.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1989-01-19  |  2.0 KB  |  59 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.      { CircDAI - draw circle using difference angle method }
  6.      {           and `increment' angle step                }
  7.  
  8. const
  9.    isinda : longint = $169B ;
  10.    icosda : longint = $FF00 ;
  11.  
  12. var
  13.    ixar,iyar        : word ;    { aspect ratio parameters }
  14.    iar              : longint ; { aspect ratio B16 }
  15.    ida              : integer ; { loop control }
  16.    ir               : longint ; { offset radius B6 }
  17.    ixa0,ixa1,ixa2   : longint ; { coordinate variables B6 }
  18.    iya0,iya1,iya2   : longint ; { coordinate variables B6 }
  19.    ix0,iy0,ix1,iy1  : integer ; { display variables B0 }
  20.  
  21. begin
  22.                                 { constraint test }
  23.    if r < 511 then begin
  24.                                 { aspect ratio }
  25.       GetAspectRatio(ixar,iyar) ;
  26.       iar := SwapLong(longint(ixar)) div longint(iyar) ;
  27.                                 { initialize differences and offset }
  28.       ir := r shl 6 + idr ;
  29.       ixa2 := ir * icosda ;
  30.       ixa1 := SwapLong(ir) ;
  31.       iya2 := -RoundScaleB16(ir * isinda) * iar ;
  32.       iya1 := 0 ;
  33.  
  34.       ix0 := RoundScaleB6(ir) ;
  35.       iy0 := 0 ;
  36.       MoveTo(xc+ix0,yc) ;
  37.                                 { circle }
  38.       for ida := 1 to 71 do begin
  39.                                 { step coordinates }
  40.          ixa0 := (ixa1 - ixa1 div 256) shl 1 - ixa2 ;
  41.          iya0 := (iya1 - iya1 div 256) shl 1 - iya2 ;
  42.                                 { draw chord }
  43.          ix1 := RoundScaleB6(LongHi(ixa0)) ;
  44.          iy1 := RoundScaleB6(LongHi(iya0)) ;
  45.                                 { semi-circular symmetry }
  46.          LineTo(xc+ix1,yc+iy1) ;
  47.                                 { ladder down }
  48.          ixa2 := ixa1 ;  ixa1 := ixa0 ;
  49.          iya2 := iya1 ;  iya1 := iya0
  50.  
  51.       end ;
  52.                                 { closure }
  53.       LineTo(xc+ix0,yc+iy0)
  54.  
  55.    end
  56. end ;
  57.  
  58. { Copyright (C) 1989 Adam Fritz, 133 Main St., Afton, N.Y. 13730 }
  59.