найти центр тяжести группы точек

27

При поиске в Интернете решения для поиска центроидов многоугольников появляются довольно часто. Что меня интересует, так это нахождение центроида группы точек. Взвешенное среднее сорта. Я был бы признателен, если бы кто-то мог предоставить некоторые указатели, псевдокод (или, что еще лучше, пакет R, который уже решил эту проблему) или ссылки о том, как можно решить эту проблему.

РЕДАКТИРОВАТЬ

Конвергенция была в движении (снова). Iant предложил метод усреднения координат и использовать его для центроида. Это именно то, что пришло мне в голову, когда я увидел правильную картинку на этой веб-странице .

Вот некоторый простой R-код для рисования следующего рисунка, демонстрирующего это (× - центроид):

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)

введите описание изображения здесь

РЕДАКТИРОВАТЬ 2

cluster::pam()$medoidsвозвращает medoid из набора кластеров. Это пример бесстыдно украденного у @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
Есть ли причина, по которой средний центр или центр минимального расстояния точек будет недостаточным?
Энди Ш
1
@Roman: Графика неверна: вам нужно использовать среднее , а не медиану. Для двумерных пространственных облаков точек существуют аналоги медианного центра, но это не один из них (поскольку он зависит от координат): см. Обсуждение в stats.stackexchange.com/q/1927/919 .
whuber
1
Я также предложил бы проверить главу 4 рабочей тетради по преступности, icpsr.umich.edu/CrimeStat/files/CrimeStatChapter.4.pdf . Это довольно нежное введение, описывает и графически показывает, почему медиана для более высоких измерений не имеет единственного решения, и описывает другие меры центральной тенденции и дисперсии пространственных точечных паттернов.
Энди Ш
Это становится все более и более интересным. Спасибо за ответ. Я смотрю на это.
Роман Луштрик
2
«предложил метод усреднения координат и использовать его для центроида». На самом деле это определение центроида, а не просто то, что дает хорошее приближение.
Колин К

Ответы:

43

просто усредните координаты X и Y (умножьте на вес, если хотите), и ваш центр тяжести окажется.

Ян Тертон
источник
4
+1 Отличное решение. Он распространяется и на центроиды на сфероиде (что важно для предотвращения искажений, связанных с проекцией, когда точки распределены по большой части земного шара): сначала преобразуйте (широта, долгота) в 3D (x, y, z) ( геоцентрические) координаты, усредните их, затем конвертируйте результат обратно в (широта, долгота) (игнорируя почти неизбежный факт, что трехмерное среднее будет глубоко под поверхностью).
whuber
Я обновил свой вопрос, чтобы отразить ваш ответ.
Роман Луштрик
1

Вы можете использовать функцию центроида из пакета геосфера.

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

Леонардо Лейте Ферраз де Кампо
источник
Добро пожаловать в ГИС StackExchange и спасибо за отправку ответа. Пожалуйста, уделите время ознакомлению с Туром, чтобы узнать о нашем формате вопросов и ответов. Пожалуйста, отредактируйте свой ответ, чтобы включить больше деталей, поскольку мы обычно ищем более длинные (не 1-2 предложения) ответы, чтобы помочь оригинальному постеру или будущим пользователям. Одна из модификаций, которую вы можете сделать, - указать причину, по которой вы считаете этот инструмент полезным, или фрагмент кода / снимки экрана.
Smiller