Рисование трехмерной сферы


Старинный, но математически правильный алгоритм

SCREEN 12
CONST Pi = 3.141592653589793#
DrawSphere 320, 240, 200
Pause
END

SUB DrawSphere (wx, wy, r)

' Color
c = 7

' Углы поворота
A = 40
b = 10

FOR u = 0 TO 360 STEP 20
  FOR n = 0 TO 360 STEP .5
    x = r * COS(Pi / 180 * n)
    y = r * SIN(Pi / 180 * n)
    z = 0

    x1 = x * COS(Pi / 180 * u)
    y1 = y
    z1 = x * SIN(Pi / 180 * u)

    ' Вращение вокруг оси абсцисс
    x2 = x1
    y2 = y1 * COS(Pi / 180 * A) - z1 * SIN(Pi / 180 * A)
    z2 = y1 * SIN(Pi / 180 * A) + z1 * COS(Pi / 180 * A)

    ' Вращение вокруг оси ординат
    y3 = y2
    x3 = x2 * COS(Pi / 180 * b) + z2 * SIN(Pi / 180 * b)
    z3 = z2 * COS(Pi / 180 * b) - x2 * SIN(Pi / 180 * b)

    PSET (wx + x3, wy - y3), c
  NEXT
NEXT


FOR n = 0 TO 360 STEP 15
  x = r * COS(Pi / 180 * n)
  y = r * SIN(Pi / 180 * n)
  z = 0

  FOR u = 0 TO 360 STEP .5
    x1 = x * COS(Pi / 180 * u)
    y1 = y
    z1 = x * SIN(Pi / 180 * u)

    ' Вращение вокруг оси абсцисс
    x2 = x1
    y2 = y1 * COS(Pi / 180 * A) - z1 * SIN(Pi / 180 * A)
    z2 = y1 * SIN(Pi / 180 * A) + z1 * COS(Pi / 180 * A)

    ' Вращение вокруг оси ординат
    y3 = y2
    x3 = x2 * COS(Pi / 180 * b) + z2 * SIN(Pi / 180 * b)
    z3 = z2 * COS(Pi / 180 * b) - x2 * SIN(Pi / 180 * b)

    PSET (wx + x3, wy - y3), c
  NEXT
NEXT

END SUB