java实现矩形区域的交和并
在编写图形界面软件的时候,经常会遇到处理两个矩形的关系。
如图【1.jpg】所示,矩形的交集指的是:两个矩形重叠区的矩形,当然也可能不存在(参看【2.jpg】)。两个矩形的并集指的是:能包含这两个矩形的最小矩形,它一定是存在的。
本题目的要求就是:由用户输入两个矩形的坐标,程序输出它们的交集和并集矩形。
矩形坐标的输入格式是输入两个对角点坐标,注意,不保证是哪个对角,也不保证顺序(你可以体会一下,在桌面上拖动鼠标拉矩形,4个方向都可以的)。
输入数据格式:
x1,y1,x2,y2
x1,y1,x2,y2
数据共两行,每行表示一个矩形。每行是两个点的坐标。x坐标在左,y坐标在右。坐标系统是:屏幕左上角为(0,0),x坐标水平向右增大;y坐标垂直向下增大。
要求程序输出格式:
x1,y1,长度,高度
x1,y1,长度,高度
也是两行数据,分别表示交集和并集。如果交集不存在,则输出“不存在”
前边两项是左上角的坐标。后边是矩形的长度和高度。
例如,用户输入:
100,220,300,100
150,150,300,300
则程序输出:
150,150,150,70
100,100,200,200
例如,用户输入:
10,10,20,20
30,30,40,40
则程序输出:
不存在
10,10,30,30
注意:
请仔细调试!您的程序只有能运行出正确结果的时候才有机会得分!
在评卷时使用的输入数据与试卷中给出的实例数据可能是不同的。
package com.liu.ex6;
import java.util.Scanner;
public class Main {
public static int[][] point = new int[4][2];
public static int[][] result = new int[2][4];
public void getResult(String[] A) {
String[] tempA1 = A[0].split(",");
String[] tempA2 = A[1].split(",");
point[0][0] = Integer.valueOf(tempA1[0]);
point[0][1] = Integer.valueOf(tempA1[1]);
point[1][0] = Integer.valueOf(tempA1[2]);
point[1][1] = Integer.valueOf(tempA1[3]);
point[2][0] = Integer.valueOf(tempA2[0]);
point[2][1] = Integer.valueOf(tempA2[1]);
point[3][0] = Integer.valueOf(tempA2[2]);
point[3][1] = Integer.valueOf(tempA2[3]);
//第一个矩形对角线坐标
int x1 = Math.min(point[0][0], point[1][0]);
int y1 = Math.min(point[0][1], point[1][1]);
int x2 = Math.max(point[0][0], point[1][0]);
int y2 = Math.max(point[0][1], point[1][1]);
//第二个矩形对角线坐标
int x3 = Math.min(point[2][0], point[3][0]);
int y3 = Math.min(point[2][1], point[3][1]);
int x4 = Math.max(point[2][0], point[3][0]);
int y4 = Math.max(point[2][1], point[3][1]);
if(x3 >= x2 || x1 >= x4 || y3 >= y2 || y1 >= y4) {
result[0][0] = -1; //表示交集不存在
} else {
int x = 0, y = 0, len = 0, high = 0;
if(x3 >=x1 && x3 < x2) {
if(x4 >= x2) {
x = x3;
len = x2 - x3;
} else {
x = x3;
len = x4 - x3;
}
} else if(x1 >= x3 && x1 < x4) {
if(x2 >= x4) {
x = x1;
len = x4 - x1;
} else {
x = x1;
len = x2 - x1;
}
}
if(y3 >= y1 && y3 < y2) {
if(y4 >= y2) {
y = y3;
high = y2 - y3;
} else {
y = y3;
high = y4 - y3;
}
} else if(y1 >= y3 && y1 < y4) {
if(y2 >= y4) {
y = y1;
high = y4 - y1;
} else {
y = y1;
high = y2 - y1;
}
}
result[0][0] = x;
result[0][1] = y;
result[0][2] = len;
result[0][3] = high;
}
int x = Math.min(x1, x3);
int y = Math.min(y1, y3);
int len = Math.max(x2, x4) - x;
int high = Math.max(y2, y4) - y;
result[1][0] = x;
result[1][1] = y;
result[1][2] = len;
result[1][3] = high;
}
public static void main(String[] args) {
Main test = new Main();
Scanner in = new Scanner(System.in);
String[] A = new String[2];
for(int i = 0;i < 2;i++) {
A[i] = in.next();
}
test.getResult(A);
for(int i = 0;i < 2;i++) {
for(int j = 0;j < 3;j++) {
if(i == 0 && result[0][0] == -1) {
System.out.println("不存在");
break;
} else {
System.out.print(result[i][j]+",");
}
}
if(result[0][0] != -1)
System.out.println(result[i][3]);
else {
if(i == 1)
System.out.println(result[i][3]);
}
}
}
}
java实现矩形区域的交和并的更多相关文章
- Java实现 LeetCode 363 矩形区域不超过 K 的最大数值和
363. 矩形区域不超过 K 的最大数值和 给定一个非空二维矩阵 matrix 和一个整数 k,找到这个矩阵内部不大于 k 的最大矩形和. 示例: 输入: matrix = [[1,0,1],[0,- ...
- BC 2015在百度之星程序设计大赛 - 预赛(1)(矩形区域-旋转卡)
矩形区域 Accepts: 717 Submissions: 1619 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 ...
- 玩转Android Camera开发(四):预览界面四周暗中间亮,仅仅拍摄矩形区域图片(附完整源代码)
杂家前文曾写过一篇关于仅仅拍摄特定区域图片的demo.仅仅是比較简陋.在坐标的换算上不是非常严谨,并且没有完毕预览界面四周暗中间亮的效果,深以为憾.今天把这个补齐了. 在上代码之前首先交代下,这里面存 ...
- LeetCode:矩形区域【223】
LeetCode:矩形区域[223] 题目描述 在二维平面上计算出两个由直线构成的矩形重叠后形成的总面积. 每个矩形由其左下顶点和右上顶点坐标表示,如图所示. 示例: 输入: -3, 0, 3, 4, ...
- Leetcode 363.矩形区域不超过k的最大数值和
矩形区域不超过k的最大数值和 给定一个非空二维矩阵 matrix 和一个整数 k,找到这个矩阵内部不大于 k 的最大矩形和. 示例: 输入: matrix = [[1,0,1],[0,-2,3]], ...
- opencv2 使用鼠标绘制矩形并截取和保存矩形区域图像
前言 好长时间没写博文了,今天偷偷懒写篇关于opencv2中鼠标响应操作的文章. 鼠标操作属于用户接口设计,以前一直使用Qt来做,但是如果只需要简单的鼠标,键盘操作,直接调用opencv库的函数也未尝 ...
- 【代码笔记】iOS-根据size截取屏幕中间矩形区域
代码: RootViewController.m #import "RootViewController.h" @interface RootViewController () @ ...
- Win32 GDI 非矩形区域剪裁,双缓冲技术
传统的Win32通过GDI提供图形显示的功能,包括了基本的绘图功能,如画线.方块.椭圆等等,高级功能包括了多边形和Bezier的绘制.这样app就不用关心那些图形学的细节了,有点类似于UNIX上的X- ...
- 在OpenCV中利用鼠标绘制矩形和截取图像的矩形区域
这是两个相关的程序,前者是后者的基础.实际上前一个程序也是在前面博文的基础上做的修改,请参考<在OpenCV中利用鼠标绘制直线> .下面贴出代码. 程序之一,在OpenCV中利用鼠标绘制矩 ...
随机推荐
- [hdu4768]二分
http://acm.hdu.edu.cn/showproblem.php?pid=4768 题意:n个传单分别发给编号为ai, ai + ci, ai + 2 * ci, .. , ai + k * ...
- AOP行为日志
最近新项目要记录行为日志,很久没有用AOP,研究了一下. 废话补多少,先上个流程图: 数据库日志表设计 字段名称 字段类型 注释 LOG_ID VARCHAR2(255) LOG_LEVEL N ...
- 暴力破解-HTTP Basic认证
0x01 HTTP Basic认证介绍 基本认证 basic authentication ← HTTP1.0提出的认证方法 基本认证步骤: 1. 客户端访问一个受http基本认证保护的资源. 2. ...
- shell 并行运行。
我实在是太喜欢这个方法了.爽歪歪. 原帖 http://www.xaprb.com/blog/2009/05/01/an-easy-way-to-run-many-tasks-in-parallel/ ...
- 使用pandas库实现csv行和列的获取
1.读取csv import pandas as pd df = pd.read_csv('路径/py.csv') 2.取行号 index_num = df.index 举个例子: import pa ...
- 检查可执行App类型是否为executable (腾讯上线预审核报错)otool工具使用
https://blog.csdn.net/lovechris00/article/details/81561627 查看IPA文件的路径 1,解压缩 xcode导出的xxx.ipa文件 2,然后在解 ...
- Jmeter基础-下载与安装
jmeter下载与安装 下载网址:http://jmeter.apache.org/download_jmeter.cgi windows点击下载zip文件 该版本需要JDK1.8及以上版本 免安装, ...
- Xilinx的DocNav文件导航中的文档开头字母缩写都是什么意思?
在安装Xilinx的开发软件后都会附带安装一个用于查阅Xilinx技术文档的文件导航工具DocNav. 在DocNav中可以找到几乎所有对我们开发Xilinx FPGA有用的技术文档,其中的文档数量更 ...
- 【Java8新特性】面试官:谈谈Java8中的Stream API有哪些终止操作?
写在前面 如果你出去面试,面试官问了你关于Java8 Stream API的一些问题,比如:Java8中创建Stream流有哪几种方式?(可以参见:<[Java8新特性]面试官问我:Java8中 ...
- 【QT】利用pyqt5实现简单界面
Topic: 利用pyqt5编写简单界面Env:win10 + Pycharm2018 + Python 3.6.8Date: 2019/4/29 by hw_Chen2018 ...