矩形面积交
家人们我又回来了!断更了好久我会一一补上。虽然学代码对我来讲是件蛮tough的事,但是也不能摆烂,踏踏实实学呗!
今天分享的练习题如下:
我最开始分析的时候,采用了分类讨论的方法。我的思路是如果两个矩形相交,只要能找到相交部分矩形的一对相对顶点,就能求出面积。如下图:
我开始讨论每个矩形相对顶点连线的斜率,以此通过比较每个顶点的横纵坐标大小关系,试图得出这样一对相对顶点。但是最后自己分类的情况太多,想不出来。
我看了题解。
题解是这样描述的。要想求出相交矩形的面积, 只需分别求出这个矩形在x轴和y轴对应的横纵坐标即可(如下图)。
对啊,我们可以把这两个矩形分别投影到x轴和y轴上,把二维平面转换在一维,这样大大减少了思考的难度——无非就是比较几个值的大小嘛。
那怎么求x1,x2,y1,y2呢?
显然,要用到题目的已知条件,两个矩形的相对顶点。
那么是否要考虑输入相对顶点的坐标时时我应该先输入横坐标小的再输入横坐标大的呢?即一个矩形中,这一对相对顶点的位置要考虑吗?
不然。可以观察得到,x1是每对相对顶点的横坐标中较小的那个最大的(有点绕口,看后续代码理解),x2是每对相对顶点的横坐标中较大的那个最小的。其余同理。
代码如下:
值得注意的是
1.这里的输入应当是浮点型而非整型
2.保留2位小数要会写,我这里使用了f字符串,语法格式为f"{iterable:.2f}"
3.只有满足x1<x2和y1>y2,才有交集。
好啦,今天的分享就到这里,我们明天见!