Java---对角线-矩形相交

-------一般格式为:a= b?c:d
意思是,如果b的条件成立,赋值a=c,否则a=d
这个表达式是可以嵌套的,即可以a=b?c?d?:e:f:g
这样简单地写,就可以在某种情况代替if表达式而使程序看起来简洁。
但是这样的表达式一旦嵌套次数过多,程序可读性将急剧下降

杭电—2056
给定两个矩形A和B,矩形A的左上角座标为(Xa1,Ya1),右下角座标为(Xa2,Ya2),矩形B的左上角座标为(Xb1,Yb1),右下角 座标为(Xb2,Yb2)。
(1)设计一个算法,确定两个矩形是否相交(即有重叠区域)
(2)如果两个矩形相交,设计一个算法,求出相交的区域矩形

判断两个矩形的中心座标的水平和垂直距离,只要这两个值满足某种条件就可以相交。
矩形A的宽 Wa = Xa2-Xa1 高 Ha = Ya2-Ya1
矩形B的宽 Wb = Xb2-Xb1 高 Hb = Yb2-Yb1
矩形A的中心座标 (Xa3,Ya3) = ( (Xa2+Xa1)/2 ,(Ya2+Ya1)/2 )
矩形B的中心座标 (Xb3,Yb3) = ( (Xb2+Xb1)/2 ,(Yb2+Yb1)/2 )
所以只要同时满足下面两个式子,就可以说明两个矩形相交。

1) | Xb3-Xa3 | <= Wa/2 + Wb/2
2) | Yb3-Ya3 | <= Ha/2 + Hb/2

即:
| Xb2+Xb1-Xa2-Xa1 | <= Xa2-Xa1 + Xb2-Xb1
| Yb2+Yb1-Ya2-Ya1 | <=Y a2-Ya1 + Yb2-Yb1

(2) 对于这个问题,假设两个矩形相交,设相交之后的矩形为C,且矩形C的左上角座标为(Xc1,Yc1),右下角座标为(Xc2,Yc2),经过观察上图,很 显然可以得到:
Xc1 = max(Xa1,Xb1)
Yc1 = max(Ya1,Yb1)
Xc2 = min(Xa2,Xb2)
Yc2 = min(Ya2,Yb2)
这样就求出了矩形的相交区域。
另外,注意到在不假设矩形相交的前提下,定义(Xc1,Yc1),(Xc2,Yc2),且Xc1,Yc1,Xc2,Yc2的值由上面四个式子得出。这样, 可以依据Xc1,Yc1,Xc2,Yc2的值来判断矩形相交。
Xc1,Yc1,Xc2,Yc2只要同时满足下面两个式子,就可以说明两个矩形相交。
3) Xc1 <= Xc2
4) Yc1 <= Yc2
即:
max(Xa1,Xb1) <= min(Xa2,Xb2)
max(Ya1,Yb1) <= min(Ya2,Yb2)

我的心得: 输入的4个有关对角线座标的值-----有4种方向的对角线—
可以通过比较输入的一个矩形的4个值:始终保持–第1个值<第3个值, 第2个值<第4个值(否则调换2个值储存的位置)------这样一来可以保证对角线座标的存储为–左上 到 右下!在通过上述的直接求相交矩形的座标并且判断即可。
特别强调:!!—System.out.println(""+00.00200);
—System.out.println(00.00200);
以上两种均输出为0.002—print输出为数字时:只输出有效的0,
特别的:System.out.println(""+00.0000);
System.out.println(00.0000);
以上两种输出为:0.0 ------切记

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章