# 最小凸多边形的质心

#### Centroid of the minimum convex polygon

2 个回复

voronoi.mosaic中的 voronoi.mosaic 将提供三角形顶点和三角形面积的索引。 在其 output p1中， p2p3是三角形顶点的输入X的索引，而area是相应的区域。 由此我们计算xy作为三角形质心的坐标。 然后在他们计算之后的行中，我们采用他们的加权平均值来获得整体质心cen 最后我们 plot 一切。

library(tripack)

set.seed(43)

# test data
n <- 25
X <- matrix(rnorm(2 * n), ncol = 2)

vm <- voronoi.mosaic(xy.coords(X))
x <- with(vm, rowMeans(cbind(X[p1, 1], X[p2, 1], X[p3, 1])))
y <- with(vm, rowMeans(cbind(X[p1, 2], X[p2, 2], X[p3, 2])))
cen <- apply(cbind(x, y), 2, weighted.mean, vm\$area)  # centroid of conv hull

tri <- tri.mesh(xy.coords(X)) # triangularization
ch <- convex.hull(tri) # ch\$i gives indexes of vertices of conv hull

# plot points & Delauney triangularization, conv hull (red) and centroid (red)
plot(tri)
lines(X[c(ch\$i, ch\$i[1]), ], col = "red", lwd = 2)
points(cen[1], cen[2], col = "red", pch = 20, cex = 2)

（剧情后续）

## 德尔迪尔

tripack 的替代方法是使用 deldir package 来获取质心。 deldir function 在其 output del.wts中提供了对每个输入点进行加权的数量，使得它们的加权平均值是质心。 cen.dd等于上面cen的浮点近似值，plot 也类似。 chull来自 R 的基础。

library(deldir)

dd <- deldir(xy.coords(X))
cen.dd <- with(dd\$summary, sapply(list(x, y), weighted.mean, del.wts))

# plot points & triangularization, compute & plot conv hull (red) and
#  centroid (red)
plot(dd, wlines = "triang")
ix <- chull(X)
lines(X[c(ix, ix[1]), ], col = "red", lwd = 2)
points(cen.dd[1], cen.dd[2], col = "red", pch = 20, cex = 2)

## 更新

set.seed(42)
pts <- matrix(rnorm(40, 5, 1), 20, 2)
plot(pts)
# The centroid of the data points
points(t(pts.mn), pch=8, col="darkgreen", cex=2)
verts <- chull(pts)
poly <- pts[verts,]
polygon(poly)
cent <- colMeans(poly)
# The centroid of the vertices
points(t(cent), pch=8, col="blue", cex=2)

poly <- rbind(poly, poly[1, ])
n <- nrow(poly)
x <- rev(poly[, 1])
y <- rev(poly[, 2])
i <- 1:(n-1)
# Area of the polygon
A <- sum(c(x[i] * y[i+1] - x[i+1] * y[i])) / 2
# Coordinates of the centroid
Cx <- sum((x[i] + x[i+1]) * (x[i] * y[i+1] - x[i+1] * y[i])) / (6 * A)
Cy <- sum((y[i] + y[i+1]) * (x[i] * y[i+1] - x[i+1] * y[i])) / (6 * A)
# The centroid of the polygon
points(Cx, Cy, pch=8, col="red", cex=2)

1 Python：最小凸多边形？

2017-05-07 06:56:55 1 252   plot
3 Scipy：凸包的质心

2015-07-22 12:02:07 4 4904   convex
4 凸多面体的质心

5 查找多边形的质心

6 多边形的面积和质心

2016-02-27 16:22:43 1 159   c
7 找到多边形的质心？

8 多边形的面积和质心：实用

9 在 r 中标记多边形的质心

10 查找多边形区域的质心