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中利用鼠标绘制矩 ...
随机推荐
- vscode调试webpack的启动和打包部署过程,nodejs调试
launch.json ``` { // 使用 IntelliSense 了解相关属性. // 悬停以查看现有属性的描述. // 欲了解更多信息,请访问: https://go.micr ...
- 使用GitHub的API实现文件上传--李渣渣(lizaza.cn)
最近搭建了一个自己的博客网站和一个在线图片格式转换工具,经常写博客的时候需要上传图片,在线转换工具也需要一定的空间来临时存放图片文件.服务器的存储空间又比较有限,于是就想着将图片存储的GitHub上, ...
- gets() 、 getchar() 、 getch() 、getche()、gets()、 scanf()的区别
1.getchar().getche().getch() (1).getchar 函数用于从标准输入设备键盘读入单个字符,返回表示读入字符的ASCII码值,并在屏上显示该字符:头文件是 stdio.h ...
- Ubuntu+uWSGI部署Django项目【鸿篇巨制,事无巨细】
背景 任务: 视频翻译项目需要在两个服务器上进行通信(国内&海外的阿里服务器). 因为python是主语言,选用了Django 来快速部署API. 注:Django中文文档:https://d ...
- SpringMVC中参数的传递(一)
前言 1.首先,我们在web.xml里面配置前端控制器DispatcherServlet以及字符编码过滤器(防止中文乱码),配置如下: <?xml version="1.0" ...
- Codeforces1157A(A题)Reachable Numbers
A. Reachable Numbers Let's denote a function f(x)f(x) in such a way: we add 11 to xx, then, while th ...
- MySQL用户、库、表(单/多)操作
用户及权限操作: 管理员登录:mysql -uroot -p 用户设置密码:set password=password(密码); 查看数据库所有用户:select * from mysql.user; ...
- 第一篇:百度AI注册使用
百度AI (https://ai.baidu.com/)点击右上角<控制台>进行登录 内容审核: 操作文档:
- python3.x 基础三:字符集问题
总结了一张表,更详细信息百度百科: 序号 年份 编码 标准协会 特点 二进制长度 字符长度 表现 1 1967 ASCII 美国国家标准学会(American National Standard In ...
- python 读取txt文件
1.打开文件 #1)1 f = open("test.txt","r") #设置文件对象 f.close() #关闭文件 #2) #为了方便,避免忘记close ...