题目描述

给出3组点坐标(x, y, w, h),-1000<x,y<1000,w,h为正整数。

(x, y, w, h)表示平面直角坐标系中的一个矩形:

x, y为矩形左上角坐标点,w, h向右w,向下h。

(x, y, w, h)表示x轴(x, x+w)和y轴(y, y-h)围成的矩形区域;

(0, 0, 2, 2)表示 x轴(0, 2)和y 轴(0, -2)围成的矩形区域;

(3, 5, 4, 6)表示x轴(3, 7)和y轴(5, -1)围成的矩形区域;

求3组坐标构成的矩形区域重合部分的面积。

输入描述
3行输入分别为3个矩形的位置,分别代表“左上角x坐标”,“左上角y坐标”,“矩形宽”,“矩形高” -1000 <= x,y < 1000

输出描述
输出3个矩形相交的面积,不相交的输出0。

用例
输入

1 6 4 4
3 5 3 4
0 3 7 3

输出

2

说明
在这里插入图片描述

矩形重叠面积计算算法详解

核心解题思路

本题目要求计算三个矩形重合部分的面积。核心思路是通过分析矩形在x轴和y轴上的投影,确定三个矩形共同重叠的区域。解题步骤如下:

关键步骤

  1. 矩形坐标转换

    • 每个矩形由左上角坐标(x,y)、宽度w、高度h定义
    • x轴投影:左边界x,右边界x + w
    • y轴投影:由于坐标系向下为负,上边界y,下边界y - h
  2. 重叠区域确定

    • x轴重叠:取三个矩形左边界最大值作为重叠左边界,右边界最小值作为重叠右边界
    • y轴重叠:取三个矩形上边界最小值作为重叠上边界,下边界最大值作为重叠下边界
    • 重叠宽度:重叠右边界 - 重叠左边界
    • 重叠高度:重叠上边界 - 重叠下边界
  3. 面积计算

    • 当重叠宽度和高度都为正时,面积 = 宽度 × 高度
    • 否则面积为0

完整代码实现

def main():# 读取三个矩形的参数rects = []for _ in range(3):data = input().split()# 转换为浮点数处理(题目整数但为统一接口)x = float(data[0])y = float(data[1])w = float(data[2])h = float(data[3])rects.append((x, y, w, h))# 计算三个矩形的x轴重叠区域left_bound = max(rects[0][0], rects[1][0], rects[2][0])right_bound = min(rects[0][0] + rects[0][2], rects[1][0] + rects[1][2], rects[2][0] + rects[2][2])# 计算三个矩形的y轴重叠区域top_bound = min(rects[0][1], rects[1][1], rects[2][1])bottom_bound = max(rects[0][1] - rects[0][3],rects[1][1] - rects[1][3],rects[2][1] - rects[2][3])# 计算重叠区域的宽度和高度width = right_bound - left_boundheight = top_bound - bottom_bound# 计算重叠面积(当宽度和高度都为正时)if width > 0 and height > 0:area = width * heightelse:area = 0# 输出整数部分(题目要求整数)print(int(area))if __name__ == "__main__":main()

算法原理解析

1. 矩形投影原理

# 矩形在x轴投影:[x, x + w]
# 矩形在y轴投影:[y - h, y]
  • x轴:从左边界x到右边界x+w
  • y轴:从下边界y-h到上边界y(注意坐标系向下为负)

2. 重叠区域计算

# x轴重叠
left_bound = max(rect1_x, rect2_x, rect3_x)
right_bound = min(rect1_x + w1, rect2_x + w2, rect3_x + w3)# y轴重叠
top_bound = min(rect1_y, rect2_y, rect3_y)
bottom_bound = max(rect1_y - h1, rect2_y - h2, rect3_y - h3)
  • 左边界:取三个矩形左边界最大值(最右边的左边界)
  • 右边界:取三个矩形右边界最小值(最左边的右边界)
  • 上边界:取三个矩形上边界最小值(最靠下的上边界)
  • 下边界:取三个矩形下边界最大值(最靠上的下边界)

