日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

判断两个矩形相交以及求出相交的区域

發布時間:2023/11/29 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 判断两个矩形相交以及求出相交的区域 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題:給定兩個矩形A和B,矩形A的左上角坐標為(Xa1,Ya1),右下角坐標為(Xa2,Ya2),矩形B的左上角坐標為(Xb1,Yb1),右下角 坐標為(Xb2,Yb2)。
(1)設計一個算法,確定兩個矩形是否相交(即有重疊區域)
(2)如果兩個矩形相交,設計一個算法,求出相交的區域矩形

(1)?????? 對于這個問題,一般的思路就是判斷一個矩形的四個頂點是否在另一個矩形的區域內。這個思路最簡單,但是效率不高,并且存在錯誤,錯誤在哪里,下面分析一 下。???????

????????
如上圖,把矩形的相交(區域重疊)分成三種(可能也有其他劃分),對于第三種情況,如圖中的(3),兩個矩形相交,但并不存在一個矩形的頂點在另一個矩形 內部。所以那種思路存在一個錯誤,對于這種情況的相交則檢查不出。

仔細觀察上圖,想到另一種思路,那就是判斷兩個矩形的中心坐標的水平和垂直距離,只要這兩個值滿足某種條件就可以相交。
矩形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)

轉載于:https://www.cnblogs.com/zhoug2020/p/7451340.html

總結

以上是生活随笔為你收集整理的判断两个矩形相交以及求出相交的区域的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。