예제 #1
0
	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
예제 #2
0
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]
예제 #3
0
        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)
예제 #4
0
	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
예제 #5
0
	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)