3. 面积计算逻辑

width = right_bound - left_bound
height = top_bound - bottom_bound
if width > 0 and height > 0:area = width * height
else:area = 0
  • 有效性检查:宽度和高度必须为正才有重叠
  • 整数输出:题目要求输出整数部分

示例解析

示例输入:

1 6 4 4
3 5 3 4
0 3 7 3

步骤解析:

  1. 矩形1:x=1, y=6, w=4, h=4

    • x轴:[1, 5]
    • y轴:[6-4, 6] = [2, 6]
  2. 矩形2:x=3, y=5, w=3, h=4

    • x轴:[3, 6]
    • y轴:[5-4, 5] = [1, 5]
  3. 矩形3:x=0, y=3, w=7, h=3

    • x轴:[0, 7]
    • y轴:[3-3, 3] = [0, 3]
  4. 重叠区域计算

    • x轴:左边界 = max(1, 3, 0) = 3
      右边界 = min(5, 6, 7) = 5
      宽度 = 5 - 3 = 2

    • y轴:上边界 = min(6, 5, 3) = 3
      下边界 = max(2, 1, 0) = 2
      高度 = 3 - 2 = 1

  5. 面积:2 × 1 = 2

输出:2

边界情况测试

测试1:完全重叠

输入:
0 10 10 10
0 10 10 10
0 10 10 10计算:
x轴:max(0,0,0)=0, min(10,10,10)=10 → 宽度=10
y轴:min(10,10,10)=10, max(0,0,0)=0 → 高度=10
面积=100

测试2:部分重叠

输入:
1 5 4 5
2 6 4 4
3 4 5 6计算:
矩形1:x[1,5], y[0,5]
矩形2:x[2,6], y[2,6]
矩形3:x[3,8], y[-2,4]x轴:max(1,2,3)=3, min(5,6,8)=5 → 宽度=2
y轴:min(5,6,4)=4, max(0,2,-2)=2 → 高度=2
面积=4

测试3:无重叠

输入:
0 10 2 2
3 8 2 2
5 5 2 2计算:
x轴:max(0,3,5)=5, min(2,5,7)=25>2)
宽度=2-5=-3 → 无效
面积=0

总结与扩展

关键知识点

  1. 矩形表示:理解坐标系中矩形的数学表示
  2. 投影分析:将二维问题分解为两个一维问题
  3. 边界计算:最大值最小值确定重叠区域
  4. 有效性检查:处理无重叠情况

扩展思考

  1. 非轴对齐矩形

    # 使用旋转矩阵处理旋转的矩形
    def rotate_rect(rect, angle):# 计算旋转后的顶点# 使用分离轴定理检测重叠
    
  2. 三维空间重叠

    def clip_cuboids(cuboids):# 在x,y,z三个维度分别计算# 计算体积而非面积
    
  3. 部分重叠阈值

    def clip_with_threshold(rects, threshold=0.5):# 计算重叠面积与总面积的比例# 返回满足阈值的重叠区域
    
  4. 渐进式计算

    class OverlapCalculator:def __init__(self):self.left = -float('inf')self.right = float('inf')self.top = float('inf')self.bottom = -float('inf')def add_rect(self, x, y, w, h):self.left = max(self.left, x)self.right = min(self.right, x + w)self.top = min(self.top, y)self.bottom = max(self.bottom, y - h)return self.get_overlap()def get_overlap(self):width = self.right - self.leftheight = self.top - self.bottomif width > 0 and height > 0:return width * heightreturn 0
    

核心启示:通过将复杂问题分解为简单维度,利用边界值分析确定交集,本算法高效解决了多矩形重叠面积计算问题。这种"分而治之"的思路是解决复杂几何问题的核心策略。

初学者可从中学习:

  1. 空间问题的降维处理技巧
  2. 边界值分析的数学方法
  3. 算法效率与简洁性的平衡
  4. 实际问题的数学模型构建
  5. 算法扩展与适用性分析能力

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/86034.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/86034.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/86034.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

