在使用matlab解决一些与覆盖有关的问题时,我们有时候需要考虑覆盖边界的覆盖率问题。在数学建模时我就遇到了类似问题,最终想出了解决方案,在这里放出代码,以飨读者。代码没有被修改以使得其更加普适,希望读者能自己动动手改下,自己动手丰衣足食嘛(

譬如,在解决捕鱼问题时,我们会考虑到一个渔民只会在以他的渔船的位置为圆心,取一定半径的圆内捕捞,于是我们会只把在这个圆内的数据考虑在内,对这些数据再进行选用(譬如,把这个圆内的数据累加起来,表示这个渔民可以达到的最大捕捞量),但是很多时候我们的数据并不是连续的,在绝大部分情况下都是离散的,他们分布在地图上被划分为1x1的方格上:

这个时候,如果我们再采用圆覆盖的方法,我们就不得不计算出被圆的一部分覆盖(而未完全覆盖)的那些方格的覆盖率。

当然,我们可以使用直线近似(精度低),手动积分(操作麻烦)的方法来计算圆的边界覆盖率,但缺陷也是很明显的。

一个较为聪明的方法是使用polyarea函数,这个函数需要你提供一个点的x,y序列,然后它会计算出这个点序列所围成的多边形的面积。

这里我把这个计算函数再傻瓜化了一下,使得你可以输入函数、x范围、y范围(必要时你可以手动调节精度),就可以得出一个椭圆覆盖矩阵,如下图,一个长轴为6,短轴为3的椭圆的覆盖矩阵:

把它缩小,眯着眼睛看你会发现边界似乎消失了,这个图形变成了一个椭圆(或许),这个也算是一种常用的抗锯齿解决方案吧(我胡诌的)

希望下面的代码能帮到你:

代码: https://pastebin.ubuntu.com/p/fNxhHyyTBY/