亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種判斷點(diǎn)是否位于多邊形內(nèi)的方法

文檔序號(hào):6610275閱讀:362來(lái)源:國(guó)知局

專(zhuān)利名稱(chēng)::一種判斷點(diǎn)是否位于多邊形內(nèi)的方法
技術(shù)領(lǐng)域
:本發(fā)明屬于計(jì)算機(jī)圖形技術(shù)和計(jì)算幾何
技術(shù)領(lǐng)域
,尤其涉及一種判斷點(diǎn)是否位于多邊形內(nèi)的方法。
背景技術(shù)
:點(diǎn)是否位于多邊形內(nèi)的判定計(jì)算,是計(jì)算幾何中的一個(gè)基本問(wèn)題,這方面的方法在計(jì)算機(jī)圖形學(xué)、模式識(shí)別、地理信息系統(tǒng)等眾多領(lǐng)域有著廣泛的應(yīng)用。這方面的方法可分成兩類(lèi),一類(lèi)是不對(duì)多邊形進(jìn)行預(yù)先處理的,一類(lèi)是要對(duì)多邊形預(yù)先進(jìn)行一定的處理的。在前一類(lèi)方法中,最常用的是射線法,即從被檢測(cè)點(diǎn)發(fā)出一條射線,計(jì)算與它相交的多邊形的邊的個(gè)數(shù),如果是奇數(shù)個(gè),則該點(diǎn)位于多邊形內(nèi),否則位于多邊形外。這類(lèi)方法需要計(jì)算多邊形的每條邊,時(shí)間復(fù)雜度高,為O(N)(即其計(jì)算量的多少是與N成線性對(duì)應(yīng)關(guān)系),N是多邊形的邊數(shù)。在后一類(lèi)方法中,主要是對(duì)多邊形的邊、所覆蓋的區(qū)域等進(jìn)行一定的組織,使得判斷計(jì)算的時(shí)間復(fù)雜度降低,加快計(jì)算速度。比如著名的梯形剖分法(參見(jiàn)ZalikB,JezemikA.,ZalikKR.Polygontrapezoidationbysetsofopentrapezoids.Computers&Graphics2003;27(5):791-800.),用經(jīng)過(guò)頂點(diǎn)的平行坐標(biāo)軸的直線,將多邊形剖分成一些梯形,再根據(jù)梯形坐標(biāo)值的單調(diào)增加或降低的方法,將梯形順序排列,判斷計(jì)算時(shí)可利用二分檢索技術(shù),以避免處理很多邊,將判斷計(jì)算的時(shí)間復(fù)雜度降至O(logN),N是多邊形的邊數(shù)。在實(shí)際應(yīng)用中,經(jīng)常會(huì)遇到邊數(shù)很多的多邊形,而目前已有的技術(shù)的方法,其空間開(kāi)銷(xiāo)很大,不便于對(duì)邊數(shù)很多的多邊形進(jìn)行處理,受空間表達(dá)能力或計(jì)算能力的限制,判斷效率不高。
發(fā)明內(nèi)容本發(fā)明的目的是提供一種判斷點(diǎn)是否位于多邊形內(nèi)的方法,提高計(jì)算速度,降低空間開(kāi)銷(xiāo)。本發(fā)明的判斷點(diǎn)是否位于多邊形內(nèi)的方法,其步驟包括1)將給定的多邊形剖分為單調(diào)多邊形集合;2)將上述單調(diào)多邊形中非凸的多邊形進(jìn)行凸剖分,得到給定多邊形的凸多邊形集合;3)以凸多邊形的邊形成的直線作為劃分直線,基于每劃分直線兩側(cè)凸多邊形的個(gè)數(shù)建立平衡二叉樹(shù),其中根節(jié)點(diǎn)和中間結(jié)點(diǎn)存放各自相應(yīng)的劃分直線,每個(gè)葉節(jié)點(diǎn)存放相應(yīng)的一凸多邊形;4)根據(jù)給定點(diǎn)與平衡二叉樹(shù)非葉子節(jié)點(diǎn)存放的劃分直線的位置關(guān)系對(duì)上述平衡二叉樹(shù)進(jìn)行搜索,直至到達(dá)一葉節(jié)點(diǎn);5)判斷給定點(diǎn)和上述葉節(jié)點(diǎn)對(duì)應(yīng)的凸多邊形的位置關(guān)系,如果該點(diǎn)位于這個(gè)凸多邊形內(nèi),則該點(diǎn)位于給定的多邊形內(nèi);否則,該點(diǎn)位于給定的多邊形外。本發(fā)明是一種對(duì)多邊形進(jìn)行預(yù)先處理的方法,也是基于多邊形覆蓋區(qū)域的剖分。與現(xiàn)有方法相比,所剖分后的單元是凸多邊形,其個(gè)數(shù)要比其它剖分方法生成的單元的個(gè)數(shù)少,因此,所建立的二叉樹(shù)和表達(dá)凸多邊形的空間開(kāi)銷(xiāo)得到節(jié)省。二叉樹(shù)搜索的時(shí)間復(fù)雜度是O(logN),且判斷一個(gè)點(diǎn)是否位于一個(gè)凸多邊形內(nèi)的時(shí)間復(fù)雜度也是O(logN),因此本發(fā)明的時(shí)間復(fù)雜度也是O(logN)。但得益于其剖分單元的個(gè)數(shù)少,其判斷速度快于基于梯形剖分的方法。處理邊數(shù)很多的多邊形時(shí),點(diǎn)是否位于多邊形內(nèi)的判斷效率得到大幅的提高,適用于各種要對(duì)同一個(gè)多邊形進(jìn)行多次判斷點(diǎn)是否位于多邊形內(nèi)的方法。圖1多邊形的凸剖分操作圖。圖2多邊形的凸剖分結(jié)果圖。圖3據(jù)凸剖分結(jié)果圖建立的平衡二叉樹(shù)。圖4判斷某點(diǎn)是否位于凸多邊形內(nèi)的方法圖。圖5判斷點(diǎn)是否位于多邊形內(nèi)的流程圖。具體實(shí)施例方式本發(fā)明的方法主要包括下列兩個(gè)階段第一階段是對(duì)給定的多邊形進(jìn)行凸剖分,建立平衡二叉樹(shù)來(lái)管理凸多邊形;第二階段是根據(jù)所建立的平衡二叉樹(shù)和生成的凸多邊形,判斷被檢測(cè)點(diǎn)是否位于多邊形內(nèi)。l.第一階段的實(shí)現(xiàn)步驟如下-首先將給定的多邊形剖分成一些單調(diào)多邊形(即每個(gè)這樣的多邊形的邊可分成2個(gè)單調(diào)邊序列)(參見(jiàn)文獻(xiàn)deBergM,vanKreveldM,Ove醒rsM,etal.ComputationalGeometry:AlgorithmsandApplications.2nded.Berlin:Springer,2000中的方法),再將各個(gè)單調(diào)多邊形進(jìn)行凸剖分。本發(fā)明采用的是一種不加點(diǎn)的凸剖分方法,圖1是多邊形的凸剖分操作圖,其具體步驟如下-1)將多邊形剖分成單調(diào)多邊形a)找到多邊形的所有上凹點(diǎn)和下凹點(diǎn);這里,若一個(gè)凹點(diǎn)的Y坐標(biāo)值小于它相鄰的兩個(gè)頂點(diǎn)的Y坐標(biāo)值,則稱(chēng)該凹點(diǎn)為上凹點(diǎn);若一個(gè)凹點(diǎn)的Y坐標(biāo)值大于它相鄰的兩個(gè)頂點(diǎn)的Y坐標(biāo)值,則稱(chēng)該凹點(diǎn)為下凹點(diǎn);b)對(duì)所有上凹點(diǎn)和下凹點(diǎn),根據(jù)它們的Y坐標(biāo)值排序;c)對(duì)每一個(gè)上凹點(diǎn),將其與任一個(gè)Y坐標(biāo)值小于它的下凹點(diǎn)或凸頂點(diǎn)連成一條邊,選取其中位于該多邊形內(nèi)且邊長(zhǎng)最短的一條邊,將多邊形進(jìn)行一次剖分;同理,對(duì)每一個(gè)下凹點(diǎn),將其與任一個(gè)Y坐標(biāo)值大于它的上凹點(diǎn)或凸頂點(diǎn)連成一條邊,選取其中位于該多邊形內(nèi)且邊長(zhǎng)最短的一條邊,將多邊形進(jìn)行一次剖分;d)重復(fù)c)的操作,上凹點(diǎn)和下凹點(diǎn)都要操作一次;2)將非凸的單調(diào)多邊形剖分成凸多邊形a)找出單調(diào)多邊形中的凹點(diǎn),將它們的Y坐標(biāo)值從大到小進(jìn)行排序;b)按照Y坐標(biāo)值由大到小的順序依次處理凹點(diǎn),將凹點(diǎn)與Y坐標(biāo)值小于它的凹點(diǎn)或其它頂點(diǎn)進(jìn)行連接,選取其中邊長(zhǎng)最短且在該單調(diào)多邊形內(nèi)的一條邊作為該單調(diào)多邊形的一次剖分;c)反復(fù)進(jìn)行b)的操作,直至各個(gè)剖分的多邊形中都沒(méi)有凹點(diǎn)為止,即這些凸多邊形的并集就是原來(lái)的多邊形。圖2即為多邊形的凸剖分結(jié)果圖。3)建立一個(gè)管理凸多邊形的平衡二叉樹(shù)對(duì)凸邊形構(gòu)成的集合迭代地進(jìn)行二分,即每次將所考察的凸多邊形集合分成2個(gè)集合,直至每個(gè)子集合中只有一個(gè)凸多邊形。在二分的過(guò)程中,對(duì)于所考察的多邊形集合中這些多邊形的邊,將每條邊兩端延長(zhǎng),形成與這些邊共線的直線,計(jì)算每條直線兩邊的凸多邊形個(gè)數(shù)的差異,以及與該直線相交的凸多邊形的個(gè)數(shù)相對(duì)于該集合中凸多邊形個(gè)數(shù)的比例,來(lái)決定分割該集合的劃分直線。它們的具體計(jì)算方法如下a)假設(shè)位于一條直線左側(cè)的凸多邊形集合為S,、位于其右側(cè)的凸多邊形集合為&、與該直線相交的凸多邊形集合為Sz,它們所包含的凸多邊形個(gè)數(shù)分別為ru、nR、ni。我們計(jì)算3個(gè)參量,即純凈度戶(hù)D(i^g壓g^e)="£+,平衡度<formula>formulaseeoriginaldocumentpage7</formula>丑Z)(扁露eDeg,)=i」"廣l,選擇度SD(SelectionDegree)=Min(PD,BD),即PD和BD這兩個(gè)值中較小的那一個(gè)值就為SD的值。b)為每條直線計(jì)算其SD值,然后,以SD值最大的一條直線作為這個(gè)凸多邊形集合的劃分直線,將此集合分割成2個(gè)子集合,此時(shí)這2個(gè)子集合均要包含與該劃分直線相交的凸多邊形。這里,計(jì)算PD的目的是要使與劃分直線相交的凸多邊形的個(gè)數(shù)盡可能少,以減少凸多邊形被重復(fù)處理的次數(shù),以降低樹(shù)的高度,節(jié)省存儲(chǔ)空間和加速判斷計(jì)算;計(jì)算BD的目的是使樹(shù)的兩邊盡可能平衡,以提高判斷計(jì)算時(shí)相應(yīng)的二分搜索的速度。所建立的平衡二叉樹(shù),如圖3所示,其中樹(shù)的間結(jié)點(diǎn)記錄相關(guān)的劃分直線,而其葉子結(jié)點(diǎn)記錄相關(guān)的一個(gè)凸多邊形。2.第二階段的實(shí)現(xiàn)步驟如下(1)根據(jù)被檢測(cè)點(diǎn)的坐標(biāo),對(duì)二叉樹(shù)進(jìn)行由頂至底的搜索,即先考察樹(shù)的根結(jié)點(diǎn),看被檢測(cè)點(diǎn)位于其劃分直線的哪一邊,然后就以那一邊對(duì)應(yīng)的子結(jié)點(diǎn)作為下一步考察的對(duì)象,如此迭代進(jìn)行,直至到達(dá)葉結(jié)點(diǎn),該葉節(jié)點(diǎn)中的凸多邊形就是所要找的凸多邊形。(2)對(duì)于葉結(jié)點(diǎn)中的凸多邊形,判斷被檢測(cè)點(diǎn)是否位于該凸多邊形內(nèi),首先將它的邊分成兩個(gè)單調(diào)邊序列,即找到這個(gè)凸多邊形中Y坐標(biāo)值最大的一個(gè)頂點(diǎn)和Y坐標(biāo)值最小的一個(gè)頂點(diǎn),根據(jù)這兩個(gè)頂點(diǎn)將該多邊形的邊分成2個(gè)部分,每個(gè)部分都是順序連接的邊,且這些邊的頂點(diǎn)Y坐標(biāo)值是順序增大的或減小的;然后,根據(jù)被檢測(cè)點(diǎn)的Y坐標(biāo)值形成一條平行X軸的直線,如圖4所示,計(jì)算該直線與這個(gè)凸多邊形的兩個(gè)單調(diào)邊序列的兩個(gè)交點(diǎn)的X坐標(biāo)值,比較被檢測(cè)點(diǎn)的X坐標(biāo)值是否位于兩個(gè)交點(diǎn)的X坐標(biāo)值之間。如果是,則該點(diǎn)位于這個(gè)凸多邊形內(nèi),也就是位于給定的多邊形內(nèi);否則,在給定的多邊形外。圖5是本發(fā)明判斷點(diǎn)是否位于多邊形內(nèi)的整體流程圖。下面是本發(fā)明的一些實(shí)驗(yàn)數(shù)據(jù)隨機(jī)生成4個(gè)多邊形以進(jìn)行實(shí)驗(yàn),它們都有10000條邊,但它們的凹點(diǎn)所占的比例分別為0%、10%、30%和50%。凹點(diǎn)比例為0%的多邊形就是凸多邊形。測(cè)試時(shí),我們?cè)诙噙呅蔚陌鼑袃?nèi)均勻分布1000個(gè)點(diǎn)進(jìn)行檢測(cè),將它們的平均檢測(cè)時(shí)間作為實(shí)驗(yàn)數(shù)據(jù)。我們將新方法與國(guó)際上已知最快的隨機(jī)漸增梯形法(therandomizedincrementaltrapezoidation-basedalgorithm)進(jìn)行了實(shí)驗(yàn)對(duì)比,實(shí)驗(yàn)數(shù)據(jù)見(jiàn)下列表中。實(shí)驗(yàn)表明,新方法使用的凸多邊形個(gè)數(shù)少于隨機(jī)漸增梯形法所使用的梯形個(gè)數(shù),新方法在存儲(chǔ)空間需求和檢測(cè)速度方面均好于隨機(jī)漸增梯形法。<table>tableseeoriginaldocumentpage8</column></row><table>實(shí)驗(yàn)表明,與目前最快的基于梯形剖分的方法一増量梯形法相比,本發(fā)明的方法在多邊形的預(yù)處理的時(shí)間、空間需求和判斷計(jì)算等各個(gè)方面具有相同的復(fù)雜度,但是新方法所生成的凸多邊形要少于增量梯形法所生成的梯形,因此,新方法的空間需求要少,判斷速度要快。權(quán)利要求1、一種判斷點(diǎn)是否位于多邊形內(nèi)的方法,其步驟包括1)將給定的多邊形剖分為單調(diào)多邊形集合;2)將上述單調(diào)多邊形中非凸的多邊形進(jìn)行凸剖分,得到給定多邊形的凸多邊形集合;3)以凸多邊形的邊形成的直線作為劃分直線,基于每劃分直線兩側(cè)凸多邊形的個(gè)數(shù)建立平衡二叉樹(shù),其中根節(jié)點(diǎn)和中間結(jié)點(diǎn)存放各自相應(yīng)的劃分直線,葉節(jié)點(diǎn)存放相應(yīng)的一凸多邊形;4)根據(jù)給定點(diǎn)與平衡二叉樹(shù)非葉子節(jié)點(diǎn)存放的劃分直線的位置關(guān)系對(duì)上述平衡二叉樹(shù)進(jìn)行搜索,直至到達(dá)一葉節(jié)點(diǎn);5)判斷給定點(diǎn)和上述葉節(jié)點(diǎn)對(duì)應(yīng)的凸多邊形的位置關(guān)系,如果該點(diǎn)位于這個(gè)凸多邊形內(nèi),則該點(diǎn)位于給定的多邊形內(nèi);否則,該點(diǎn)位于給定的多邊形外。2、如權(quán)利要求l所述的判斷點(diǎn)是否位于多邊形內(nèi)的方法,其特征在于所述步驟1)為a)找到多邊形的所有上凹點(diǎn)和下凹點(diǎn);b)對(duì)所有上凹點(diǎn)和下凹點(diǎn),根據(jù)它們的Y坐標(biāo)值排序;c)對(duì)每一個(gè)上凹點(diǎn),將其與任一個(gè)Y坐標(biāo)值小于它的下凹點(diǎn)或凸頂點(diǎn)連成一條邊,選取其中位于該多邊形內(nèi)部且邊長(zhǎng)最短的一條邊,將多邊形進(jìn)行一次剖分;同理,對(duì)每一個(gè)下凹點(diǎn),將其與任一個(gè)Y坐標(biāo)值大于它的上凹點(diǎn)或凸頂點(diǎn)連成一條邊,選取其中位于該多邊形內(nèi)部且邊長(zhǎng)最短的一條邊,將多邊形進(jìn)行一次剖分;d)重復(fù)c)的操作,上凹點(diǎn)和下凹點(diǎn)都要操作一次。3、如權(quán)利要求1或2所述的判斷點(diǎn)是否位于多邊形內(nèi)的方法,其特征在于所述步驟2)為a)找出單調(diào)多邊形中的凹點(diǎn),將它們的Y坐標(biāo)值由大到小進(jìn)行排序;b)按照Y坐標(biāo)值由大到小的順序依次處理凹點(diǎn),將凹點(diǎn)與Y坐標(biāo)值小于它的凹點(diǎn)或其它頂點(diǎn)進(jìn)行連接,選取其中邊長(zhǎng)最短且在該單調(diào)多邊形內(nèi)的一條邊作為該單調(diào)多邊形的一次剖分;c)反復(fù)進(jìn)行b)的操作,直至各個(gè)剖分的多邊形中都沒(méi)有凹點(diǎn)為止。4、如權(quán)利要求1所述的判斷點(diǎn)是否位于多邊形內(nèi)的方法,其特征在于計(jì)算與劃分直線相交的當(dāng)前凸多邊形集合中的凸多邊形的個(gè)數(shù)相對(duì)于集合中凸多邊形個(gè)數(shù)的比例,以及位于該劃分直線兩側(cè)的當(dāng)前凸多邊形集合中的凸多邊形的個(gè)數(shù)的比例,來(lái)選定分割當(dāng)前凸多邊形集合的劃分直線,其步驟如下1)設(shè)位于一條劃分直線兩側(cè)的凸多邊形集合分別為S,、SR、與該直線相交的凸多邊形集合為S,,它們所包含的凸多邊形個(gè)數(shù)分別為n,,n、n;計(jì)算3個(gè)參量;純凈度<formula>formulaseeoriginaldocumentpage3</formula>選擇度<formula>formulaseeoriginaldocumentpage3</formula>2)選定SD值最大的一條劃分直線作為當(dāng)前凸多邊形集合的劃分直線。5、如權(quán)利要求4所述的判斷點(diǎn)是否位于多邊形內(nèi)的方法,其特征在于如存在多條SD值最大的劃分直線,則任選一條作為當(dāng)前凸多邊形集合的劃分直線。6、如權(quán)利要求1所述的判斷點(diǎn)是否位于多邊形內(nèi)的方法,其特征在于所述步驟4)為從二叉樹(shù)的根結(jié)點(diǎn)開(kāi)始,判斷被檢測(cè)點(diǎn)位于它相關(guān)的劃分直線的哪一邊,并以這邊對(duì)應(yīng)的子結(jié)點(diǎn)作為下一步考察的樹(shù)結(jié)點(diǎn),沿著樹(shù)結(jié)點(diǎn)迭代地操作,直至達(dá)到一個(gè)葉結(jié)點(diǎn)。7、如權(quán)利要求1或6所述的判斷點(diǎn)是否位于多邊形內(nèi)的方法,其特征在于所述步驟5)為將該葉節(jié)點(diǎn)對(duì)應(yīng)的凸多邊形的邊分成兩個(gè)單調(diào)邊序列;然后,根據(jù)給定點(diǎn)的Y坐標(biāo)值形成一條平行X軸的直線,并計(jì)算該直線與這個(gè)凸多邊形的兩個(gè)單調(diào)邊序列的兩個(gè)交點(diǎn)的X坐標(biāo)值;如果給定點(diǎn)的X坐標(biāo)值位于這兩個(gè)交點(diǎn)的X坐標(biāo)值之間,則這該點(diǎn)位于該凸多邊形內(nèi),也位于給定的多邊形內(nèi);否則該點(diǎn)位于該凸多邊形外,也位于給定的多邊形外。全文摘要本發(fā)明屬于計(jì)算機(jī)圖形技術(shù)和計(jì)算幾何
技術(shù)領(lǐng)域
,是一種判斷點(diǎn)是否位于多邊形內(nèi)的方法。本發(fā)明先對(duì)多邊形進(jìn)行凸剖分,并建立二叉樹(shù)來(lái)管理這些凸多邊形;然后,根據(jù)被檢測(cè)點(diǎn)的坐標(biāo)位置,對(duì)所建立的二叉樹(shù)進(jìn)行考察,以找到該二叉數(shù)的一葉節(jié)點(diǎn)對(duì)應(yīng)的凸多邊形,再檢測(cè)該點(diǎn)是否位于這個(gè)凸多邊形內(nèi),以判斷被檢測(cè)點(diǎn)是否位于給定的多邊形內(nèi)。本發(fā)明的優(yōu)點(diǎn)是計(jì)算速度快,比基于多邊形剖分的同類(lèi)方法節(jié)省存儲(chǔ)空間,易于實(shí)現(xiàn)。適用于多個(gè)點(diǎn)要對(duì)同一個(gè)多邊形進(jìn)行這種包含性判斷的情況。文檔編號(hào)G06T7/60GK101114379SQ20071012150公開(kāi)日2008年1月30日申請(qǐng)日期2007年9月7日優(yōu)先權(quán)日2007年9月7日發(fā)明者靜李,王文成申請(qǐng)人:中國(guó)科學(xué)院軟件研究所
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1