17、Rocket MQ快速实战以及核⼼概念详解

⼀ 、MQ简介 MQ&#xff1a;MessageQueue&#xff0c;消息队列。是在互联⽹中使⽤⾮常⼴泛的—系列服务中间件。 这个词可以分两个部分来看&#xff0c; —是Message&#xff1a;消息。消息是在不同进程之间传递的数据。这些进程可以部署在同—台机器上&#xff0c;也可以 分…

设计模式之手写策略模式实现动态支付(Java实现)

首先&#xff0c;定义一个接口类 import java.util.Map;public interface PayInterface {/*** 支付方法* param amount 支付金额* param paymentInfo 支付信息&#xff08;如卡号、密码等&#xff09;* return 支付结果*/boolean pay(double amount, Map<String, String>…

Spring Boot 虚拟线程 vs WebFlux:谁更胜一筹?

Spring Boot 作为构建现代 Java 应用程序的强大框架,为开发者提供了多种处理并发和可扩展性的解决方案。其中最受关注的两种方案是 Spring Boot 虚拟线程(Java 21 引入)和 Spring Boot WebFlux(基于响应式编程)。虽然两者都致力于优化资源利用率和提升高并发处理能力,但在…

淘宝商品搜索接口|关键字获取商品列表API接入指南

在电商领域&#xff0c;淘宝作为中国最大的电子商务平台之一&#xff0c;拥有海量的商品资源。对于开发者而言&#xff0c;通过淘宝开放平台提供的 API 接口&#xff0c;能够实现与淘宝平台的深度整合&#xff0c;其中关键字搜索商品 API 接口尤为重要。它允许开发者根据特定的…

Centos 离线部署(MQTT)EMOX脚本并设置开机自启

文件结构 install_emqx.sh #!/bin/bash # Filename: install_emqx.sh # Description: EMQX离线一键部署脚本 (针对特殊目录结构)# 检查root权限 if [[ $EUID -ne 0 ]]; thenecho "请使用root权限运行此脚本&#xff01;" exit 1 fi# 定义依赖包和安装路径 DEP_RPM&…

机器学习基础:从概念到应用的全面解析

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家、CSDN平台优质创作者&#xff0c;高级开发工程师&#xff0c;数学专业&#xff0c;10年以上C/C, C#, Java等多种编程语言开发经验&#xff0c;拥有高级工程师证书&#xff1b;擅长C/C、C#等开发语言&#xff0c;熟悉Java常用开…

【机器学习1】线性回归与逻辑回归

‌逻辑回归与线性回归的主要区别在于理论基础、应用场景和数学模型。 1 线性回归 1.1 理论基础 线性回归主要用于建模自变量与连续性因变量之间关系的统计方法&#xff0c;试图利用一条线来拟合自变量与因变量之间的线性关系。 1.2 应用场景 从应用场景来说&#xff0c;适…

小程序 顶部栏标题栏 下拉滚动 渐显白色背景

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/3164fd0e6d6848efaa1e87e02c35179e.png 下拉 100px 后 变成渐变成白色 显示原理 <wd-navbar fixed safeAreaInsetTop :bordered"false":custom-style"background-color: rgba(255, 255, 255, op…

Java底层原理:深入理解类加载机制与反射

一、Java类加载机制 Java类加载机制是Java运行时环境的重要组成部分&#xff0c;它负责将字节码文件加载到JVM内存中&#xff0c;并将其转换为可执行的类。类加载机制的实现涉及类加载器&#xff08;ClassLoader&#xff09;、类加载过程和类加载器的层次结构。 &#xff08;…

Android 中查看数据库内容方式

一、背景 创建的db数据库&#xff0c;有时候需要查看数据库中的数据内容,或者查看数据是否有更新到数据等等。这时候就需要查看数据库的内容。 二、数据库路径 博主用的是第三方的greendao数据库框架,生成的.db文件路径如下:(路径仅供参考) /data/data/app_package/database…

