from math import sin, cos, pi
from time import sleep
try: import tkinter as tk
except ImportError: import Tkinter as tk
root = tk.Tk()
root.resizable(False, False)
canvas = tk.Canvas(root, highlightthickness=0, bg="black", width=320, height=200)
canvas.pack()
frequenza = 5.
for ampiezza in range(100, 0, -10):
coords = [0, 100]
curva = canvas.create_line(0, 0, 0, 0, fill="green")
for x in range(0, 319, 2):
radianti = 2 * pi * x / 319
y = ampiezza * sin(radianti * frequenza) * cos(radianti)
coords.extend((x, 100-y))
canvas.coords(curva, *coords)
canvas.update()
sleep(0.01)
frequenza = frequenza - 0.1
root.mainloop()
Curiosità storica: il codice precedente è l'adattamento di un vecchio programma GW-BASIC scritto nel 1988 per
testare il funzionamento del comando grafico LINE. Per far comparire il disegno circa nello stesso tempo,
nella versione Python l'elaborazione è stata appositamente rallentata con sleep. Anche se il canvas
è largo solo 320 pixel contro i 640 del programma BASIC, le proporzioni dell'immagine sono inalterate
perché la modalità SCREEN 2 del GW-BASIC aveva i pixel rettangolari.
1000 ' PROVA7 - USO DI LINE - 23/5/1988
1010 '
1020 KEY OFF : SCREEN 2
1030 CLS : FREQUENZA = 5
1040 FOR AMPIEZZA = 100 TO 10 STEP -10
1050 PSET(0,100)
1060 FOR X = 0 TO 639 STEP 5
1070 RADIANTI = 6.283185307# * X / 639
1080 Y = AMPIEZZA * SIN(RADIANTI*FREQUENZA) * COS(RADIANTI)
1090 LINE -(X,100-Y)
1100 NEXT : FREQUENZA = FREQUENZA - .1
1110 NEXT
Il disegno di questa funzione è rimasto per 25 anni solo un ricordo, in quanto
il programma, prima trasferito di floppy in floppy, e poi di hard disk in hard disk, era salvato
in una modalità compressa non ASCII, e windows si rifiutava di avviare il GW-BASIC con cui si poteva
leggere. Solo con Linux, e in particolare con dosbox, è diventato possibile "riesumare l'antico
codice", permettendo di far rivivere qualcosa scritto nei primissimi giorni di contatto con il mondo
dei PC compatibili MS-DOS... ricordo di averlo anche fatto girare ad una fiera, e a quel tempo
sembrava una cosa notevole.