【计算几何】圆的面积并

时间:2022-04-14 08:45:05

总之,圆的面积并是一个非常漂亮的算法,虽然说好像没有很强的扩展性以及实用性,但确实训练自己计算几何代码能力的好题目。

一下皆蒯自栗师《圆的并》解题报告:

    试想,如果人来做此题,而不使用计算机计算,那么,人会采取什么样的方法呢?

首先要做一些预处理,如果一个圆完全被另一个圆包围,那么这一个圆可以删除。删除后,如果一个圆是孤立的圆,不与其它任何圆相交,就可以把这个圆的面积现算出来,也将它删去。剩下的工作就是求交点了。

对于一个圆来说,其他的某些圆覆盖了他的圆弧上的某一段,即若干个区间。那么所有的圆覆盖的部分也是若干个区间。如果有k个区间被覆盖了,也就会有k个区间没有被覆盖。这2k个区间被2k个点分开。

 

我们用若干有向弦把这些部分分开,有向是指:沿圆的逆时针方向,

 

对所有的圆都这样处理了以后,只看这些连线,有什么发现?不难发现任意一个分割点一定会有两条连线!一条连线连进来,一条连出去。并且也只会有两条连线。这个试着画就可以了,例如如果3个圆经过通过同一个点,那么其中一定有一个圆,这个点的两边的弧都被覆盖了,即这个点不是这个圆的分割点!

如果任意一个分割点都会有两条连线,那么,这些连线之间形成了若干多边形。这些多边形就是我们要求的多边形的面积。但是,这些多边形中有的面积是负的,这个只需要看这个多边形的连线是顺时针的还是逆时针的,顺的为正,逆的为负。

 

 

代码相当的短: