蓝桥杯JAVA 矩形面积交(计算几何)附代码
2018-02-02 19:15
309 查看
描述
平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。
输入
输入仅包含两行,每行描述一个矩形。
在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。
输出
输出仅包含一个实数,为交的面积,保留到小数后两位。
样例输入1 复制
样例输出1
小编刷蓝桥杯刷到 ..矩形面积交(计算几何)..这题目时,一直对“如何确定在坐标系中两个矩形相交”搞不懂,后来经过查阅资料,发现了有两种方法可以确定:
方法一:
分别找到2个矩形右下角的坐标中最小的x(minx)和最小的y(miny)---P2的点坐标
在找到2个矩形左上角坐标中最大的x(maxx)和最大的y(maxy)---P3的点坐标
最后 相交的矩形即对角线[minx,miny]--[maxx,maxy]所构成的矩形 当然如果minx>maxx或miny>maxy矩形不相交
可能不好理解,直接上图吧:
此处P3 P2就是要找的点!
1.应该注意的格式,控制在0.00内,可以使用DecimalFormat 类中的Format方法,控制格式
2.可以调用Math中的求最大(小)值的方法,就不用自己再去做交换比较了
3第一个if里的条件有个bug,就是当c[0]-c[1]=0||c[2]-c[3]=0时,会影响输入,所以在此小编用了两个if,而没有用else,用else分值会更低(亲测有效)
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
import java.text.DecimalFormat;
import java.util.Scanner;
public class XiangJiao {
public static void main(String[] args) {
double a[]=new double[4];
double b[]=new double[4];
double c[]=new double[4];
DecimalFormat df=new DecimalFormat("#.00");
Scanner sc=new Scanner(System.in);
int i,j;
for(i=0;i<4;i++)
{
a[i]=sc.nextDouble();
b[i]=sc.nextDouble();
}
//实则找左上角X最小
c[0]=Math.min(Math.max(a[0], a[1]),Math.max(a[2],a[3]));
//右下角X最大
c[1]=Math.max(Math.min(a[0], a[1]),Math.min(a[2], a[3]));
//实则找左上角Y最小
c[2]=Math.min(Math.max(b[0], b[1]),Math.max(b[2],b[3]));
//实则找右下角Y最大
c[3]=Math.max(Math.min(b[0], b[1]),Math.min(b[2], b[3]));
if(c[0]-c[1]<0||c[2]-c[3]<0)
{
System.out.println("0.00");
}
if(c[0]-c[1]>=0||c[2]-c[3]>=0)
{
System.out.println((c[0]-c[1])*(c[2]-c[3]));
}
}}
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
方法二:
方法二是利用数学原理(上图)
即求出两个矩形的中心点,然后判断:OA OB横坐标距离<矩形A B横边和/2&&OA OB纵坐标距离<矩形A B纵边和/2 这两个条件同时符合才算相交!
参考代码:
平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。
输入
输入仅包含两行,每行描述一个矩形。
在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。
输出
输出仅包含一个实数,为交的面积,保留到小数后两位。
样例输入1 复制
1 1 3 3 2 2 4 4
样例输出1
1.00
小编刷蓝桥杯刷到 ..矩形面积交(计算几何)..这题目时,一直对“如何确定在坐标系中两个矩形相交”搞不懂,后来经过查阅资料,发现了有两种方法可以确定:
方法一:
分别找到2个矩形右下角的坐标中最小的x(minx)和最小的y(miny)---P2的点坐标
在找到2个矩形左上角坐标中最大的x(maxx)和最大的y(maxy)---P3的点坐标
最后 相交的矩形即对角线[minx,miny]--[maxx,maxy]所构成的矩形 当然如果minx>maxx或miny>maxy矩形不相交
可能不好理解,直接上图吧:
此处P3 P2就是要找的点!
1.应该注意的格式,控制在0.00内,可以使用DecimalFormat 类中的Format方法,控制格式
2.可以调用Math中的求最大(小)值的方法,就不用自己再去做交换比较了
3第一个if里的条件有个bug,就是当c[0]-c[1]=0||c[2]-c[3]=0时,会影响输入,所以在此小编用了两个if,而没有用else,用else分值会更低(亲测有效)
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
import java.text.DecimalFormat;
import java.util.Scanner;
public class XiangJiao {
public static void main(String[] args) {
double a[]=new double[4];
double b[]=new double[4];
double c[]=new double[4];
DecimalFormat df=new DecimalFormat("#.00");
Scanner sc=new Scanner(System.in);
int i,j;
for(i=0;i<4;i++)
{
a[i]=sc.nextDouble();
b[i]=sc.nextDouble();
}
//实则找左上角X最小
c[0]=Math.min(Math.max(a[0], a[1]),Math.max(a[2],a[3]));
//右下角X最大
c[1]=Math.max(Math.min(a[0], a[1]),Math.min(a[2], a[3]));
//实则找左上角Y最小
c[2]=Math.min(Math.max(b[0], b[1]),Math.max(b[2],b[3]));
//实则找右下角Y最大
c[3]=Math.max(Math.min(b[0], b[1]),Math.min(b[2], b[3]));
if(c[0]-c[1]<0||c[2]-c[3]<0)
{
System.out.println("0.00");
}
if(c[0]-c[1]>=0||c[2]-c[3]>=0)
{
System.out.println((c[0]-c[1])*(c[2]-c[3]));
}
}}
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
方法二:
方法二是利用数学原理(上图)
即求出两个矩形的中心点,然后判断:OA OB横坐标距离<矩形A B横边和/2&&OA OB纵坐标距离<矩形A B纵边和/2 这两个条件同时符合才算相交!
参考代码:
相关文章推荐
- Java计算几何图形面积的实例代码
- 蓝桥杯 矩形区域的交和并 计算几何
- 通过程序设计几何图形、矩形、圆形、正方形几种类型,能够利用接口和多态性计算几何图形的面积和周长并显示。
- 通过程序设计几何图形(Shape)、矩形(Rectangle)、圆形(Circle)、正方形(Square)几种类型, 能够利用接口和多态性计算几何图形的面积和周长并显示。
- 通过程序设计几何图形(Shape)、矩形(Rectangle)、圆形(Circle)、正方形(Square)几种类型, 能够利用接口和多态性计算几何图形的面积和周长并显示。
- 通过程序设计几何图形(Shape)、矩形(Rectangle)、圆形(Circle)、正方形(Square)几种类型, 能够利用接口和多态性计算几何图形的面积和周长并显示。
- 计算三角形周长和面积java代码
- 百度之星初赛1006(计算几何:能包含凸包的最小矩形面积)
- hdu 5251 矩形面积(百度之星初赛1)(计算几何)
- 【java学习记录】2.定义一个计算矩形面积、立方体和球体体积的类,该类完成计算的方法用静态方法实现
- HDU 5251 矩形面积 (计算几何+旋转卡壳求覆盖凸包的最小矩形面积)
- 通过程序设计几何图形(Shape)、矩形(Rectangle)、圆形(Circle)、正方形(Square)几种类型,能够利用接口和多态性计算几何图形的面积和周长并显示。
- 通过程序设计几何图形(Shape)、矩形(Rectangle)、圆形(Circle)、正方形(Square)几种类型, 能够利用接口和多态性计算几何图形的面积和周长并显示。
- 通过程序设计几何图形(Shape)、矩形(Rectangle)、圆形(Circle)、正方形(Square)几种类型, 能够利用接口和多态性计算几何图形的面积和周长并显示
- 通过程序设计几何图形(Shape)、矩形(Rectangle)、圆形(Circle)、正方形(Square)几种类型, 能够利用接口和多态性计算几何图形的面积和周长并显示。
- Java——计算矩形是否相交、交集面积
- Java计算几何图形的面积
- 程序设计几何图形、矩形、圆形、正方形几种类型, 能够利用接口和多态性计算几何图形的面积和周长并显示。
- 通过程序设计几何图形(Shape)、矩形(Rectangle)、圆形(Circle)、正方形(Square)几种类型, 能够利用接口和多态性计算几何图形的面积和周长并显示。
- 【java学习记录】7.定义一个接口ArearInterface,其中包含一个方法,计算面积三角形、矩形、圆形的面积