安卓手机扫描二维码安装App

如何衡量一个平面内不规则封闭曲线「趋近圆形」的程度?



转知乎问题(转前没联系作者,侵删)

如何衡量一个平面内不规则封闭曲线「趋近圆形」的程度?


谜之枪兵X




就喜欢这种没有标准答案的问题,很刺激思考。下面是一堆思考。


第一层



我们都知道圆是相同面积的平面图形中周长最短的。那么,记平面图形的周长为 [公式] 、面积为 [公式] ,可以说 [公式] 越小、 [公式] 越大,这个图形就越“不像圆”。


那么,“圆度”首先应该是随 [公式] 增大而增大,随 [公式] 增大而减小的。考虑到周长和面积直接相加减无意义,我们可以选 [公式] 作为一个圆度。


但是不好。考虑任意半径为 [公式] 的圆,周长为 [公式] ,面积为 [公式] 。按照刚刚的圆度公式计算会得到 [公式] 。这么说的话,岂不是半径越大的圆,圆度越大?


半径越大圆度越大是不符合直觉的。直觉来说,不同大小的圆,其圆度不应该有差别,不同大小的正方形也一样。换句话说,我们希望相似的图形能有相同的圆度。再换句话说,我们希望圆度“没有单位”——用量纲分析(dimensional analysis)的语言来说,就是希望圆度的量纲像角度一样是 [公式]



第二层


那这好说。我们知道圆的周长是 [公式] ,那么在原来的圆度公式上再多除一个 [公式] ,就可以把这个导致图形越大圆度越大的 [公式] 约去了。这样得到的圆度公式变成 [公式] ,这样一来任意圆的圆度就都是

[公式]

这个定值了。不过因为这个东西名字叫“圆度”,最好还是让圆本身的圆度是 [公式] ,那么再乘上一个系数 [公式] ,这样一来就得到了新的圆度公式 [公式] 。(为了省事,下文统一省略圆度最后的 [公式] 。)



多拿几个图形算一下圆度试试看:


  • 正方形:边长设为 [公式] ,则周长为 [公式] ,面积为 [公式] ,圆度为 [公式]
  • 正三角形:边长设为 [公式] ,则周长为 [公式] ,面积经过一番计算可得为 [公式] ,圆度为 [公式]

很好,那就这么愉快地决定圆度是 [公式] 了。



看来这个已经是相当好的圆度了,而且也符合正多边形边数越多形状越圆的直觉。那么,也该接受这是圆度的标准了吧——

才怪咧!从刚刚开始,就一直在说什么 [公式][公式] 啊,是不是已经忘记题主的问题了?“比如湖泊,一摊水,海洋的边缘”。我们都知道湖岸海岸这类平面图形是分形——具体来说,是一种周长无限大的分形,所以根本就没有 [公式] 。就算我们勉强把无限大代进去,并且接受有限值除以无限大会得到 [公式] ,到头来算出的也会变成“任何形状的海洋圆度都是 [公式] ”这样的无稽之谈。



这样就来到了我们的又一个直觉:我们希望对于所有的——或者至少是尽量多的——封闭曲线都能计算圆度。(这里姑且认为封闭曲线上除了封闭、连续两个条件还有“不自交”的条件,也就是不讨论形如“∞”的曲线;这样的话根据若尔当曲线定理,起码“封闭曲线的内部”“封闭曲线的外部”“封闭曲线围成的面积”还是有意义的。)

顺便一提,湖泊、海洋一类区域的分形边界是连续但不可导的,所以曲率也没有定义;想基于“圆是曲率恒定的封闭曲线”构造圆度,也是必然解决不了湖泊海洋这类问题的。看来除了“内部”“外部”“围成的面积”保证存在之外,好像没有什么好用的东西了。



第三层



那么,我们试试看在我们的不规则曲线上面叠一个面积相同的圆形,直接看它们有多重叠吧——这应该是最不违反直觉的了,而且因为只看“面积”和“内外部”判断,也不会出现对于分形没有定义的现象了。把平面曲线内部的点的集合称为 [公式] 、同等面积的圆称为 [公式] 、圆内部的点的集合称为 [公式] 的话,可以列出这样的圆度公式:

