Corso di introduzione al Python


Quarto incontro


Primi esempi di programmi in Python
  1. vettori
  2. disegno di vettori
  3. forza risultante




import math

class V:
    """ operazioni con i vettori """
    def __init__(self,x,y):
        self.x=x
        self.y=y

    def somma(self, altroV):
        return V(self.x+altroV.x, self.y+altroV.y)

    def diff(self, altroV):
        vv=altroV.opposto()
        return self.somma(vv)

    def opposto(self):
        return V(-self.x, -self.y)
   
    def perp(self):
        return V(self.y,-self.x)
   
    def modulo(self):
        return math.sqrt(self.x**2+self.y**2)
   
    def __add__(self, altroV):
        return V(self.x+altroV.x, self.y+altroV.y)
   
    def __str__(self):
        return '(' + str(self.x) + ', ' + str(self.y) + ')'
 
    def __rmul__(self,k):
        return V(k*self.x,k*self.y)
   
    __mul__=__rmul__

    def __sub__(self, altroV):
        return self.diff(altroV)




""" disegnare i vettori
        un metodo di Line  dato da setArrow disegna anche la punta alla fine
        """
from graphics import *
from graftarta2 import Graf
from vettori0 import V
gr=Graf('vettori', 500,400)
gr.coordinate(-20,-16,20,16,True)
gr.nascondi_tarta()

def freccetta(a):
    k=Line(Point(0,0),Point(a.x,a.y))
    k.setArrow('last')
    k.draw(gr)

F1=V(5,10)
F2=V(-8,4)









""" linee di forza campo elettrico prodotto da due cariche
    le coordinate in cm ma le distanze in m
    prima facendo clic in un punto si disegna un segmentino orientato come E
    Per terminare fare clic di nuovo su stop
    si possono scegliere sia cariche uguali che diverse in modulo e in segno"""

from vettori0 import V


global q1, q2, Posiz_q2

q1=10e-6 # C
q2=-5e-6 # C
Posiz_q2=V(0.20,0)
   

def campo(carica, Posizione):
    """ calcolo forza elettrica"""
    k=8.99e9 #N*m^2/C^2
    cubo=Posizione.modulo()**3
    return (k*carica/cubo)*Posizione
   
   
def risultante(Posizione):
    """calcolo E risultante """
    f1=campo(q1,Posizione)
    Pos2=Posizione.diff(Posiz_q2)
    f2=campo(q2,Pos2)
    return f1+f2

def punto_forza(fin):
    """ clic con il mouse per avere un segmentino orientato come E"""
    while True:
        P = fin.getMouse()
        if 35<P.getX()<45 and -35<P.getY()<-25:
            break
        x=P.getX()/100.0
        y=P.getY()/100.0
        R=risultante(V(x,y))
        # R=1e-3*R
        fin.pennasu()
        fin.asPos(x*100,y*100)
        fin.asDir(fin.verso(R.x, R.y))
        fin.pennagiu()
        #fin.avanti(R.modulo()/2.0e6)
        fin.avanti(3)
        print R
 
from graftarta2 import Graf
from graphics import *

t=Graf("linee di forza ",600,400)
t.coordinate(-50,-40,50,40,True)
t.nascondi_tarta()
testo=Text(Point(40,-30),"stop")
testo.draw(t)

punto_forza(t)   
t.close()

import random
from graftarta2 import Graf
from graphics import *

gr=Graf('lanci moneta',500,400)


def lancia(nmax):
    xi = -nmax/10.0
    xs = 11.0*nmax/10.0
    yi = -0.2
    ys = 1.8
    gr.coordinate(xi,yi,xs,ys,True)
    gr.nascondi_tarta()
    lin=Line(Point(0,0.5), Point(xs,0.5))
    lin.draw(gr)
    somma = 0.0
    gr.asPos(0,0.5)
    for i in range(1,nmax+1):
         if random.randrange(0,2) == 1:
             somma = somma +1
         freq = somma/i
         gr.asPos(i,freq)
lancia(500)



Lavori di gruppo