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

多边形形心可位于图形外部的数学证明及技术疑问

多边形形心可位于图形外部的数学证明及技术疑问

嘿,你的观察特别有意思!其实完全有可能出现多边形的面积形心(就是你用鞋带公式计算的那种基于面积加权的重心)落在多边形边界之外的情况,咱们可以从数学推导和实际例子两方面来聊清楚这件事。

一、为什么形心会跑到多边形外面?

首先得明确:咱们说的是面积形心,它和顶点的平均重心不是一回事,是基于多边形所有微小面积元的加权平均。这种重心在两类多边形里很容易跑到外部:

1. 带洞的多连通多边形

最直观的例子就是带洞的多边形,比如一个大正方形内部挖掉一个几乎和它一样大的小正方形,剩下的是一圈窄边框。用你给出的公式计算的话:

  • 大正方形面积$A_1=100$,形心$(5,5)$
  • 内部小正方形面积$A_2=64$,形心也是$(5,5)$
  • 边框的面积$A=A_1-A_2=36$,形心坐标为$\frac{A_1\times5 - A_2\times5}{A} = 5$,$\frac{A_1\times5 - A_2\times5}{A}=5$
    这个$(5,5)$正好在中间的洞里——而洞是不属于多边形的区域,也就是形心跑到了多边形外部。

2. 自相交的星形多边形

比如五角星(五芒星)这种自相交的复多边形,它的面积形心会落在中心的空白区域,完全不在五角星的任何一条“臂”里面。用鞋带公式代入顶点坐标计算,就能得到这个落在空白区的形心坐标。

3. 多部件多边形(MultiPolygon)

回到你处理的加拿大地理数据,那些看起来有多个“形心”的多边形,大概率是多部件多边形——比如某个行政区域包含大陆主体和多个远海小岛。st_centroid()函数默认会计算整个MultiPolygon的全局形心,这个形心很可能落在所有部件的外部:比如一个包含大陆和小岛的区域,全局形心可能落在海洋里,自然不在任何一个岛屿或大陆的范围内。而你用的st_point_on_surface()会给每个部件生成一个内部点,所以看起来像多个形心,但那其实是每个子区域的表面点,不是全局形心。

二、用你给出的公式验证

你贴的鞋带公式是针对简单多边形(单连通、不自相交)的,但扩展到复多边形时,我们可以用“正负面积”的思路处理(比如带洞的多边形用大多边形面积减去洞的面积,或者用顶点的顺/逆时针顺序区分正负面积)。当计算这类多边形的形心时,面积加权的结果就可能指向多边形没有覆盖的区域,这就是形心在外的数学本质。

这里补充个小知识点:**简单凹多边形(单连通、不自相交)**的面积形心其实一定在多边形内部,因为它是连通的,所有面积元的加权平均必然落在多边形的凸包内部且属于多边形本身。但复多边形就没有这个限制。

三、结合你的R代码分析

看你的代码,st_centroid()和st_point_on_surface()的区别很关键:

  • st_point_on_surface():保证返回的点在多边形(或每个子部件)的内部,适合用来标记每个区域的实际位置。
  • st_centroid():计算的是全局面积形心,对于MultiPolygon来说,完全可能落在所有部件的外部,这就是你看到有些红点在多边形外面的原因。

总结一下:数学上,复多边形(带洞、自相交、多部件)的形心完全可以落在多边形外部,这是面积加权平均的性质决定的。你在地理数据中遇到的情况,就是多部件多边形的全局形心跑到了部件之外的典型例子。

备注:内容来源于stack exchange,提问作者stats_noob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 15:27:58