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 / G12ELLIP.BAS < prev    next >
BASIC Source File  |  1993-01-29  |  2KB  |  62 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 G12Line (BYVAL X1%, BYVAL Y1%, BYVAL X2%, BYVAL Y2%)
  14.    DECLARE SUB G12Plot (BYVAL X%, BYVAL Y%)
  15.  
  16.    DEFINT A-Z
  17.  
  18. SUB G12Ellipse (CenterX, CenterY, XRadius, YRadius)
  19.    IF XRadius = 0 THEN
  20.       G12Line CenterX, CenterY - YRadius, CenterX, CenterY + YRadius
  21.    ELSEIF YRadius = 0 THEN
  22.       G12Line CenterX - XRadius, CenterY, CenterX + XRadius, CenterY
  23.    ELSE
  24.       X = 0
  25.       Y = YRadius
  26.       A& = XRadius
  27.       B& = YRadius
  28.       D& = B& * B& - A& * A& * B& + (A& * A&) \ 4&
  29.       DX& = 0&
  30.       DY& = 2 * A& * A& * B&
  31.       DO WHILE DX& < DY&
  32.          G12Plot CenterX + X, CenterY + Y
  33.          G12Plot CenterX + X, CenterY - Y
  34.          G12Plot CenterX - X, CenterY + Y
  35.          G12Plot CenterX - X, CenterY - Y
  36.          IF D& > 0& THEN
  37.             Y = Y - 1
  38.             DY& = DY& - 2& * A& * A&
  39.             D& = D& - DY&
  40.          END IF
  41.          X = X + 1
  42.          DX& = DX& + 2& * B& * B&
  43.          D& = D& + B& * B& + DX&
  44.       LOOP
  45.       D& = D& + (3& * (A& * A& - B& * B&) \ 2& - (DX& + DY&)) \ 2&
  46.       DO WHILE Y >= 0
  47.          G12Plot CenterX + X, CenterY + Y
  48.          G12Plot CenterX + X, CenterY - Y
  49.          G12Plot CenterX - X, CenterY + Y
  50.          G12Plot CenterX - X, CenterY - Y
  51.          IF D& < 0& THEN
  52.             X = X + 1
  53.             DX& = DX& + B& * B& * 2&
  54.             D& = D& + DX&
  55.          END IF
  56.          Y = Y - 1
  57.          DY& = DY& - A& * A& * 2&
  58.          D& = D& + A& * A& - DY&
  59.       LOOP
  60.    END IF
  61. END SUB
  62.