'#sec:Main
10 DIM x(1000)
11 DIM y(1000)
12 DIM z(1000)
20 d = 150: t = .7: p = 2
22 poc = 1: PEN ON
24 po = 1: drau = 0: modo = 0
25 CY = 0: CX = 0: CZ = 0
60 GOSUB 100: GOTO 500
100 CLS : GOSUB 851: GOSUB 200: RETURN
150 REM calcula y dibuja un punto
152 xe = -px * st + py * ct
154 ye = -px * ct * cp - py * st * cp + pz * sp
156 ze = -px * sp * ct - py * st * sp - pz * cp + 4
158 sx = d * xe / ze + 80
160 sy = d * ye / ze + 80
161 pset sx,sy
162 RETURN
200 REM redibuja
202 st = SIN(t): ct = COS(t)
204 sp = SIN(p): cp = COS(p)
210 FOR i = 1 TO po
220 px = x(i) / 10: py = y(i) / 10: pz = z(i) / 10
230 GOSUB 150
240 NEXT i
250 RETURN
430 INPUT "cuantos valores desea BorRAR? ?"; BO
435 po = po - BO
440 GOSUB 100: GOTO 500
500 a$ = INKEY$: GOSUB 1200: IF a$ = "" AND pecom = 0 THEN GOTO 500
501 a = ASC(a$): IF pecom 0 THEN GOTO 532
502 IF a$ = "s" THEN GOSUB 1400: GOSUB 851: REM modo ver o dibujar
503 IF a$ = "k" THEN GOSUB 1000: REM graba data
504 IF a$ = "o" THEN GOSUB 1100: REM lee data
505 IF a$ = "a" THEN GOSUB 2600: REM angulo hor
506 IF a$ = "b" THEN GOSUB 2700: REM angulo ver
507 IF a$ = "e" THEN GOSUB 1500: REM esfera
508 IF a$ = "l" THEN GOSUB 1600: REM linea
509 IF a$ = "c" THEN GOSUB 1800: REM circulo
512 IF a$ = "m" THEN GOSUB 2400: REM mover
513 IF a$ = "f" THEN GOSUB 2500: REM grafica funcion
514 IF a$ = "z" THEN GOSUB 2800: REM zoom
519 IF a$ = "h" THEN GOSUB 5000: GOSUB 851: GOTO 500: REM home
521 IF a$ = "u" THEN CLS : GOSUB 100: REM redraw
522 IF a$ = "l" THEN po = 1: GOTO 20: REM borrar puntos
524 IF a$ = "g" THEN CX = 0: CY = 0: CZ = 0: GOSUB 851: GOTO 500: REM cero
526 IF a$ = "p" THEN CLS : GOTO 430: REM borrar puntos
528 IF ((drau = 0) AND (a$ = "i")) THEN drau = 1: GOSUB 851
530 IF ((drau = 1) AND (a$ = "i")) THEN drau = 0: GOSUB 851
532 IF modo = 1 AND pecom = 1 THEN CZ = CZ - 1: GOSUB 610
534 IF modo = 1 AND pecom = 9 THEN CZ = CZ + 1: GOSUB 610
536 IF modo = 1 AND pecom = 4 THEN CY = CY - 1: GOSUB 610
538 IF modo = 1 AND pecom = 6 THEN CY = CY + 1: GOSUB 610
540 IF modo = 1 AND pecom = 3 THEN CX = CX - 1: GOSUB 610
542 IF modo = 1 AND pecom = 7 THEN CX = CX + 1: GOSUB 610
543 IF pecom = 2 THEN d = d + 10: GOSUB 100
544 IF pecom = 8 THEN d = d - 10: GOSUB 100
545 IF modo = 0 AND pecom = 4 THEN t = t - .1: GOSUB 100
546 IF modo = 0 AND pecom = 6 THEN t = t + .1: GOSUB 100
547 IF modo = 0 AND pecom = 1 THEN p = p + .1: GOSUB 100
548 IF modo = 0 AND pecom = 9 THEN p = p - .1: GOSUB 100
599 GOTO 500
610 IF drau = 1 THEN GOSUB 700
605 IF drau = 0 THEN GOSUB 750
620 RETURN
700 x(po) = CX: y(po) = CY
705 z(po) = CZ
710 po = po + 1: i = 1: x(i) = CX
715 y(i) = CY: z(i) = CZ
720 px = CX / 10: py = CY / 10: pz = CZ / 10: GOSUB 150
725 GOSUB 851
730 RETURN
750 px = CX / 10: py = CY / 10: pz = CZ / 10: COLOR 9: GOSUB 150: COLOR 15: GOSUB 150
760 COLOR 0: GOSUB 851
770 RETURN
851 at 0, 0: a$ = "Dibujo Tridimensional": COLOR 9
852 PRINT a$: COLOR 10
857 a$ = "MOD=" + STR$(modo) + " "
858 a$ = a$ + "PNTR="
859 a$ = a$ + STR$(po) + " "
860 PRINT a$: COLOR 12
861 a$ = "STAT: cx=" + STR$(CX)
862 a$ = a$ + " cy=" + STR$(CY)
863 a$ = a$ + " cz=" + STR$(CZ) + " "
864 PRINT a$: COLOR 13
865 a$ = "Draw="
866 IF (drau = 1) THEN a$ = a$ + "ON "
867 IF (drau = 0) THEN a$ = a$ + "OFF"
876 PRINT a$: COLOR 0
880 RETURN
910 IF ((vx = 0) AND (vy = 0) AND (vz = 0)) THEN GOTO 930
920 RETURN
930 vx = OVX: vy = OVY: vz = OVZ
940 RETURN
1000 REM graba en disco
1001 INPUT "Nombre del archivo a grabar? "; ar$: ar$ = ar$ + ".dat"
1010 OPEN ar$ FOR OUTPUT AS #1
1020 FOR i = 1 TO po
1030 PRINT #1, x(i)
1040 PRINT #1, y(i)
1050 PRINT #1, z(i)
1060 NEXT i
1065 CLOSE #1
1066 GOSUB 100
1070 RETURN
1100 REM lee del disco
1101 INPUT "Nombre del archivo a leer? "; ar$: ar$ = ar$ + ".dat"
1110 OPEN ar$ FOR INPUT AS #1: po = 1
1130 INPUT #1, x(po)
1140 INPUT #1, y(po)
1150 INPUT #1, z(po): po = po + 1
1160 IF NOT EOF(1) THEN 1130
1165 CLOSE #1
1166 GOSUB 100
1170 RETURN
1200 REM deteccion de pen
1210 IF PEN(0) THEN 1230
1220 pecom = 0: RETURN
1230 px = PEN(4): py = PEN(5)
1270 IF px < 50 THEN pecom = 1: GOTO 1300
1280 IF px < 110 THEN pecom = 2: GOTO 1300
1290 pecom = 3
1300 IF py < 50 THEN GOTO 1330
1310 IF py < 110 THEN pecom = pecom + 3: GOTO 1330
1320 pecom = pecom + 6
1330 RETURN
1400 REM modo ver o dibujar
1410 IF modo = 0 THEN modo = 1: RETURN
1420 IF modo = 1 THEN modo = 0
1430 RETURN
1500 REM ESFERA
1501 CLS
1502 INPUT "radio=(10)? "; RA
1503 IF (RA = 0) THEN RA = 10
1504 INPUT "