java平面内有n个矩形_JAVA 相交矩形面积 平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴.对于每个矩形,我们给出它的一对相对顶点...
共回答了17个问题采纳率:88.2%
100%符合你的要求,其中inputstr1/2随便你怎么弄,可以通过args传入,或者System.in传入,甚至通过文件传入.
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main {
public static void main(String[] args) {
String inputStr1 = "1 1 3 3";
String inputStr2 = "2 2 4 4";
String[] r1String = inputStr1.split(" ");
Point p1 = new Point(new BigDecimal(r1String[0]),new BigDecimal(r1String[1]));
Point p2 = new Point(new BigDecimal(r1String[2]),new BigDecimal(r1String[3]));
String[] r2String = inputStr2.split(" ");
Point p3 = new Point(new BigDecimal(r2String[0]),new BigDecimal(r2String[1]));
Point p4 = new Point(new BigDecimal(r2String[2]),new BigDecimal(r2String[3]));
Rectangle r1 = new Rectangle(p1, p2);
Rectangle r2 = new Rectangle(p3, p4);
System.out.println("Rectangle 1: " + r1);
System.out.println("Rectangle 2: " + r2);
System.out.println("The crossing area is " + getCrossArea(r1, r2).setScale(2, RoundingMode.HALF_UP));
}
public static BigDecimal getCrossArea(Rectangle r1, Rectangle r2) {
if (r1.contains(r2)) {
return r2.getArea();
}
if (r2.contains(r1)) {
return r1.getArea();
}
Point crossLeftBottom, crossRightTop;
if (r1.contains(r2.leftBottom)) {
crossLeftBottom = r2.leftBottom;
if (r1.contains(r2.leftTop)) {
crossRightTop = new Point(r1.rightTop.x, r2.rightTop.y);
}
else if (r1.contains(r2.rightBottom)) {
crossRightTop = new Point(r2.rightTop.x, r1.rightTop.y);
}
else {
crossRightTop = r1.rightTop;
}
Rectangle crossingRectangle = new Rectangle(crossLeftBottom, crossRightTop);
System.out.println("Crossing rectangle is " + crossingRectangle);
return crossingRectangle.getArea();
}
else if (r1.contains(r2.rightTop)) {
crossRightTop = r2.rightTop;
if (r1.contains(r2.leftTop)) {
crossLeftBottom = new Point(r2.leftBottom.x, r1.leftBottom.y);
}
else if (r1.contains(r2.rightBottom)) {
crossLeftBottom = new Point(r1.leftBottom.x, r2.leftBottom.y);
}
else {
crossLeftBottom = r1.leftBottom;
}
Rectangle crossingRectangle = new Rectangle(crossLeftBottom, crossRightTop);
System.out.println("Crossing rectangle is " + crossingRectangle);
return crossingRectangle.getArea();
}
else {
// no crossing
System.out.println("No crossing area");
return BigDecimal.ZERO;
}
}
public static class Point {
Point(BigDecimal x, BigDecimal y) {
this.x = x;
this.y = y;
}
BigDecimal x;
BigDecimal y;
@Override
public String toString() {
return "(" + x + "," + y + ")";
}
}
public static class Rectangle {
Rectangle (Point p1, Point p2) {
if (p1.x.compareTo(p2.x) == 0 || p1.y.compareTo(p2.y) == 0) {
throw new RuntimeException("Invalid rectangle." +
" p1.x=" + p1.x + ",p1.y=" + p1.y +
",p2.x=" + p2.x + ",p2.y=" + p2.y);
}
if (p1.x.compareTo(p2.x) < 0 p1.y.compareTo(p2.y) < 0) {
leftBottom = p1;
rightTop = p2;
leftTop = new Point(p1.x, p2.y);
rightBottom = new Point(p2.x, p1.y);
}
if (p1.x.compareTo(p2.x) < 0 p1.y.compareTo(p2.y) > 0) {
leftTop = p1;
rightBottom = p2;
leftBottom = new Point(p1.x, p2.y);
rightTop = new Point(p2.x, p1.y);
}
if (p1.x.compareTo(p2.x) > 0 p1.y.compareTo(p2.y) < 0) {
rightBottom = p1;
leftTop = p2;
rightTop = new Point(p1.x, p2.y);
leftBottom = new Point(p2.x, p1.y);
}
if (p1.x.compareTo(p2.x) > 0 p1.y.compareTo(p2.y) > 0) {
rightTop = p1;
leftBottom = p2;
rightBottom = new Point(p1.x, p2.y);
leftTop = new Point(p2.x, p1.y);
}
}
Point leftBottom;
Point rightBottom;
Point rightTop;
Point leftTop;
/**
* Check if the point is within this rectangle
* @param p the point
* @return true if it's in the rectangle, false otherwise
*/
public boolean contains(Point p) {
return p.x.compareTo(leftBottom.x) >= 0 &
p.x.compareTo(rightTop.x) <= 0 &
p.y.compareTo(rightTop.y) <= 0 &
p.y.compareTo(leftBottom.y) >= 0;
}
/**
* Check if the target rectangle is within this rectangle, which means all the points is within this rectangle
* @param r the target rectangle
* @return true if it's in the rectangle, false otherwise
*/
public boolean contains(Rectangle r) {
// it's enough to check leftBottom rightTop only
return contains(r.leftBottom) contains(r.rightTop);
}
/**
* Calculate the area it covers
* @return the area
*/
public BigDecimal getArea() {
BigDecimal yGap = rightTop.y.subtract(leftBottom.y);
BigDecimal xGap = rightTop.x.subtract(leftBottom.x);
return yGap.multiply(xGap);
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("LeftBottom=");
sb.append(leftBottom);
sb.append(",RightBottom=");
sb.append(rightBottom);
sb.append(",RightTop=");
sb.append(rightTop);
sb.append(",LeftTop=");
sb.append(leftTop);
return sb.toString();
}
}
}
1年前
5
java平面内有n个矩形_JAVA 相交矩形面积 平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴.对于每个矩形,我们给出它的一对相对顶点...相关推荐
- ACMNO.47 矩形面积交(有图) 平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。
题目描述 平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴. 对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积. 输入 输入仅包含两行,每行描述一个矩形. 在每行中, ...
- python根据x轴、y轴坐标在坐标轴里画出曲线图
python根据x轴.y轴坐标在坐标轴里画出曲线图 程序实现: import numpy as np import matplotlib as mpl import matplotlib.pyplot ...
- matlab画图, x轴和y轴刻度非均匀控制, 画出一张好看的图
1.学习内容: 使用matlab画图,控制x轴和y轴刻度显示相关代码 2.相关代码: 1.坐标轴的视点(viewpoint): 1.坐标轴的视点(viewpoint):从哪个方向看整个坐标系统,这决定 ...
- 平面内两条线段的位置关系(相交)判定与交点求解
http://www.cnblogs.com/devymex/archive/2010/08/19/1803885.html 概念 平面内两条线段位置关系的判定在很多领域都有着广泛的应用,比如游戏.C ...
- java框内的值怎么同步_java并发编程使用锁进行数据同步操作一
项目中总是出现招标项目超投的情况,最开始总是觉得应该使用框架Hibernate自带的并发策略中的乐观锁(version)解决问题,参考了很多网上的资料,也参考了Hibernate的帮助文档,由于对Hi ...
- java微信内h5调起支付_java微信支付--------公众号内H5调起支付
/*** 统一下单接口,获取prepay_id *@paramrequest *@return */@RequestMapping(value= "/unifiedOrder", ...
- java微信内h5调起支付_java进行微信h5支付开发
最近在做微信支付开发用的框架是 srpingMVC mybatis spring 下面是开发流程图 我们只需要开发红色标记的模块就可以了. 具体参数详情可以查看微信开发者文档. 新手第一次写,写的不好 ...
- 编写JAVA程序从键盘输入矩形的宽和高,输出矩形的周长和面积。 (分别试用两种输入和输出方法,输出结果精确到小数点后两位)
代码如下: 第一种: import java.util.Scanner; public class Area { public static void main(String[] args) {// ...
- java小游戏实训报告心得_Java实训报告-扫雷.doc
Java实训报告-扫雷 实训报告书 实训名称: JAVA程序设计实训 系 (部): 信息工程系 专业班级: 计算机科学与技术08-1 学生姓名: 学 号: 指导教师: 完成日期: 山东科技大学泰山科技 ...
最新文章
- 迈出编程第一步!必知必会的10个编程技巧及查错方法
- 腾讯员工:越来越多的新生都想要学计算机专业,好日子长不了
- 进一步理解:inline-block,vertical-align,line-height
- linux中initrd的含义,Linux2.6 内核的 Initrd 机制解析
- JAVA入门级教学之(连接运算符)
- 主攻计算机专业英语翻译,湖师大“博导”黄振定,主攻“翻译学”
- 源码:Hadoop-3.0.3 启动过程中执行start-all.sh开始
- Spark--安装和配置遇到的所有问题
- 关于前端模块化你应该知道的
- c语言编程多分支,C语言编程(练习4:分支和跳转 )
- 什么是医疗健康管理系统?
- C51系列单片最小机原理图及L298N接线图
- 大学计算机基础通俗易懂教材,大学计算机基础(21世纪高等学校计算机规划教材)...
- 杨过为什么不喜欢郭芙、郭襄、程瑛……
- yxc_第一章 基础算法(二)_前缀和与差分
- 环境保护刻不容缓,智慧治理迎来新生!
- php 解压dat,如何打开dat文件?
- Android 与 Chrome OS 中针对大屏幕设备的更新
- 小红书竞品分析_跨境电商APP竞品分析:小红书、网易考拉和达令
- 第五次任务之三大抽样分布
热门文章
- 详细探究Spark的shuffle实现
- 4_less中带参数混合
- 数字图像处理 采样定理_数字图像处理基础知识总结
- 4095: 韩信点兵
- mysql事务会不会上锁_MySQL事务以及加锁机制
- autocad型源代码_C# 实现预览dwg文件完整源代码(无需autocad环境)
- 操作 mysql 不生成日志_利用Python操作MySQL数据库,以后不懂这些是要被鄙视的!...
- 联发科技嵌入式_【MTK联发科技嵌入式面试】联发科技校招最新面试经验-看准网...
- python数据包分析_python | 数据分析(一)- Numpy数据包
- git status怎么操作_Git 基本操作