最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

矩形相交以及求出相交的區(qū)域的原理解析

 更新時(shí)間:2011年01月24日 20:09:54   作者:  
問題:給定兩個(gè)矩形A和B,矩形A的左上角坐標(biāo)為(Xa1,Ya1),右下角坐標(biāo)為(Xa2,Ya2),矩形B的左上角坐標(biāo)為(Xb1,Yb1),右下角 坐標(biāo)為(Xb2,Yb2)。
(1)設(shè)計(jì)一個(gè)算法,確定兩個(gè)矩形是否相交(即有重疊區(qū)域)
(2)如果兩個(gè)矩形相交,設(shè)計(jì)一個(gè)算法,求出相交的區(qū)域矩形

(1) 對(duì)于這個(gè)問題,一般的思路就是判斷一個(gè)矩形的四個(gè)頂點(diǎn)是否在另一個(gè)矩形的區(qū)域內(nèi)。這個(gè)思路最簡(jiǎn)單,但是效率不高,并且存在錯(cuò)誤,錯(cuò)誤在哪里,下面分析一 下。

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

仔細(xì)觀察上圖,想到另一種思路,那就是判斷兩個(gè)矩形的中心坐標(biāo)的水平和垂直距離,只要這兩個(gè)值滿足某種條件就可以相交。
矩形A的寬 Wa = Xa2-Xa1 高 Ha = Ya2-Ya1
矩形B的寬 Wb = Xb2-Xb1 高 Hb = Yb2-Yb1
矩形A的中心坐標(biāo) (Xa3,Ya3) = ( (Xa2+Xa1)/2 ,(Ya2+Ya1)/2 )
矩形B的中心坐標(biāo) (Xb3,Yb3) = ( (Xb2+Xb1)/2 ,(Yb2+Yb1)/2 )
所以只要同時(shí)滿足下面兩個(gè)式子,就可以說明兩個(gè)矩形相交。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) 對(duì)于這個(gè)問題,假設(shè)兩個(gè)矩形相交,設(shè)相交之后的矩形為C,且矩形C的左上角坐標(biāo)為(Xc1,Yc1),右下角坐標(biāo)為(Xc2,Yc2),經(jīng)過觀察上圖,很 顯然可以得到:
Xc1 = max(Xa1,Xb1)
Yc1 = max(Ya1,Yb1)
Xc2 = min(Xa2,Xb2)
Yc2 = min(Ya2,Yb2)
這樣就求出了矩形的相交區(qū)域。
另外,注意到在不假設(shè)矩形相交的前提下,定義(Xc1,Yc1),(Xc2,Yc2),且Xc1,Yc1,Xc2,Yc2的值由上面四個(gè)式子得出。這樣, 可以依據(jù)Xc1,Yc1,Xc2,Yc2的值來判斷矩形相交。
Xc1,Yc1,Xc2,Yc2只要同時(shí)滿足下面兩個(gè)式子,就可以說明兩個(gè)矩形相交。
3) Xc1 <= Xc2
4) Yc1 <= Yc2
即:
max(Xa1,Xb1) <= min(Xa2,Xb2)
max(Ya1,Yb1) <= min(Ya2,Yb2)

相關(guān)文章

  • K8ssandra入門教程之Linux上部署K8ssandra到Kubernetes的過程

    K8ssandra入門教程之Linux上部署K8ssandra到Kubernetes的過程

    K8ssandra不僅幫助我們可以快速可靠地在Kubernetes上部署Cassandra,同時(shí)提供了許多組件,如監(jiān)控、備份、同步、訪問等,這篇文章給大家介紹K8ssandra入門教程之Linux上部署K8ssandra到Kubernetes的過程,一起看看吧
    2021-10-10
  • 完美解決瀏覽器Flash插件過期不能用問題

    完美解決瀏覽器Flash插件過期不能用問題

    這篇文章主要介紹了完美解決瀏覽器Flash插件過期不能用問題
    2021-02-02
  • Git撤銷&回滾操作(git reset 和 get revert)

    Git撤銷&回滾操作(git reset 和 get revert)

    這篇文章主要介紹了Git撤銷&回滾操作(git reset 和 get revert),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Atom-IDE 的使用方法簡(jiǎn)單介紹

    Atom-IDE 的使用方法簡(jiǎn)單介紹

    這篇文章主要介紹了Atom-IDE 的使用方法簡(jiǎn)單介紹的相關(guān)資料,Facebook 和 GitHub 兩大巨頭聯(lián)手推出 Atom-IDE,這里介紹下如何使用,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • JAVA IDEA入門使用手冊(cè)(新手小白必備)

    JAVA IDEA入門使用手冊(cè)(新手小白必備)

    IDEA的每一個(gè)方面都是為了最大限度地提高開發(fā)人員的工作效率而設(shè)計(jì)的,本文主要介紹了JAVA IDEA入門使用手冊(cè),幫助新手更好的入門,感興趣的可以了解一下
    2021-05-05
  • 好玩的vbs小程序之關(guān)機(jī)功能

    好玩的vbs小程序之關(guān)機(jī)功能

    這篇文章主要介紹了好玩的vbs小程序之關(guān)機(jī)功能,非常有趣,感興趣的朋友跟隨小編一起看看吧
    2019-09-09
  • 電子郵件 退信原因大全

    電子郵件 退信原因大全

    我們可以對(duì)郵件多嘗試幾次發(fā)送,如果實(shí)在不行那就過一會(huì)再發(fā)送郵件。
    2009-06-06
  • 詳解Hadoop 運(yùn)行環(huán)境搭建過程

    詳解Hadoop 運(yùn)行環(huán)境搭建過程

    這篇文章主要介紹了Hadoop 運(yùn)行環(huán)境搭建過程,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-06-06
  • Git配置用戶簽名方式及原因說明

    Git配置用戶簽名方式及原因說明

    這篇文章主要為大家介紹了Git配置用戶簽名方式及原因說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • Git工作流演示及三種工作方式

    Git工作流演示及三種工作方式

    在項(xiàng)目開發(fā)過程中使用Git的方式有三種工作方式,分別是集中式工作流,Git Flow工作流,F(xiàn)orking 工作流。下面主要針對(duì)Git工作流進(jìn)行講解
    2022-04-04

最新評(píng)論

镇安县| 南陵县| 庄河市| 万盛区| 白城市| 海南省| 噶尔县| 辉南县| 教育| 松原市| 鄂托克旗| 镇康县| 同江市| 辉南县| 青海省| 岚皋县| 石河子市| 七台河市| 舒城县| 娄烦县| 荃湾区| 岢岚县| 南溪县| 卢湾区| 龙胜| 房产| 广州市| 洮南市| 沐川县| 杭锦旗| 永川市| 灌南县| 彭山县| 城步| 达孜县| 福鼎市| 甘泉县| 巴东县| 桦甸市| 江口县| 克拉玛依市|