共回答了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轴.对于每个矩形,我们给出它的一对相对顶点...相关推荐

  1. ACMNO.47 矩形面积交(有图) 平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。

    题目描述 平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴. 对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积. 输入 输入仅包含两行,每行描述一个矩形. 在每行中, ...

  2. python根据x轴、y轴坐标在坐标轴里画出曲线图

    python根据x轴.y轴坐标在坐标轴里画出曲线图 程序实现: import numpy as np import matplotlib as mpl import matplotlib.pyplot ...

  3. matlab画图, x轴和y轴刻度非均匀控制, 画出一张好看的图

    1.学习内容: 使用matlab画图,控制x轴和y轴刻度显示相关代码 2.相关代码: 1.坐标轴的视点(viewpoint): 1.坐标轴的视点(viewpoint):从哪个方向看整个坐标系统,这决定 ...

  4. 平面内两条线段的位置关系(相交)判定与交点求解

    http://www.cnblogs.com/devymex/archive/2010/08/19/1803885.html 概念 平面内两条线段位置关系的判定在很多领域都有着广泛的应用,比如游戏.C ...

  5. java框内的值怎么同步_java并发编程使用锁进行数据同步操作一

    项目中总是出现招标项目超投的情况,最开始总是觉得应该使用框架Hibernate自带的并发策略中的乐观锁(version)解决问题,参考了很多网上的资料,也参考了Hibernate的帮助文档,由于对Hi ...

  6. java微信内h5调起支付_java微信支付--------公众号内H5调起支付

    /*** 统一下单接口,获取prepay_id *@paramrequest *@return */@RequestMapping(value= "/unifiedOrder", ...

  7. java微信内h5调起支付_java进行微信h5支付开发

    最近在做微信支付开发用的框架是 srpingMVC mybatis spring 下面是开发流程图 我们只需要开发红色标记的模块就可以了. 具体参数详情可以查看微信开发者文档. 新手第一次写,写的不好 ...

  8. 编写JAVA程序从键盘输入矩形的宽和高,输出矩形的周长和面积。 (分别试用两种输入和输出方法,输出结果精确到小数点后两位)

    代码如下: 第一种: import java.util.Scanner; public class Area { public static void main(String[] args) {// ...

  9. java小游戏实训报告心得_Java实训报告-扫雷.doc

    Java实训报告-扫雷 实训报告书 实训名称: JAVA程序设计实训 系 (部): 信息工程系 专业班级: 计算机科学与技术08-1 学生姓名: 学 号: 指导教师: 完成日期: 山东科技大学泰山科技 ...

最新文章

  1. 迈出编程第一步!必知必会的10个编程技巧及查错方法
  2. 腾讯员工:越来越多的新生都想要学计算机专业,好日子长不了
  3. 进一步理解:inline-block,vertical-align,line-height
  4. linux中initrd的含义,Linux2.6 内核的 Initrd 机制解析
  5. JAVA入门级教学之(连接运算符)
  6. 主攻计算机专业英语翻译,湖师大“博导”黄振定,主攻“翻译学”
  7. 源码:Hadoop-3.0.3 启动过程中执行start-all.sh开始
  8. Spark--安装和配置遇到的所有问题
  9. 关于前端模块化你应该知道的
  10. c语言编程多分支,C语言编程(练习4:分支和跳转 )
  11. 什么是医疗健康管理系统?
  12. C51系列单片最小机原理图及L298N接线图
  13. 大学计算机基础通俗易懂教材,大学计算机基础(21世纪高等学校计算机规划教材)...
  14. 杨过为什么不喜欢郭芙、郭襄、程瑛……
  15. yxc_第一章 基础算法(二)_前缀和与差分
  16. 环境保护刻不容缓,智慧治理迎来新生!
  17. php 解压dat,如何打开dat文件?
  18. Android 与 Chrome OS 中针对大屏幕设备的更新
  19. 小红书竞品分析_跨境电商APP竞品分析:小红书、网易考拉和达令
  20. 第五次任务之三大抽样分布

热门文章

  1. 详细探究Spark的shuffle实现
  2. 4_less中带参数混合
  3. 数字图像处理 采样定理_数字图像处理基础知识总结
  4. 4095: 韩信点兵
  5. mysql事务会不会上锁_MySQL事务以及加锁机制
  6. autocad型源代码_C# 实现预览dwg文件完整源代码(无需autocad环境)
  7. 操作 mysql 不生成日志_利用Python操作MySQL数据库,以后不懂这些是要被鄙视的!...
  8. 联发科技嵌入式_【MTK联发科技嵌入式面试】联发科技校招最新面试经验-看准网...
  9. python数据包分析_python | 数据分析(一)- Numpy数据包
  10. git status怎么操作_Git 基本操作