def vai(vx,vy,fin):
x = 0.0 # m
y = 0.0 # m
m=0.02 #massa kg
dt = 0.05 # s
t = 0 # s
n=0
#fin.pennasu()
while t<50:
vy=vy-9.8*dt #velocita' m/s
x=x+vx*dt
y=y+vy*dt
fin.asPos(x,y)
if y<-150:
y=-149
vy=-vy*0.95
if y>150:
y=149
vy=-vy*0.95
if x<-300:
x=-299
vx=-vx*0.95
if x>300:
x=299
vx=-vx*0.95
n=n+1
t = t+dt
fin=Graf("tarta che rimbalza",500,400)
fin.coordinate(-350,-200,350,200)
fin.nascondi_tarta()
fin.mostra_palla(5)
perimetro(fin)
fin.getMouse()
vai(80,50,fin)
""" rifrazione dall'aria al vetro con grafico """
from graftarta2 import Graf
from graphics import *
import math
def prepara():
""" linea di separazione di due mezzi e normale """
t.avanti(200)
t.avanti(-400)
t.avanti(200)
t.destra(-90)
t.avanti(200)
t.avanti(-400)
t.avanti(200)
t.destra(90)
Testo=Text(Point(10,120),'aria')
Testo.draw(t)
Testo1=Text(Point(10,-120),'acqua')
Testo1.draw(t)
def rifra():
""" chiede l'angolo di incidenza e calcola l'angolo
di rifrazione;
ripete la richiesta finche'
non si scrive f """
prepara()
n=1.50
q='w'
while q<>'f':
i=input('scrivi un angolo ')
print 'angolo di incidenza
',i
r=math.asin(math.sin(i*math.pi/180)/n)*180/math.pi
print 'angolo di rifrazione
',r
t.destra(-i)
t.avanti(200)
t.avanti(-200)
t.destra(90+i)
t.destra(90-r)
t.avanti(200)
t.avanti(-200)
t.destra(-180+r)
q=raw_input('premi un tasto
(f fine) invio ')
t.close()
rifra()
""" Abelson e Di Sessa pag. 41 provare gli angoli 144,
45, 105, 125"""
from graftarta2 import Graf
fin=Graf('poligoni',500,450)
fin.coordinate(-500,-450,500,450)
def poli(lato, angolo, fin):
fin.avanti(lato)
fin.destra(angolo)
somma = angolo
while somma % 360 != 0:
fin.avanti(lato)
fin.destra(angolo)
somma = somma+angolo
def poli2(lato, angolo, fin):
fin.avanti(lato)
fin.destra(angolo)
fin.avanti(lato)
fin.destra(2*angolo)
somma = 3*angolo
while somma % 360 != 0:
fin.avanti(lato)
fin.destra(angolo)
fin.avanti(lato)
fin.destra(2*angolo)
somma = somma+3*angolo def
triang_incastro(lato):
if lato>15:
for i in range(3):
#triang_incastro(lato/2)
gr.avanti(lato)
#triang_incastro(lato/2)
gr.destra(120)
triang_incastro(lato/2)
def fattoriale(n):
if n==0:
return 1
else:
return n*fattoriale(n-1)
Lavori di gruppo
A partire dal programma rifraz.py, scrivere un
programma per la rifrazione dall'acqua all'aria (calcolare l'angolo
limite, se l'angolo di incidenza è maggiore riflessione totale)
utilizzare getMouse() per un programma nel quale
facendo clic in un punto viene disegnato raggio incidente e raggio
rifratto o riflesso
Utilizzare il metodo
gr.grafico(f,xmin,xmax,passo) per
disegnare il grafico di una parabola o di una funzione polinomiale. Nel
caso in cui si voglia disegnare un grafico di una funzione con un punto
di discontinuità ad es. iperbole equilatera, si suddivida
l'intervallo delle x e si invochi due volte il metodo.
provare la funzione poli2 e triangolo ad incastro
basandosi sul programma rimb2.py inserire una
nuova finestra grafica
con una nuova istanza fin2=Graf("energie",500,400) per rappresentare le
energie cinetica, potenziale e totale che entrano in gioco nei rimbalzi
di una palla
definire una funzione per il calcolo dei
coeficienti binomiali a partire dalla definizione di fattoriale: