home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-386-Vol-2of3.iso / b / baswiz19.zip / BW$BAS.ZIP / GN5ELLIP.BAS < prev    next >
BASIC Source File  |  1993-01-29  |  2KB  |  65 lines

  1. '   +----------------------------------------------------------------------+
  2. '   |                                                                      |
  3. '   |        BASWIZ  Copyright (c) 1990-1993  Thomas G. Hanlin III         |
  4. '   |                                                                      |
  5. '   |                      The BASIC Wizard's Library                      |
  6. '   |                                                                      |
  7. '   +----------------------------------------------------------------------+
  8.  
  9. ' this routine is based on the midpoint ellipse algorithm as expressed in the
  10. ' book "Programmer's Guide to PC & PS/2 Video Displays", by Richard Wilton,
  11. ' Microsoft Press.
  12.  
  13.    DECLARE SUB GN5GetRes (MaxX%, MaxY%)
  14.    DECLARE SUB GN5Line (BYVAL X1%, BYVAL Y1%, BYVAL X2%, BYVAL Y2%)
  15.    DECLARE SUB GN5Plot (BYVAL X%, BYVAL Y%)
  16.  
  17.    DEFINT A-Z
  18.  
  19. SUB GN5Ellipse (CenterX, CenterY, XRad, YRadius)
  20.    GN5GetRes MaxX, MaxY
  21.    XRadius = XRad * ((MaxX * 3!) / (MaxY * 4!))
  22.    IF XRadius = 0 THEN
  23.       GN5Line CenterX, CenterY - YRadius, CenterX, CenterY + YRadius
  24.    ELSEIF YRadius = 0 THEN
  25.       GN5Line CenterX - XRadius, CenterY, CenterX + XRadius, CenterY
  26.    ELSE
  27.       X = 0
  28.       Y = YRadius
  29.       A& = XRadius
  30.       B& = YRadius
  31.       D& = B& * B& - A& * A& * B& + (A& * A&) \ 4&
  32.       DX& = 0&
  33.       DY& = 2 * A& * A& * B&
  34.       DO WHILE DX& < DY&
  35.          GN5Plot CenterX + X, CenterY + Y
  36.          GN5Plot CenterX + X, CenterY - Y
  37.          GN5Plot CenterX - X, CenterY + Y
  38.          GN5Plot CenterX - X, CenterY - Y
  39.          IF D& > 0& THEN
  40.             Y = Y - 1
  41.             DY& = DY& - 2& * A& * A&
  42.             D& = D& - DY&
  43.          END IF
  44.          X = X + 1
  45.          DX& = DX& + 2& * B& * B&
  46.          D& = D& + B& * B& + DX&
  47.       LOOP
  48.       D& = D& + (3& * (A& * A& - B& * B&) \ 2& - (DX& + DY&)) \ 2&
  49.       DO WHILE Y >= 0
  50.          GN5Plot CenterX + X, CenterY + Y
  51.          GN5Plot CenterX + X, CenterY - Y
  52.          GN5Plot CenterX - X, CenterY + Y
  53.          GN5Plot CenterX - X, CenterY - Y
  54.          IF D& < 0& THEN
  55.             X = X + 1
  56.             DX& = DX& + B& * B& * 2&
  57.             D& = D& + DX&
  58.          END IF
  59.          Y = Y - 1
  60.          DY& = DY& - A& * A& * 2&
  61.          D& = D& + A& * A& - DY&
  62.       LOOP
  63.    END IF
  64. END SUB
  65.