首页 > 其他分享 >矩形

矩形

时间:2023-09-05 20:44:17浏览次数:31  
标签:重叠 int max 线段 轴上 矩形

目录

矩形

应用

应用1:Leetcode.223

题目

223. 矩形面积

给你 二维 平面上两个 由直线构成且边与坐标轴平行/垂直 的矩形,请你计算并返回两个矩形覆盖的总面积。

每个矩形由其 左下 顶点和 右上 顶点坐标表示:

  • 第一个矩形由其左下顶点 (ax1, ay1) 和右上顶点 (ax2, ay2) 定义。

  • 第二个矩形由其左下顶点 (bx1, by1) 和右上顶点 (bx2, by2) 定义。

示例 1:
Rectangle Area

输入:ax1 = -3, ay1 = 0, ax2 = 3, ay2 = 4, bx1 = 0, by1 = -1, bx2 = 9, by2 = 2
输出:45

解题思路

两个矩形覆盖的总面积等于两个矩形的面积之和减去两个矩形的重叠部分的面积。

由于两个矩形的左下顶点和右上顶点已知,因此两个矩形的面积可以直接计算。如果两个矩形重叠,则两个矩形的重叠部分也是矩形,重叠部分的面积可以根据重叠部分的边界计算。

两个矩形的在坐标轴上的投影:

  • 水平边投影到 \(x\) 轴上的线段分别为 \([a_{x1},\ a_{x2}]\) 和 \([b_{x1}, b_{x2}]\) ,

  • 竖直边投影到 \(y\) 轴上的线段分别为 \([a_{y1}, a_{y2}]\) 和 \([b_{y1}, b_{y2}]\)。

如果两个矩形重叠,则对于重叠部分:

  • 水平边投影到 \(x\) 轴上的线段为 \([max(a_{x1}, b_{x1}), min(a_{x2}, b_{x2})]\);

  • 竖直边投影到 \(y\) 轴上的线段为 \([max(a_{y1}, b_{y1}), min(a_{y2}, b_{y2})]\)。

根据重叠部分的水平边投影到 \(x\) 轴上的线段长度和竖直边投影到 \(y\) 轴上的线段长度,即可计算重叠部分的面积。

只有当两条线段的长度都大于 0 时,重叠部分的面积才大于 0,否则重叠部分的面积为 0。

代码实现

class Solution:
    def computeArea(self, ax1: int, ay1: int, ax2: int, ay2: int, bx1: int, by1: int, bx2: int, by2: int) -> int:
        # 先求重叠部分的长和宽
        x = max(0, min(ax2, bx2) - max(ax1, bx1))
        y = max(0, min(ay2, by2) - max(ay1, by1))
        # 总面积=两个矩形的面积 - 重合部分的面积
        return (ax2 - ax1) * (ay2 - ay1) + (bx2 - bx1) * (by2 - by1) - x * y

标签:重叠,int,max,线段,轴上,矩形
From: https://www.cnblogs.com/larry1024/p/17680737.html

相关文章

  • 吃透单调栈(2)——解两道Hard题:接雨水、柱状图中最大的矩形问题
    怎么想到要用单调栈的?这类题目的数据通常是一维数组,要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置(寻找边界),此时我们就要想到可以用单调栈了。 42. 接雨水这道题就是要求解每一个柱子左边第一个比它高的柱子,以及右边第一个比它高的柱子,然后这两个柱子间形......
  • Python 实现 定义个矩形类,有长和宽两个实例属性,还有一个计算面积的方法
    思路:'''1.定义矩形类2.定义属性属性分:类属性和实例属性实例属性==》self.属性===》self是一个参数在一个方法中==》_init_方法3.定义方法defArea(self):s=self.length*self.width'''classSquare:def__init__(self,length,width):#实例属性sel......
  • 矩形面积和
    Smiling&Weeping----人的情况和树相同。它愈想开向高处和明亮处,它的根愈要向下,向泥土,向黑暗处,向深处,向恶。 题目链接:Problem-1255(hdu.edu.cn)求出覆盖多......
  • 【剑指Offer】10、矩形覆盖
    【剑指Offer】10、矩形覆盖题目描述:我们可以用2X1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2X1的小矩形无重叠地覆盖一个2Xn的大矩形,总共有多少种方法?解题思路:我们可以以2X8的矩形为例。先把2X8的覆盖方法记为f(8),用1X2的小矩形去覆盖时,有两种选择:横着放或......
  • 矩形的对角线经过的小方格数量
    题目:  对于一个长度为m,宽为n的矩形,均分成m*n的小方格,求从左上角到右下角的对角线穿过多少个小方格?题解1:#include<iostream>#include<cmath>usingnamespacestd;intmain(){intn=1,t,a1=0,b1=0,a2,b2;//n计数器,a1、b1上一次统计过的长、宽方向......
  • c# - 如何在圆角 WPF 窗体中创建圆角矩形?
    我正在WPF中创建一个应用程序,我想要圆角。收到。现在窗体是无边框的,我正在尝试创建一个圆角矩形并将其放在顶部,使其看起来像Windows应用程序的顶部栏。我做不到。这是我的代码:<BorderCornerRadius="50,0,50,0"BorderBrush="Black"BorderThickness="2"Background="......
  • java opencv在图片上绘制 矩形
    javaopencv在图片上绘制矩形 packagecom.vfsd.core;importorg.opencv.core.Core;importorg.opencv.core.CvType;importorg.opencv.core.Mat;importorg.opencv.core.Point;importorg.opencv.core.Rect;importorg.opencv.core.Scalar;importorg.opencv.highgu......
  • Vue中实现矩形和虚线的分离
    要在Vue中实现矩形和虚线的分离,你可以使用Vue的模板语法和样式绑定来实现。下面是一个示例代码,展示了如何使用Vue实现一个具有矩形和虚线的分离效果:<!DOCTYPEhtml><html><head><title>矩形和虚线分离</title><style>.rectangle{width:200px;......
  • C# picturebox画矩形、圆
    usingSystem;usingSystem.Collections.Generic;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;namespace自定义画矩形{///<summary>///类型:1、画矩形2、画圆///绘制按钮:drawState=t......
  • opencv检测黑色轮廓(矩形)
    opencv检测黑色轮廓:importcv2importnumpyasnpclassShapeDetector:def__init__(self,image_path):self.image_path=image_pathself.img=cv2.imread(self.image_path)#读取图像self.imgContour=self.img.copy()#创建一个用......