def tic(self): """met à jour le vecteur position en fonction des forces exercées sur l'objet""" temp = self.position acceleration = geometry.Vecteur() for i in range (0, len(self.forces)): acceleration = self.forces[i] + acceleration acceleration *= (1/self.masse) self.position = (self.position * 2) - self.position_p + (acceleration * (pas**2)) self.position_p = temp
liste_objet = [] liste_force = [] # Ajout des forces liste_force.append(force.Force(norme=force.norme_gravite, name='gravite')) # On ajoute la gravite # Ajout des objets def ajout_objet(x, y, v, masse, nom): liste_objet.append(objet.Objet(x, y, v, masse, nom)) ajout_objet(0, 0, geometry.Vecteur(), 5.972e24, 'terre') ajout_objet(0.0, 384400000, geometry.Vecteur(0, 0), 7.3477e22, 'lune') #1000 ajout_objet(0.0, 150e9, geometry.Vecteur(0, 0), 2e30, 'soleil') # Prétraitement des objets for i in range(0, len(liste_objet)): for j in range(0, len(liste_force)): for k in range(0, len(liste_objet)): if i != k: liste_objet[i].add_force(liste_force[j]) liste_objet[i].forces[len(liste_objet[i].forces) - 1].objet1 = liste_objet[i] liste_objet[i].forces[len(liste_objet[i].forces) - 1].objet2 = liste_objet[k]
self.name = name def maj(self): self.vecteur = (self.objet2.position - self.objet1.position) self.vecteur = self.vecteur * (1 / self.vecteur.norme()) self.vecteur = self.vecteur * self.norme(self.objet1, self.objet2) def __add__(self, autre_vecteur): return self.vecteur + autre_vecteur def __str__(self): return "objet1: {}\nobjet2: {}\nvecteur: {}\nnom: {}".format( self.objet1, self.objet2, self.vecteur, self.name) def norme_gravite(objet1, objet2): return (objet1.masse * objet2.masse * G / (objet.distance(objet1, objet2)**2)) def maj_force(liste_force): for i in range(0, len(liste_force)): liste_force[i].maj() if __name__ == "__main__": f = Force(objet.Objet(1., 2., geometry.Vecteur(1, 1), 1, "caillou1"), objet.Objet(-1., 2., geometry.Vecteur(-1, 1), 1, "caillou2"), norme_gravite, "gravite") print(f)
def __init__(self, x = 0, y = 0, v = geometry.Vecteur(), masse = 0, nom = ''): self.position = geometry.Vecteur(x,y) self.masse = masse self.forces = [] self.position_p = geometry.Vecteur(x,y) - (v * pas) self.nom = nom
def __init__(self, x = 0, y = 0, v = geometry.Vecteur(), masse = 0, nom = ''): self.position = geometry.Vecteur(x,y) self.masse = masse self.forces = [] self.position_p = geometry.Vecteur(x,y) - (v * pas) self.nom = nom def tic(self): """met à jour le vecteur position en fonction des forces exercées sur l'objet""" temp = self.position acceleration = geometry.Vecteur() for i in range (0, len(self.forces)): acceleration = self.forces[i] + acceleration acceleration *= (1/self.masse) self.position = (self.position * 2) - self.position_p + (acceleration * (pas**2)) self.position_p = temp def add_force(self,force): self.forces.append(force) def __str__(self): return "objet(position:{}, masse:{}, position precedente:{}, nom:{})".format(self.position, self.masse, self.position_p, self.nom) def distance(objet1, objet2): return (objet1.position - objet2.position).norme() if __name__ == "__main__": o = Objet(1.,2.,geometry.Vecteur(1,1),1, "caillou") o.add_force(geometry.Vecteur(1.,3.)) o.tic() print(o)