from tkinter import *
from punto import Punto
from disegno import Disegno
from cassini import Cassini
def domanda(messaggio, l1, l2):
"""Richiede un float da tastiera"""
while True:
print(messaggio, end='')
try:
x=float(input())
except ValueError:
print('Sono ammessi solo numeri')
continue
except OverflowError:
print('Si è inserito un valore troppo grande')
continue
if (x<l1) or (x>l2):
print("Si possono inserire numeri compresi tra %8.4f e %8.4f" %(l1, l2))
continue
return x
def inverti(originale):
"""Cambia segno alla coordinata y del Punto assegnato"""
reso=Punto()
reso.x=originale.x
reso.y=-1.0*originale.y
return reso
def inizializza(dove,x0,y0,xf,yf):
"""Inizializza il grafico"""
a=Punto()
b=Punto()
a.x=x0
a.y=y0
b.x=xf
b.y=yf
return Disegno(dove, a, b)
print('Ovale di Cassini\n\n')
curva=Cassini()
curva.f=domanda("Distanza dei fuochi ? ", 0.0, 20.0)
curva.k=domanda("Costante della funzione ? ", 1, 400)
inizio=Punto()
fine=Punto()
radice=Tk()
radice.title('Ipocicloide')
foglio=Canvas(radice, bg='#000000', width=640, height=480)
tela=inizializza(foglio, -10.0, -7.5, 10.1, 7.5)
inizio=Punto()
fine=Punto()
inizio.x=-7.5
inizio.y=curva.calcolo(inizio.x)
termine=7.5
passo=(termine-inizio.x)/1200.0
tela.assi('#ffffff')
while inizio.x<=termine:
fine.x=inizio.x+passo
fine.y=curva.calcolo(fine.x)
if (fine.y>0.0) or (inizio.y>0.0):
tela.colore="green"
tela.linea(inizio, fine)
tela.colore="red"
tela.linea(inverti(inizio), inverti(fine))
inizio=fine.clona()
foglio.pack()
radice.mainloop()