[公式]

那个积分式表达的就是“平面曲线与同等面积的圆重合部分的面积”。考虑到还没决定同等面积的圆摆在哪儿,前面要再加一个“对 [公式] 选取最大值”,表示选取同等面积的圆的时候要以尽量增加重合面积的方式选取(否则只要把圆选在距离平面曲线很远的位置,重合面积就变成 [公式] 了)。不难发现,这样的话这个重合面积对于本身就是圆的平面曲线来说就会是 [公式] 本身,所以在下面除以一个 [公式] 就又得到一种对圆来说是 [公式] 的圆度了。



这一层开始出现了微积分记号,所以计算也会变得复杂很多,即使对于简单的正多边形也是这样。不过简单画画图不难发现,按照这个计算方法还是正方形的圆度会大于正三角形的,所以也算是不违反直觉。



但是,只考虑不重合的面积,不考虑不重合的面积是怎么分布的,还是有些不太好。考虑从一个圆的两侧对称地切掉两条,然后在圆的其他部分对称地增加等于这两条的面积:如果增加的面积比较“平缓”,那么得到的图形就比较圆;如果增加的面积比较“高耸”,那么得到的图形也就没那么圆了。但是可以证明,只要切掉和增加的过程保持对称,而且切掉的面积一样大(而且不要过大),那么不管以什么方式补回切掉的面积,得到的图形都会有一样的圆度。

另一个类似的反例还会得到更为荒唐的结论。考虑两个圆中间有一细条连接的“哑铃形”,不难发现选取同等面积的圆时,重叠面积最大的选法应该是让这个圆包住“哑铃形”的其中一端。现在保持两个圆的面积不变,缩减细条的宽度并加大其长度;不难发现这个过程中整个图形的圆度始终维持在稍小于 [公式] (因为几乎占 [公式] 面积的“哑铃头”始终位于重叠部分中),但是却可以无限拉长,而直觉来看一个很长的图形不管两端有多圆,整体都远远说不上圆——不如说圆度趋于 [公式] 才是我们想要的。



这次构造的“违反直觉的例子”和前两次不太一样:前两次都是只从最简单的情况就挑出了毛病,这一次则是针对这个具体构造来量身定做违反直觉的例子。不过无论如何,我们还是希望如果不重合的面积到圆周的距离比较大的话,算出的圆度应该低一些,而且计算重合面积的参考圆最好尽量位于图形的“中心”而非“重合最多处”,以应对这些精心构造的不断拉长的反例(pipi美拉长.avi)。



第四层



为了应对刚刚提出的两条直觉的第一条,我们希望给不重合的面积加一个“权重”,让这个“权重”随着到圆周的距离增大而增大。初中学过数学竞赛的同学应该知道“圆幂(power of circle,circle power,power of point)”的概念——以点到圆心的距离 [公式] 和圆的半径 [公式] 为基础,定义为 [公式] ;不难发现,圆幂的绝对值是随着点到圆周的距离增大而增大的。(当然,还有 [公式][公式] 等诸多方式可以表征一个点到一个圆周的距离;这里选择圆幂作为表征不完全是任意的,具体理由后面会详细解释。)

为了应对这两条直觉的第二条,我们需要有个选“中心”的方法。我们平时说“中心”,很多时候指的就是“平均值”;因此,如果用微积分的语言表示“曲线内部所有点的位置的平均值”,想必可以很好地作为一个中心了。那么,怎样才能求出曲线内部所有点位置(坐标)的平均值呢?

先考虑有限点集 [公式] 中所有点坐标的平均值——这个很容易写出,就是 [公式] 。接下来推广:分子很容易推广到无限点集,只要把求和适当改写成积分(不清楚的话我下次找个机会好好写一下从求和到积分是怎么推广出来的);分母要推广到无限点集就有些麻烦,因为无限点集没有点的数量一说,但是只要注意到 [公式] ,推广就显而易见了——“中心”位置的微积分表示就是下式,这样算出的“中心”术语叫作这个平面曲线围成的平面图形(或者也可以直接说点集——前面这个点集的符号是 [公式] ,这里也沿用)的“形心(centroid)”,相当于平面曲线围成的均匀薄片的质心:

