矩形区域的交和并

import java.util.*;
public class 矩形区域的交和并 {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
     Scanner reader=new Scanner(System.in); 
     String[] s1=reader.nextLine().split(",");
     String[] s2=reader.nextLine().split(",");
     int ax1=Integer.valueOf(s1[0]);
     int ay1=Integer.valueOf(s1[1]);
     int ax2=Integer.valueOf(s1[2]);
     int ay2=Integer.valueOf(s1[3]);
     int bx1=Integer.valueOf(s2[0]);
     int by1=Integer.valueOf(s2[1]);
     int bx2=Integer.valueOf(s2[2]);
     int by2=Integer.valueOf(s2[3]);
     max(ax1,ay1,ax2,ay2,bx1,by1,bx2,by2);
     min(ax1,ay1,ax2,ay2,bx1,by1,bx2,by2);
	}
	public static void max(int ax1,int ay1,int ax2,int ay2,int bx1,int by1,int bx2,int by2){
		int cx,cy,cw,ch;
		if(ax1<bx1) 
			cx=ax1;
		else
			cx=bx1;
		if(ay1<by1) 
			cy=ay1;
		else
			cy=by1;
		if(ax2<bx2) 
			cw=bx2-cx;
		else
			cw=ax2-cx;
		if(ay2<by2) 
			ch=by2-cy;
		else
			ch=ay2-cy;
		System.out.println(cx+","+cy+","+cw+","+ch);
	}
    public static void min(int ax1,int ay1,int ax2,int ay2,int bx1,int by1,int bx2,int by2){
		int cx1=(ax2-ax1)/2+ax1;
		int cy1=(ay2-ay1)/2+ay1;
		int cx2=(bx2-bx1)/2+bx1;
		int cy2=(by2-by1)/2+by1;
		if(Math.abs(cx2-cx1)>=(ax2-ax1)/2+(bx2-bx1)/2)
		{
			System.out.println("无解");
			return;
		}
		if(Math.abs(cy2-cy1)>=(ay2-ay1)/2+(by2-by1)/2)
		{
			System.out.println("无解");
			return;
		}
		int cx,cy,cw,ch;
		if(ax1>bx1)
			cx=ax1;		
		else
			cx=bx1;
		if(ay1>by1)
			cy=ay1;
		else
			cy=by1;
		if(ax2>bx2)
			cw=bx2-cx;		
		else
			cw=ax2-cx;
		if(ay2>by2)
			ch=by2-cy;		
		else
			ch=ay2-cy;
		System.out.println(cx+","+cy+","+cw+","+ch);
		
	}

}

注:关键点是找出数学关系。当并的时候,找a1、b1点中x最小的,y最小的,a2、b2点中y最大的 x最大的。当交的时候,我们先找出两个矩形的中心点,计算中心点的相对的x和y值,如果x>aw/2+bw/2或者y>ah/2+bh/2的话,则不存在并集,否则存在。找a1、b1点中x最大的,y最大的,为交集的左下脚点,找a2、b2点中x最小的,y最小的,为交集的右上脚点
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值