问题
对于两个旋转的矩形求相交的面积
输入: 矩形1的4个点 [(ax1, ay1), (ax2, ay2), (ax3, ay3), (ax4, ay4)]
矩形2的4个点 [(bx1, by1), (bx2, by2), (bx3, by3), (bx4, by4)]
输出: 矩形1和矩形2相交的面积
求解流程
- 将4个点按照时钟序排列(我实现的是逆时针)
- (PS:这一步不重要,我只是为了利用python里给定的函数求交点必须要转成这个数据结构)得到矩形的数据结构表示 ((x,y), (w,h), angle) #(x,y)表示矩形的中心点, (w,h)表示边长,w不一定大于h,而是w表示y值最小的点(如果相等就x最小)右侧的边长,同理h表示左侧的边长。angle表示为度数(360度一圈),是w对应的边长和x轴正方向的夹角。
- 求解出两个矩形相交的点以及某个矩形的顶点落在另一个矩形内的点集合S
- 对S求个凸包 hull
- hull是个凸多边形,根据向量的叉积求解面积即可(如找到一个点p,将每一条边都和这个点相连的三角形通过叉积求面积进行加和)
利用的函数
- scipy.spatial.ConvexHull 求凸包
- cv2.rotatedRectangleIntersection(rect1, rect2) 求两个矩形的交点(就是我第三步所说)
- cv2.contourArea 求多边形的面积
python代码实现
|
|