""" L'algoritmo per disegnare una linea di campo si basa sul calcolo del campo risultante in un certo punto e conseguentemente sullo spostarsi di un trattino nella direzione e nel verso di tale risultante dopo di che si ricomincia; in questo modo con buona approssimazione la tangente in un punto alla linea di campo ha la direzione del campo Per i comandi della tartaruga in Python cercare modulo turtle Python dalla versione 2.7 in poi""" from turtle import * # permette di utilizz. la grafica della tartaruga e anche i vettori Vec2D k=9E9 # cost Coulomb unita' S.I. q1,q2=5E-6,-10E-6 #carche in micro coulomb a=Vec2D(0.16,0) #posiz seconda carica come vettore def prepara(): # disegno dei due punti con le cariche dot(10, 'red') penup() setpos(16,0) dot(10, 'red') home() pendown() def linea_campo(x,y): # disegna le linee di campo a partire dal punto x,y penup() # penna su setpos(x,y) # manda la tartaruga nel punto x,y pendown() # penna giu' r1=Vec2D(xcor()/100,ycor()/100) # vettore posizione della carica di prova r2=r1-a # vettore posizione della carica di prova rispetto la carica 2 while abs(r2)>0.02 and ycor()<41: # mentre cio' e' vero ripete le istruzioni che seguono r1=Vec2D(xcor()/100,ycor()/100) r2=r1-a E1=k*q1/abs(r1)**3*r1 # calcolo campo elettrico 1 come prodotto numero per vettore E2=k*q2/abs(r2)**3*r2 Eris=E1+E2 #somma di vettori setheading(towards(xcor()+Eris[0],ycor()+Eris[1])) # dirige la tarta nel verso del campo risultante forward(0.8) # avanti di un trattino """ Per disegnare le linee equipotenziali e' necessario introdurre due nuove procedure ritornata(x,y) e linea_equi(x,y) La prima controlla che la tarta sia tornata nella posizione iniziale pressappoco. La seconda disegna una linea equipotenziale a partire dal punto (x,y) L'algoritmo per la linea equipotenziale si basa su calcolo del campo risultante (come prima) si calcola quindi la perpendicolare al vettore campo risultante e ci si muove di un trattino in questa direzione, dopo si ricomincia fino al ritorno nella posizione iniziale. In questo modo punto per punto la linea equipotenziale e' perpedicolare al campo elettr.""" def ritornata(x,y): dx=0.12 dy=0.12 if xinizio-dx<=x<=xinizio+dx and yinizio-dy<=y<=yinizio+dy: return True else: return False def linea_equi(x,y): global xinizio, yinizio # variabili globali visibili anche dalle altre procedure xinizio=x yinizio=y penup() setpos(x,y) pendown() r1=Vec2D(xcor()/100,ycor()/100) r2=r1-a E1=k*q1/abs(r1)**3*r1 E2=k*q2/abs(r2)**3*r2 Eris=E1+E2 fperp=Vec2D(-Eris[1],Eris[0]) setheading(towards(xcor()+fperp[0],ycor()+fperp[1])) forward(0.2) while not(ritornata(xcor(), ycor())): # r1=Vec2D(xcor()/100,ycor()/100) r2=r1-a E1=k*q1/abs(r1)**3*r1 E2=k*q2/abs(r2)**3*r2 Eris=E1+E2 fperp=Vec2D(-Eris[1],Eris[0]) setheading(towards(xcor()+fperp[0],ycor()+fperp[1])) forward(0.02) speed(0) # aumenta la velocita' setworldcoordinates(-50,-40,50,40) # stabilisce le coordinate prepara() hideturtle() # le istruzioni che seguono disegnano alcune linee di campo y=0.2 x=-1 while x<1: linea_campo(x,y) x=x+0.4 y=0.2 x=-4 while x>-14: linea_campo(x,y) x=x-3 pencolor("red") linea_equi(3,0) linea_equi(-6,0) exitonclick()