trouver le centre de gravité d'un groupe de points


27

Lors de la recherche sur le Web, les solutions pour trouver des centroïdes de polygones apparaissent assez souvent. Ce qui m'intéresse, c'est de trouver un centroïde d'un groupe de points. Une sorte de moyenne pondérée. J'apprécierais que quelqu'un puisse fournir des pointeurs, un pseudo-code (ou mieux encore, un package R qui a déjà résolu ce problème) ou des liens sur la manière de résoudre ce problème.

MODIFIER

La convergence est en marche (encore). iant a suggéré une méthode pour calculer la moyenne des coordonnées et l'utiliser pour le centroïde. C'est exactement ce qui m'est venu à l'esprit lorsque j'ai vu la bonne image sur cette page Web .

Voici un code R simple pour dessiner la figure suivante qui le démontre (× est le centroïde):

xcor <- rchisq(10, 3, 2)
ycor <- runif(10, min = 1, max = 100)
mx <- mean(xcor)
my <- mean(ycor)

plot(xcor, ycor, pch = 1)
points(mx, my, pch = 3)

entrez la description de l'image ici

EDIT 2

cluster::pam()$medoidsrenvoie un médoïde d'un ensemble de cluster. Voici un exemple sans vergogne volé à @Joris Meys:

library(cluster)
df <- data.frame(X = rnorm(100, 0), Y = rpois(100, 2))
plot(df$X, df$Y)
points(pam(df, 1)$medoids, pch = 16, col = "red")

1
Y a-t-il une raison pour laquelle le centre moyen ou le centre de distance minimale des points ne suffira pas?
Andy W

1
@Roman: Le graphique est incorrect: vous devez utiliser la moyenne , pas la médiane. Pour les nuages ​​de points spatiaux 2D, il existe des analogues d'un centre médian, mais ce n'est pas l'un d'entre eux (car il dépend des coordonnées): voir stats.stackexchange.com/q/1927/919 pour une discussion.
whuber

1
Je suggère également de consulter le chapitre 4 du classeur crimestat , icpsr.umich.edu/CrimeStat/files/CrimeStatChapter.4.pdf . C'est une introduction assez douce, décrit et montre graphiquement pourquoi la médiane pour les dimensions supérieures n'a pas de solution unique, et décrit d'autres mesures de la tendance centrale et de la variance des modèles de points spatiaux.
Andy W

Cela devient de plus en plus intéressant. Merci pour vos réponses. J'examine la question.
Roman Luštrik

2
"a suggéré une méthode pour calculer la moyenne des coordonnées et l'utiliser pour le centroïde." C'est, en fait, la définition du centroïde, pas simplement quelque chose qui fait une bonne approximation.
Colin K

Réponses:


43

il suffit de faire la moyenne des coordonnées X et Y (multiplier par un poids si vous le souhaitez) et il y a votre centroïde.


4
+1 Excellente solution. Il s'étend également aux centroïdes sur le sphéroïde (ce qui est essentiel pour éviter les distorsions liées à la projection lorsque les points sont répartis sur une grande partie du globe): première conversion (lat, lon) en 3D (x, y, z) ( géocentrique), les moyenne, puis reconvertissez le résultat en (lat, lon) (en ignorant le fait presque inévitable que la moyenne 3D sera profondément sous la surface).
whuber

J'ai mis à jour ma question pour refléter votre réponse.
Roman Luštrik

1

Vous pouvez utiliser la fonction centroïde du package géosphère.

https://www.rdocumentation.org/packages/geosphere/versions/1.5-5/topics/centroid


Bienvenue dans GIS StackExchange et merci d'avoir soumis une réponse. Veuillez prendre un moment pour revoir la visite pour en savoir plus sur notre format de questions / réponses ciblé. Veuillez modifier votre réponse pour inclure plus de détails car nous recherchons généralement des réponses plus longues (et non 1-2 phrases) pour aider l'affiche originale ou les futurs chercheurs. Une modification que vous pouvez faire est d'inclure une raison pour laquelle vous pensez que cet outil sera utile ou un extrait de code / captures d'écran.
smiller
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.