unity实现浮动组件

目录 前言方法后言组件代码 前言 在unity中&#xff0c;要让一个物体变得让人感到轻飘飘的&#xff0c;就可以给一个物体添加上浮动组件。今天我们就来实现它。 方法 我们先来看一下 sin ⁡ \sin sin函数的曲线。 在这条曲线上&#xff0c;随着 x x x向右移动&#xff0c; y…

Cisco Nexus93240接口带宽显示异常高故障- bug

hardware: cisco N93240 software: 9.3(10) 1个万兆接口&#xff0c;显示的rate超出几万倍 开case查询&#xff0c;告知是bug&#xff0c;需要版本升级解决。

pyhton基础【15】函数进阶一

目录 一. 函数进阶 1. 默认参数&#xff1a; 2. 关键字参数&#xff1a; 3. 可变参数&#xff1a; 4. 装饰器&#xff1a; 5. 匿名函数lambda&#xff1a; 6. 高阶函数&#xff1a; 7. 递归函数&#xff1a; 8. 类型注解&#xff1a; 二.函数参数的高级使用 缺…

【软考高级系统架构论文】论企业应用系统的数据持久层架构设计

论文真题 数据持久层 (Data Persistence Layer) 通常位于企业应用系统的业务逻辑层和数据源层之间,为整个项目提供一个高层、统一、安全、并发的数据持久机制,完成对各种数据进行持久化的编程工作,并为系统业务逻辑层提供服务。它能够使程序员避免手工编写访问数据源的方法…

ubuntu使用 Conda 安装 pyseer详细教程

pyseer 是一个用于 微生物全基因组关联分析(GWAS) 的生物信息学工具。它可以帮助研究者识别微生物(如细菌)中与表型(如耐药性、毒力、致病性)相关的遗传变异。 一、安装mamba conda install -n base -c conda-forge mamba二、创建虚拟环境 conda create -n pyseer-env …

Redis04

redis 一、redis的作用和使用场景 redis是一个内存级的高速缓存数据库。&#xff08;对比磁盘IO&#xff09; 使用场景&#xff1a;1、并发访问量大的 2、数据量小 3、修改不频繁 项目中&#xff1a;1、验证码 2、登录成功用户信息 3、首页&#xff08;模块数据 轮播图&…

计算机网络学习笔记:TCP可靠传输实现、超时重传时间选择

文章目录 一、TCP可靠传输实现二、TCP超时重传时间选择 一、TCP可靠传输实现 TCP可靠传输的实现&#xff0c;主要基于发送方和接收方的滑动窗口&#xff0c;以及确认机制&#xff1a; 发送方在未收到确认&#xff08;ACK&#xff09;前&#xff0c;可以将序号落在发送窗口内的…

Perl 正则表达式

Perl 正则表达式 引言 Perl 正则表达式&#xff08;Regular Expressions&#xff09;是Perl编程语言中一个强大且灵活的工具&#xff0c;用于字符串处理和模式匹配。正则表达式在文本处理、数据验证、搜索和替换等任务中发挥着至关重要的作用。本文将深入探讨Perl正则表达式的…

Security: RSA: 1024 bit 长度已经变得不安全了

文章目录 参考推荐限制RHEL相关配置man crypto-policies包含的应用使用方法是配置文件include参考 https://csrc.nist.gov/pubs/sp/800/57/pt1/r2/final https://www.linuxquestions.org/questions/linux-security-4/1024-bit-dsa-vs-2048-bit-rsa-4175439131/ https://csrc.n…

第一课:大白话中的机器学习

各位看官好啊!今天咱们来聊一个听起来高大上但实际上特别接地气的玩意儿——机器学习。别被这名字吓到,它其实就是教电脑像人类一样学习知识的一套方法。想象一下你教你家狗子坐下、握手的过程,机器学习差不多就是这么回事,只不过"学生"换成了电脑。 一、啥是机…