Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Cassini - Main.py

Main.py

Caricato da: Poggi Marco
Scarica il programma completo

  1. from tkinter import *
  2. from punto import Punto
  3. from disegno import Disegno
  4. from cassini import Cassini
  5.  
  6.  
  7. def domanda(messaggio, l1, l2):
  8.      """Richiede un float da tastiera"""
  9.      while True:
  10.           print(messaggio, end='')
  11.           try:
  12.                x=float(input())
  13.           except ValueError:
  14.                print('Sono ammessi solo numeri')
  15.                continue
  16.           except OverflowError:
  17.                print('Si è inserito un valore troppo grande')
  18.                continue
  19.           if (x<l1) or (x>l2):
  20.                print("Si possono inserire numeri compresi tra %8.4f e %8.4f" %(l1, l2))
  21.                continue
  22.           return x
  23.  
  24. def inverti(originale):
  25.      """Cambia segno alla coordinata y del Punto assegnato"""
  26.      reso=Punto()
  27.      reso.x=originale.x
  28.      reso.y=-1.0*originale.y
  29.      return reso
  30.  
  31. def inizializza(dove,x0,y0,xf,yf):
  32.      """Inizializza il grafico"""
  33.      a=Punto()
  34.      b=Punto()
  35.      a.x=x0
  36.      a.y=y0
  37.      b.x=xf
  38.      b.y=yf
  39.      return Disegno(dove, a, b)
  40.      
  41.      
  42.  
  43. print('Ovale di Cassini\n\n')
  44. curva=Cassini()
  45. curva.f=domanda("Distanza dei fuochi ? ", 0.0, 20.0)
  46. curva.k=domanda("Costante della funzione ? ", 1, 400)
  47. inizio=Punto()
  48. fine=Punto()
  49. radice=Tk()
  50. radice.title('Ipocicloide')
  51. foglio=Canvas(radice, bg='#000000', width=640, height=480)
  52. tela=inizializza(foglio, -10.0, -7.5, 10.1, 7.5)
  53. inizio=Punto()
  54. fine=Punto()
  55. inizio.x=-7.5
  56. inizio.y=curva.calcolo(inizio.x)
  57. termine=7.5
  58. passo=(termine-inizio.x)/1200.0
  59. tela.assi('#ffffff')
  60. while inizio.x<=termine:
  61.      fine.x=inizio.x+passo
  62.      fine.y=curva.calcolo(fine.x)
  63.      if (fine.y>0.0) or (inizio.y>0.0):
  64.           tela.colore="green"
  65.           tela.linea(inizio, fine)
  66.           tela.colore="red"
  67.           tela.linea(inverti(inizio), inverti(fine))
  68.      inizio=fine.clona()
  69. foglio.pack()
  70. radice.mainloop()