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 ------切記

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