10 CLS 20 DEFDBL A-Z: DEFINT C, I 30 PI = 4 * ATN(1) 40 DIM X(2), Y(2), I$(2), M(2), N(2), Q$(2) 50 LL$ = SPACE$(24) 60 SCREEN 9 70 COLOR 11: PRINT "Trasformazioni rototraslazionali", "e Inserimento in un sistema la cui anomalia sia diversa da un angolo retto" 80 COLOR 14: FOR I = 0 TO 2 90 I$(I) = RIGHT$(STR$(I + 1), 1) 100 LOCATE 5 + I, 1: PRINT "x"; I$(I); : INPUT "= ", X(I) 110 IF X(I) < -16 OR X(I) > 16 THEN LOCATE 5 + I, 5: PRINT LL$: GOTO 100 120 LOCATE 5 + I, 41: PRINT "y"; I$(I); : INPUT "= ", Y(I) 130 IF Y(I) < -12 OR Y(I) > 12 THEN LOCATE 5 + I, 45: PRINT LL$: GOTO 120 140 NEXT I 150 P = 9: GOSUB 160: GOSUB 250: GOSUB 390: GOTO 440 160 LOCATE P, 1: INPUT "Angolo di rotazione (in radianti)= ", THETA 170 IF THETA < 0 OR THETA > 2 THEN LOCATE P, 36: PRINT LL$: GOTO 160 ELSE THETA = THETA * PI 180 LOCATE P + 1, 1: INPUT "Anomalia del nuovo sistema (in radianti)= ", PHI 190 IF PHI <= 0 OR PHI >= 2 OR PHI = 1 THEN LOCATE P + 1, 43: PRINT LL$: GOTO 180 ELSE PHI = PHI * PI 200 LOCATE P + 3, 1: INPUT "Incremento in ascissa= ", D 210 IF D < -8 OR D > 8 THEN LOCATE P + 3, 24: PRINT LL$: GOTO 200 220 LOCATE P + 3, 41: INPUT "Incremento in ordinata= ", E 230 IF E < -6 OR E > 6 THEN LOCATE P + 3, 65: PRINT SPACE$(16): GOTO 220 240 RETURN 250 LOCATE P + 6, 1: COLOR 11: PRINT "* Colori dello schermo:" 260 LOCATE P + 8, 4: COLOR 12: PRINT "9" 270 LOCATE P + 8, 6: COLOR 11: PRINT "Indaco luminescente" 280 LOCATE P + 8, 43: COLOR 12: PRINT "12" 290 LOCATE P + 8, 46: COLOR 11: PRINT "Rosso luminescente" 300 LOCATE P + 9, 3: COLOR 12: PRINT "10" 310 LOCATE P + 9, 6: COLOR 11: PRINT "Verde luminescente" 320 LOCATE P + 9, 43: COLOR 12: PRINT "13" 330 LOCATE P + 9, 46: COLOR 11: PRINT "Rosa fucsia luminescente" 340 LOCATE P + 10, 3: COLOR 12: PRINT "11" 350 LOCATE P + 10, 6: COLOR 11: PRINT "Azzurro luminescente" 360 LOCATE P + 10, 43: COLOR 12: PRINT "14" 370 LOCATE P + 10, 46: COLOR 11: PRINT "Giallo luminescente" 380 RETURN 390 LOCATE P + 12, 1: COLOR 11: INPUT "Colore del triangolo nella posizione iniziale= ", COL1 400 IF COL1 < 9 OR COL1 > 14 OR COL1 <> INT(COL1) THEN LOCATE P + 12, 48: PRINT LL$: GOTO 390 410 LOCATE P + 13, 1: INPUT "Colore del triangolo nella posizione finale= ", COL2 420 IF COL2 < 9 OR COL2 > 14 OR COL2 <> INT(COL2) THEN LOCATE P + 13, 46: PRINT LL$: GOTO 410 430 RETURN 440 CLS : WINDOW (-36, -27)-(36, 27) 450 LINE (-36, 0)-(36, 0), 15 460 LINE (0, -27)-(0, 27), 15 470 LINE (X(0), Y(0))-(X(1), Y(1)), COL1 480 LINE (X(1), Y(1))-(X(2), Y(2)), COL1 490 LINE (X(2), Y(2))-(X(0), Y(0)), COL1 500 LPRINT 510 LPRINT "Coordinate dei nuovi punti dopo le trasformazioni:" 520 LPRINT 530 FOR I = 0 TO 2 540 Q$(I) = RIGHT$(STR$(I + 1), 1) 550 M(I) = X(I) * COS(THETA) + Y(I) * (COS(THETA + PHI) / SIN(PHI)) + D 560 LPRINT "x"; Q$(I); "= "; M(I) 570 N(I) = X(I) * SIN(THETA) + Y(I) * (SIN(THETA + PHI) / SIN(PHI)) + E 580 LPRINT "y"; Q$(I); "= "; N(I) 590 NEXT I 600 LPRINT 610 LINE (M(0), N(0))-(M(1), N(1)), COL2 620 LINE (M(1), N(1))-(M(2), N(2)), COL2 630 LINE (M(2), N(2))-(M(0), N(0)), COL2 640 W$ = INKEY$: IF W$ = "" THEN 640 650 CLS : COLOR 15: PRINT "Nuove coordinate dopo le trasformazioni:" 660 FOR I = 0 TO 2 670 Q$(I) = RIGHT$(STR$(I + 1), 1) 680 LOCATE 3 + I, 1: PRINT "x"; Q$(I); "= "; M(I) 690 LOCATE 3 + I, 41: PRINT "y"; Q$(I); "= "; N(I) 700 NEXT I 710 LOCATE 8, 1: COLOR 12: PRINT "1" 720 LOCATE 8, 3: COLOR 10: PRINT "Ricominciamo dalla richiesta delle coordinate." 730 LOCATE 9, 1: COLOR 12: PRINT "2" 740 LOCATE 9, 3: COLOR 10: PRINT "Ricominciamo dalla richiesta dell'angolo di rotazione." 750 LOCATE 10, 1: COLOR 12: PRINT "3" 760 LOCATE 10, 3: COLOR 10: PRINT "Fine della sessione." 770 LOCATE 12, 1: INPUT "Qual Š la tua scelta"; L 780 IF L = 1 THEN CLS : GOTO 70 790 IF L = 2 THEN P = 15: COLOR 14: GOSUB 160: P = 9: GOSUB 390: GOTO 440 800 IF L = 3 THEN CLS : SCREEN 0: SYSTEM 810 LOCATE 12, 23: PRINT LL$: GOTO 770