平分正方形

题目链接

平分正方形

题目描述

注意点

  • square.length == 3
  • square[2] > 0
  • 若同时有多条直线满足要求,则选择斜率最大的一条计算并返回(与Y轴平行的直线视为斜率无穷大)

解答思路

  • 平分正方形的直线是两个正方形中间点相连的直线,需要特殊考虑的是:中间点相连与y轴平行(中间点的x相同),此时x1, x2就是x,y1, y2就是中心线与两个正方形最上方、最下方的边的交点;中间点相连与x轴平行(中间点的y相同),此时y1, y2就是y,x1, x2就是中心线与两个正方形最左方、最右方的边的交点
  • 对于一般情况,中心线的方程是y = kx + b,其可能与两个正方形的最上方、最下方、最左方、最右方相交,规律是:如果Math.abs(k)大于1,中心线会偏向于y轴,其会与最上方、最下方的边相交;如果如果Math.abs(k)小于1,中心线会偏向x轴,其会与最左方、最右方的边相交
  • 对于k大于0和小于0的情况会导致中心线与正方向相应边相交的点的x1、x2、y1、y2的大小关系不同,所以最终如果x1 > x2,还需要将x1与x2进行交换,y1与y2进行交换

代码

class Solution {
    public double[] cutSquares(int[] square1, int[] square2) {
        int edge1 = square1[2];
        int edge2 = square2[2];
        // 两个正方形的中心点
        double midX1 = square1[0] + edge1 / 2.0;
        double midY1 = square1[1] + edge1 / 2.0;
        double midX2 = square2[0] + edge2 / 2.0;
        double midY2 = square2[1] + edge2 / 2.0;
        double left = Math.min(square1[0], square2[0]);
        double right = Math.max(square1[0] + edge1, square2[0] + edge2);
        double bottom = Math.min(square1[1], square2[1]);
        double top = Math.max(square1[1] + edge1, square2[1] + edge2);;
        double[] res = new double[4];
        if (midX1 == midX2) {
            // 中点相连与y轴平行
            res[0] = midX1;
            res[2] = midX1;
            res[1] = bottom;
            res[3] = top;
        } else if (midY1 == midY2) {
            // 中点相连与x轴平行
            res[0] = left;
            res[2] = right;
            res[1] = midY1;
            res[3] = midY1;
        } else {
            // y = kx + b;
            double k = (midY2 - midY1) / (midX2 - midX1);
            double b = midY1 - k * midX1;
            if (Math.abs(k) > 1) {
                // 斜率大于1与上下相交
                res[0] = (bottom - b) / k;
                res[2] = (top - b) / k;
                res[1] = bottom;
                res[3] = top;
            } else {
                // 斜率小于1与左右相交
                res[0] = left;
                res[2] = right;
                res[1] = k * left + b;
                res[3] = k * right + b;
            }
        }
        // 保证x1 < x2
        if (res[0] > res[2]) {
            swap(res, 0, 2);
            swap(res, 1, 3);
        }
        return res;
    }

    public void swap(double[] res, int i, int j) {
        double tmp = res[i];
        res[i] = res[j];
        res[j] = tmp;
    }
}

关键点

  • 怎么找到平分正方形的中间线
  • 注意考虑中心线与x轴平行、与y轴平行的特殊情况
  • 最终结果需要保证x1 < x2,如果x1 = x2,需要保证y1 < y2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/796597.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【超音速 专利 CN117710683A】基于分类模型的轻量级工业图像关键点检测方法

申请号CN202311601629.7公开号&#xff08;公开&#xff09;CN117710683A申请日2023.11.27申请人&#xff08;公开&#xff09;超音速人工智能科技股份有限公司发明人&#xff08;公开&#xff09;张俊峰(总); 杨培文(总); 沈俊羽; 张小村 技术领域 本发明涉及图像关键点检测…

python制作甘特图的基本知识(附Demo)

目录 前言1. matplotlib2. plotly 前言 甘特图是一种常见的项目管理工具&#xff0c;用于表示项目任务的时间进度 直观地看到项目的各个任务在时间上的分布和进度 常用的绘制甘特图的工具是 matplotlib 和 plotly 主要以Demo的形式展示 1. matplotlib 功能强大的绘图库&a…

【网络安全】APDCL:IDOR + 账户接管

未经许可&#xff0c;不得转载。 文章目录 正文漏洞1&#xff1a;IDOR漏洞2&#xff1a;账户接管 正文 APDCL &#xff0c;即印度阿萨姆邦电力分销公司&#xff08;Assam Power Distribution Company Limited&#xff09;&#xff0c;是印度阿萨姆邦政府控制的公共部门企业&am…

亚马逊IP关联是什么?要怎么解决呢?

亚马逊不仅提供了广泛的商品和服务&#xff0c;也是许多企业和个人选择的电子商务平台。然而&#xff0c;与亚马逊相关的IP关联问题&#xff0c;特别是在网络安全和运营管理方面&#xff0c;经常成为使用亚马逊服务的用户和商家关注的焦点。通过了解亚马逊IP关联的含义、可能的…

AURORA仿真

AURORA 仿真验证 定义&#xff1a;AURORA是一种高速串行通信协议&#xff0c;通常用于在数字信号处理系统和其他电子设备之间传输数据。它提供了一种高效的方式来传输大量数据&#xff0c;通常用于需要高带宽和低延迟的应用中。AURORA协议通常由Xilinx公司的FPGA器件支持&#…

ctfshow-web入门-php特性(web96-web99)

