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

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

 更新時(shí)間:2011年01月24日 20:09:54   作者:  
問(wèn)題:給定兩個(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è)問(wèn)題,一般的思路就是判斷一個(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è)式子,就可以說(shuō)明兩個(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è)問(wèn)題,假設(shè)兩個(gè)矩形相交,設(shè)相交之后的矩形為C,且矩形C的左上角坐標(biāo)為(Xc1,Yc1),右下角坐標(biāo)為(Xc2,Yc2),經(jīng)過(guò)觀察上圖,很 顯然可以得到:
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的值來(lái)判斷矩形相交。
Xc1,Yc1,Xc2,Yc2只要同時(shí)滿足下面兩個(gè)式子,就可以說(shuō)明兩個(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的過(guò)程

    K8ssandra入門教程之Linux上部署K8ssandra到Kubernetes的過(guò)程

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

    完美解決瀏覽器Flash插件過(guò)期不能用問(wèn)題

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

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

    這篇文章主要介紹了Git撤銷&回滾操作(git reset 和 get revert),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(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,這里介紹下如何使用,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下
    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í)在不行那就過(guò)一會(huì)再發(fā)送郵件。
    2009-06-06
  • 詳解Hadoop 運(yùn)行環(huán)境搭建過(guò)程

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

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

    Git配置用戶簽名方式及原因說(shuō)明

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

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

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

最新評(píng)論

六安市| 泰兴市| 平泉县| 新乡县| 措美县| 崇阳县| 临朐县| 乌审旗| 唐海县| 册亨县| 亳州市| 阿合奇县| 布尔津县| 雷山县| 富阳市| 运城市| 连州市| 隆化县| 随州市| 阜康市| 商河县| 澄城县| 南昌市| 长宁县| 静海县| 石城县| 巴塘县| 法库县| 墨脱县| 洪洞县| 江山市| 巴南区| 大兴区| 梅河口市| 莎车县| 安图县| 荥阳市| 乐山市| 克拉玛依市| 肇东市| 津市市|