You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中正确计算多边形的质心?

正确计算多边形质心的方法

你当前用np.mean直接计算顶点坐标的平均值,得到的是顶点的几何中心,而非多边形的面积加权质心(形心),这就是结果不符的原因。多边形质心需要考虑每个顶点构成的小区域的面积权重,具体计算步骤和代码如下:

核心计算公式

对于按顺时针/逆时针顺序排列的多边形顶点$(x_1,y_1),(x_2,y_2),...,(x_n,y_n)$(首尾点重合),质心$(C_x,C_y)$的计算依赖于面积加权:

  1. 先计算多边形总面积$A$:
    $A = \frac{1}{2} \sum_{i=0}^{n-2} (x_i y_{i+1} - x_{i+1} y_i)$
  2. 再计算质心坐标:
    $C_x = \frac{1}{6A} \sum_{i=0}^{n-2} (x_i + x_{i+1})(x_i y_{i+1} - x_{i+1} y_i)$
    $C_y = \frac{1}{6A} \sum_{i=0}^{n-2} (y_i + y_{i+1})(x_i y_{i+1} - x_{i+1} y_i)$

实现代码

import numpy as np

points = np.array([(0,0), (70,0), (70,25), (45,45), (45,180), (95,188), (95,200), (-25,200), (-25, 188), (25,180), (25,45), (0,25), (0,0)])

# 提取坐标,去掉最后一个重复的首尾点
x = points[:-1, 0]
y = points[:-1, 1]
x_next = points[1:, 0]
y_next = points[1:, 1]

# 计算每个相邻顶点对的交叉项
cross_terms = x * y_next - x_next * y

# 计算多边形面积
area = 0.5 * np.sum(cross_terms)

# 计算质心坐标
centroid_x = (1 / (6 * area)) * np.sum((x + x_next) * cross_terms)
centroid_y = (1 / (6 * area)) * np.sum((y + y_next) * cross_terms)

print(f"Centroid: [{centroid_x:.4f}, {centroid_y:.4f}]")

输出结果

运行代码后会得到与预期一致的结果:

Centroid: [35.0000, 100.4615]

内容的提问来源于stack exchange,提问作者Victor Soares

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 20:22:21