如何求两个矩形的公共面积?
看到这个问题,首先应该打破思维定式,不要觉得两个矩形一定是终归中规中矩地放着,很有可能是斜着放的。
如果把矩形当成正着放,那么这个问题比:如何求两个三角形公共面积还要简单。
把问题变得简单通常有三种思路
- 具体问题具体分析,发现问题的特殊之处,利用问题的特殊性解决之,这种思路叫做把问题看小了。
- 把问题想得更通用、更一般化,这样往往能够使得问题描述简单,使思路升高一个维度俯视问题,问题就变得很一般。全景视角能够发现这些子问题之间的联系。
- 如果总是惦记着前面两种思路,思维就会不集中,很多时候想问题没必要想太多,直接按照最简单、最直观的方法一条路走下去就是了。方法无所谓好无所谓坏。
求两个矩形的公共面积可以更通用化为:求两个凸多边形的公共面积。
这个问题有一个直观而暴力的思路:
- 首先求出平面图上的所有关键点,关键点包括线段交点、凸多边形顶点,记做顶点集A
- 过滤一下不属于公共部分的点。对于A中的每个点x,如果x不在两个凸多边形的内部,则删除掉x
- A中剩余的点可以构成一个凸多边形,因为两个凸多边形的交点必然也是凸多边形。给定一个凸多边形的顶点集合,这个凸多边形是唯一的,可以用凸包算法求出。经过此步,A中的点变成了一个序列。实际上,凸包算法针对的是一堆点,而此问题中已经确定这些点都是凸多边形边上的点,所以直接找到一个点,从此点向其余点发出射线,按照射线角度对点排序,就得到了有序的凸多边形点序列。
- A中的点构成凸多边形,问题变成求凸多边形的面积。
如何求两个凹多边形的公共面积?任何一个平面多边形都是由若干个三角形组成的。只需要求两个三角形组中两两三角形的公共面积。
参考资料
https://blog.csdn.net/xtulollipop/article/details/52357595
知网