目录 1、web96 2、web97 3、web98 4、web99 1、web96 试了下通配、转义、拼接、大小写都不行 这里使用绝对路径或者当前路径绕过&#xff1a; ?u./flag.php ?u/var/www/html/flag.php 还可以使用 php 伪协议&#xff1a; ?uphp://filter/resourceflag.php 2、web97 关…

102.qt qml-最全Table交互之多列固定、行列拖拽、自定义委托、标题交互使用教程

自定义实现的Table控件&#xff0c;支持跨qt版本&#xff0c;兼容qt5,qt6&#xff01; 截图如下所示: 黑色风格如下所示&#xff1a; 视频演示入口&#xff1a;Qt QML QianWindowV2.5(新增曲线综合示例、QML最全Table交互示例、支持qt5/qt6)_哔哩哔哩_bilibili 1.示例页面入口…

【低照度图像增强系列(8)】URetinex-Net算法详解与代码实现(2022|CVPR)

前言 ☀️ 在低照度场景下进行目标检测任务&#xff0c;常存在图像RGB特征信息少、提取特征困难、目标识别和定位精度低等问题&#xff0c;给检测带来一定的难度。 &#x1f33b;使用图像增强模块对原始图像进行画质提升&#xff0c;恢复各类图像信息&#xff0c;再使用目标检…

中创算力公益行 | 夏日炎炎送清凉,温暖童心筑梦行

这是一个关于爱与关怀的故事&#xff0c;也是一段关于成长与责任的旅程。在这个炎炎夏日&#xff0c;喧嚣与热浪交织&#xff0c;有些孩子&#xff0c;他们生活在偏远的乡村&#xff0c;用稚嫩的双肩承载着生活的重担&#xff0c;在这个本应享受无忧无虑童年的年纪&#xff0c;…

SpringBoot3.3.0升级方案

本文介绍了由SpringBoot2升级到SpringBoot3.3.0升级方案&#xff0c;新版本的升级可以解决旧版本存在的部分漏洞问题。 一、jdk17下载安装 1、下载 官网下载地址 Java Archive Downloads - Java SE 17 Jdk17下载后&#xff0c;可不设置系统变量java_home&#xff0c;仅在id…

【python】PyQt5事件传递,鼠标动作捕获,键盘按键捕获原理与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

深度学习论文: MobileSAMv2: Faster Segment Anything to Everything

深度学习论文: MobileSAMv2: Faster Segment Anything to Everything MobileSAMv2: Faster Segment Anything to Everything PDF:https://arxiv.org/pdf/2312.09579 PyTorch: https://github.com/shanglianlm0525/PyTorch-Networks 1 概述 SAM模型应对两大分割任务的挑战&…

数字数据编码为数字信号/编码模式

&#xff5e;&#xff5e;&#xff5e;&#xff5e;&#xff5e;&#xff5e;&#xff5e;&#xff5e;&#xff5e;&#xff5e;&#xff5e;&#xff5e;&#xff5e; 1 非归零编码【NRZ】 2 曼彻斯特编码 3 差分曼彻斯特编码 &#xff5e;&#xff5e;&#xff5e;&#xff…

『C++成长记』vector模拟实现

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;C &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、存储结构 二、默认成员函数 &#x1f4d2;2.1构造函数 &#x1f4d2;2.2拷贝…

Unity实现安卓App预览图片、Pdf文件和视频的一种解决方案

一、问题背景 最近在开发app项目&#xff0c;其中有个需求就是需要在app软件内显示图片、pdf和视频&#xff0c;一开始想的解决方案是分开实现&#xff0c;也就是用Image组件显示图片&#xff0c;找一个加载pdf的插件和播放视频的插件&#xff0c;转念一想觉得太麻烦了&#x…

集成excel工具:自定义导入监听器、自定义类型转换器、web中的读

文章目录 I 封装导入导出1.1 定义工具类1.2 自定义读监听器: 回调业务层处理导入数据1.3 定义文件导入上下文1.4 定义回调协议II 自定义转换器2.1 自定义枚举转换器2.2 日期转换器2.3 时间、日期、月份之间的互转2.4 LongConverterIII web中的读IV 其他注意事项应用场景:导入…

Canvas:实现在线动态时钟效果

想象一下&#xff0c;用几行代码就能创造出如此逼真的图像和动画&#xff0c;仿佛将艺术与科技完美融合&#xff0c;前端开发的Canvas技术正是这个数字化时代中最具魔力的一环&#xff0c;它不仅仅是网页的一部分&#xff0c;更是一个无限创意的画布&#xff0c;一个让你的想象…

万界星空科技MES系统:食品加工安全的实时监控与智能管理

万界星空科技MES系统通过集成多种技术和功能&#xff0c;能够实时监控食品加工过程中各环节的安全风险。以下是对该系统如何实现实时监控的详细分析&#xff1a; 一、集成传感器和数据分析技术 万界星空科技MES系统利用集成的传感器和数据分析技术&#xff0c;实时监控生产过程…

c++ - 多态

文章目录 一、多态的概念二、多态使用三、多态的原理 一、多态的概念 1、概念&#xff1a; 多态就是具有多种形态&#xff0c;可以理解为同一个行为不同对象去完成表现出不同的状态&#xff0c;如&#xff1a; 二、多态使用 1、构成多态的条件 &#xff08;1&#xff09;派…

硬件开发笔记(二十五):AD21导入电解电容原理图库、封装库和3D模型

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/140344547 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…