Вы можете легко вычислить его с помощью этой функции
getCentroid <- function(x, width = 1) {
A <- x * width # area of each bar
xc <- seq(width/2, length(x), 1) # x coordinates of center of bars
yc <- x/2 # y coordinatey
cx <- sum(xc * A) / sum(A)
cy <- sum(yc * A) / sum(A)
return(list(x = cx, y = cy))
}
points(getCentroid(x), col = 'red', pch = 19)
Примечания. Ширина каждого стержня по умолчанию равна 1. Координата x центра масс двух стержней может быть вычислена по формуле
![введите здесь описание изображения](https://i.stack.imgur.com/7cUlym.png)
То же самое относится и к координате y. Это может быть расширено до большего количества баров.
![введите здесь описание изображения](https://i.stack.imgur.com/8j5S6m.png)
Поскольку у нас нет идеального треугольника, всегда будет ошибка, если мы будем сравнивать центроиды. Например, взяв бары с одинаковой разницей в высоте, например
x <- seq(0, 1, length.out = 1000)
(где первая полоса имеет высоту 0) всегда будет давать ошибку в координате x 1/6 (2000/3 по сравнению с 666,83333) . Причина в недостающей площади из-за того, что у нас нет идеального треугольника. Эта отсутствующая площадь равна 0,5 (подумайте о разнице в высоте и умножьте ее на ширину полосы. Суммируя это по всем полосам и разделив на 2, получается....).
person
Martin Schmelzer
schedule
04.08.2017