Bonsoir
Je bloque sur cet exo e python, je ne sais pas comment commencer et comment le formaliser
Écrivez une fonction qui indique, étant donnée une liste de points de l’espace, où est placé le centre de gravité de ces points, en supposant qu’ils ont tous la même masse. Chaque point de l’espace est une séquence de 3 coordonnées. En conséquence, une liste de points de l’espace est une séquence de séquences.
(ou, si la question suivante s’affranchit de l’hypothèse uni-masse, ce que tu cherches n’est rien d’autre qu’un barycentre/centroïde.
Je ne sais pas pourquoi il est devenu à la mode d’éviter ce mot..)
Voilà quelque chose de perfectible.
Je te laisse de soin de généraliser en dimension « n » et de gérer les valeurs impossibles…
def InitPoint(x, y, z):
return x, y, z
def CntCoordPoint (M):
return len(M)
def SumPoints (N):
x=0 ;y=0 ;z=0
for I in N:
x += I[0]; y += I[1]; z += I[2]
return (x, y, z)
def DivPoints (N, d):
return (N[0]/d, N[1]/d, N[2]/d)
def AffNuage (N):
for I in N:
print (I)
def Barycentre (N):
return DivPoints(SumPoints (N), CntCoordPoint (N))
# Un point est une séquence de 3 coordonnées
A = InitPoint(12.3,-5.4,0.0258)
B = InitPoint(-6.2,7.0,0.52)
C = InitPoint(9.5,10,-8.6)
D = InitPoint(9, -6, 0.852)
E = InitPoint(-5, -2, 7)
# un nuage de points est une séquence de séquence
NuagePoints = (A, B, C, D, E)
AffNuage (NuagePoints)
print ("Barycentre des Points du nuage = ", Barycentre (NuagePoints))
PS Question subsidiaire :
Soit un ensemble de points, calculer les barycentres de sous-ensembles distincts de l’ensemble initial (dont la réunion forme l’ensemble) et calculer le barycentre des barycentres. Refaire l’exo pour une partition différente de l’ensemble initial. Conclure.
Si tu construits un array numpy de dimension 3xn, la fonction numpy.mean permet de renvoyer la moyenne sur n’importe quel axe (ici l’axe 1, celui des 10 points et non celui des 3 coordonnées) :
import numpy as np
P = np.random.rand(3,10)
print(np.mean(P, 1))
GrosGillouDu92 : ha oui en effet. Donc un machin sur lequel on peut itérer, qui a getittem « efficace » et qui sait renvoyer sa longeur. La notion ne sert pas à grand chose tellement elle est générique. D’ailleurs c’est marrant, quand on google « python sequence », on trouve plein de site qui la comprennent mal.
Bref cette notion n’a pas d’intéret quand on apprend python.
def barycentre(liste_points):
"""Renvoie les coordonnées du barycentre"""
n = len(liste_points)
somme_x = 0
somme_y = 0
somme_z = 0
for (x, y, z) in liste_points:
somme_x += x
somme_y += y
somme_z += z
return somme_x/n, somme_y/n, somme_z/n
En exercice, il est possible de remplacer les trois variables somme_ par une liste de trois valeurs, par exemple.