[公式]

有了形心坐标的公式,接下来就可以开始推导我们想要的圆度了。为了减少计算量,下面要改换坐标系,直接以 [公式] 的形心(也就是 [公式] 的圆心)为原点建立;为了表示方便,下面把 [公式] 的半径 [公式] 记作 [公式]

首先,考虑在 [公式] 内而不在 [公式] 内的点(注意 [公式] 的圆心在形心),对其圆幂进行积分,为 [公式] ;再考虑在 [公式] 内而不在 [公式] 内的点(不能只考虑前者而不考虑这个,因为对这部分点同样适用前面的“拉长”论证),对其圆幂的绝对值(因为在圆内,所以就是圆幂的相反数)进行积分,为 [公式] 。二者相加,就可以得到一个表征 [公式] 的“不圆度”的数值

[公式]

接下来要来一点集合论。我们知道 [公式][公式] 交集为空、并集为 [公式] ,那么同一函数在前两者上的积分之和就是在后者上的积分。由此,我们又可以把不圆度改写为

[公式]

我们看到这个“不圆度”可以表示为对 [公式][公式] 的同一个积分的差——对于一个图形来说这个积分 [公式] (不要忘记这里的坐标是以形心为原点的)也有个名字,叫作这个图形关于形心的面积二次矩(second moment of area),通常记作 [公式] 。熟知刚体力学的同学们看到这里可能已经喜极而泣了:常见图形关于形心的面积二次矩有表可查,不用总是计算个没完了;查到图形和同样面积的圆关于形心的面积二次矩,作差,就得到了这里的“不圆度”。之前我选择圆幂作为点到圆周的距离的表征,就是因为经过推导可以最终导向很好查的这个二次矩。

由推导过程(最开始“不圆度”定义为两个非负的积分之和)可以看出,这个“不圆度”下限是 [公式] ;考虑之前的哑铃形例子,不难看出这个“不圆度”上不封顶。换句话说,就是 [公式] 且前者上不封顶,那就不难发现我们完全可以采取 [公式] 作为我们想要的处于 [公式] 区间中的圆度表征了。查一下圆形的面积二次矩,可以把这个式子进一步变形:

[公式]

此外, [公式] 有一个专门的名字,叫作“回转半径(radius of gyration)”,通常记作 [公式] ,和二次矩一样有表可查(注意有的表中回转半径是关于平面内过形心的转轴的,不能直接用,需要用垂直轴定理(perpendicular axis theorem)转化为对形心的回转半径——具体暂且略过)。从推导过程中不难发现,同面积的均匀二维薄片中,回转半径最小的就是圆形薄片。用回转半径表示的话,圆度就可以非常非常优雅地写作 [公式]



经过一番推导,终于得到了一个有表可查的好算的东西。那么,算一下这个方案下一些东西的“圆度”吧:


  • 正方形边长为 [公式] 时,查表可得回转半径为 [公式] ,圆度为 [公式]
  • 正三角形边长为 [公式] 时,查表可得回转半径为 [公式] ,圆度为 [公式]

还是正方形圆度更大,没有问题。



——其实到这里我就想不出什么“转”了;非要说的话,可能正方形和正三角形的圆度看起来有点过大,但这不是什么大问题,加个伽马校正——我是说算完之后再额外统一取个平方或者三次方之类——就不那么大了。不过想想看各种奇形怪状的树枝形,正方形和正三角形确实也算是挺圆的,这个圆度似乎问题也不大。大家怎么看呢?这个基于回转半径的结果真的就是我们要追求的那个“圆度”吗?



那么开始讨论吧。



作者:谜之枪兵X

链接:https://www.zhihu.com/question/353380709/answer/876979510

来源:知乎

苹果手机扫描二维码安装App