'
'  © JM. :: Hecho en Ronda
'
'
'  Procedente de...        es.geocities.com/jm00092
'
'______________________________________________________________________
'                                                  GLOBO TRIDIMENSIONAL
'
'
'
DECLARE SUB cuadro (ah!, av!, bh!, bv!, ch!, cv!, dh!, dv!, colo!)
DECLARE FUNCTION angulo! (x!, y!, z!, tx!, ty!, tz!, ux!, uy!, uz!, tux!, tuy!, tuz!)
SCREEN 13


cx = 160
cy = 100
sensi = .25
rad = 90

FOR t = 2 TO 4.6 STEP sensi
   FOR u = 1 TO 7.4 STEP sensi

      x = (rad * COS(t) * COS(u))
      y = rad * COS(t) * SIN(u)
      z = rad * SIN(t)

      tx = rad * COS(t - sensi) * COS(u)
      ty = rad * COS(t - sensi) * SIN(u)
      tz = rad * SIN(t - sensi)

      ux = rad * COS(t) * COS(u - sensi)
      uy = rad * COS(t) * SIN(u - sensi)
      uz = rad * SIN(t)

      tux = rad * COS(t - sensi) * COS(u - sensi)
      tuy = rad * COS(t - sensi) * SIN(u - sensi)
      tuz = rad * SIN(t - sensi)

      colorcara = angulo(x, y, z, tx, ty, tx, ux, uy, uz, tux, tuy, tuz)

      colorcara = INT((16 / colorcara / colorcara) + 16)

      x1 = cx + x + (z / 3)
      y1 = cy + y - (z / 3)

      x2 = cx + tx + (tz / 3)
      y2 = cy + ty - (tz / 3)

      x4 = cx + ux + (uz / 3)
      y4 = cy + uy - (uz / 3)

      x3 = cx + tux + (tuz / 3)
      y3 = cy + tuy - (tuz / 3)

      cuadro x1, y1, x2, y2, x3, y3, x4, y4, colorcara
     
   NEXT
NEXT
SOUND 1550, 2
SLEEP

'
'  © JM. :: Hecho en Ronda
'
'
'  Procedente de...        es.geocities.com/jm00092
'
'______________________________________________________________________
'            
FUNCTION angulo (x, y, z, tx, ty, tz, ux, uy, uz, tux, tuy, tuz)


'x--->ux  ===v1x
'tx--->tux     ===v2x

v1x = ux - x
v1y = uy - y
v1z = uz - z

v2x = tux - tx
v2y = tuy - ty
v2z = tuz - tz

'producto vectorial de v1 por v2 =v12   '³ v1x  v1y  v1z ³
                                        '³ v2x  v2y  v2z ³
v12x = (v1y * v2z) - (v2y - v1z)
v12y = (v1x * v2z) - (v2x - v1z)
v12z = (v1y * v2x) - (v2y - v1x)

'angulo entre v12 y (1,1,1)
arriba = v12x + v12y + v12z
abajo = (SQR((v12x) ^ 2 + (v12y) ^ 2 + (v12z) ^ 2)) * SQR(3)

angulo = COS(arriba / abajo) ^ -1


END FUNCTION

'
'  © JM. :: Hecho en Ronda
'
'
'  Procedente de...        es.geocities.com/jm00092
'
'______________________________________________________________________
'            
SUB cuadro (ah, av, bh, bv, ch, cv, dh, dv, colo)
LINE (ah, av)-(bh, bv), 255
LINE (bh, bv)-(ch, cv), 255
LINE (ch, cv)-(dh, dv), 255
LINE (dh, dv)-(ah, av), 255
PAINT ((ah + ch) / 2, (av + cv) / 2), colo, 255
'PSET ((ah + ch) / 2, (av + cv) / 2), colo

LINE (ah, av)-(bh, bv), colo
LINE (bh, bv)-(ch, cv), colo
LINE (ch, cv)-(dh, dv), colo
LINE (dh, dv)-(ah, av), colo
'LINE (ah, av)-(ch, cv), 3
'LINE (bh, bv)-(dh, dv), 3
END SUB

