專利名稱:一種對多邊形進(jìn)行邏輯運算處理的方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及圖形處理領(lǐng)域,尤其涉及一種對多邊形進(jìn)行邏輯運算處理的方法及裝置。
背景技術(shù):
多邊形可以看作為由多條直線段向量,曲線段向量連接而成的向量鏈表,該鏈表首尾相聯(lián)構(gòu)成循環(huán)鏈表。如果這個循環(huán)鏈表中相鄰向量的交點是它們之間共用的單個點, 同時不相鄰的向量不相交,則該鏈表描述的多邊形為簡單多邊形。一般在表示物體的輪廓時或者表示一個路徑細(xì)節(jié)時,都是采用二維或多維的多邊形進(jìn)行描述的。在相應(yīng)的領(lǐng)域經(jīng)常需要直接對多邊形進(jìn)行處理。例如計算機(jī)輔助設(shè)計與制造(CAD/CAM)中對機(jī)械結(jié)構(gòu),土建工程等的設(shè)計;集成電路版圖設(shè)計和繪制;機(jī)器人路徑規(guī)劃;地理信息系統(tǒng)中的路徑規(guī)劃等。在對多邊形的處理與運算中,邏輯運算是最基本的運算方式,包括多邊形的求交集、求并集等操作。在原來的大部分圖形圖像處理軟件中,對多邊形間的運算處理都是光柵化后,直接采用點陣的運算實現(xiàn)。例如求解兩個多邊形的交集,是通過如下的方式獲取的。首先將第一個多邊形采用圖形學(xué)的相關(guān)算法生成相應(yīng)的黑白點陣,其中黑點表示該點在區(qū)域范圍內(nèi),白點表示該點在區(qū)域范圍外;然后采用同樣的方法將第二個多邊形生成相應(yīng)的黑白點陣,然后將兩個黑白點陣求交集,即同一位置點上只有都為黑點是結(jié)果才為黑點。同樣求解兩個多邊形的并集也可以采用同樣的方法進(jìn)行實現(xiàn)。但是在圖形處理領(lǐng)域更多的需要是對多邊形或輪廓進(jìn)行矢量化的處理,要求處理前后都是以矢量方式描述對應(yīng)的多邊形或輪廓,因而這種點陣化的處理方式已經(jīng)無法滿足目前各個領(lǐng)域內(nèi)對圖形處理的需要。
發(fā)明內(nèi)容
本發(fā)明實施例提供了一種對多邊形進(jìn)行邏輯運算處理的方法及裝置,用于實現(xiàn)對簡單多邊形和復(fù)雜多邊形進(jìn)行矢量化邏輯運算處理。本發(fā)明實施例提供的一種對多邊形進(jìn)行邏輯運算處理的方法,包括確定組成各多邊形的各個第一向量,以及所述各個第一向量的交點;對存在交點但交點不為端點的第一向量,在交點處分解為多個第二向量;遍歷各第二向量和未分解的第一向量的端點,將重合的端點確定為重合點;根據(jù)重合點的每個關(guān)聯(lián)向量的邊界狀態(tài),確定符合邏輯運算結(jié)果的向量并輸出; 所述關(guān)聯(lián)向量為端點為重合點的第一向量和/或第二向量。本發(fā)明實施例提供的一種對多邊形進(jìn)行邏輯運算處理的裝置,包括第一確定單元,用于確定組成各多邊形的各個第一向量,以及各個第一向量的交
點分解單元,用于對存在交點但交點不為端點的第一向量,在交點處進(jìn)行分解為多個第二向量;
第二確定單元,用于遍歷各第二向量和未分解的第一向量的端點,將重合的端點確定為重合點;邏輯計算結(jié)果輸出單元,用于根據(jù)重合點的每個關(guān)聯(lián)向量的邊界狀態(tài),確定符合邏輯運算結(jié)果的向量并輸出;所述關(guān)聯(lián)向量為端點為重合點的第一向量和/或第二向量。本發(fā)明實施例的有益效果包括本發(fā)明實施例提供的對多邊形進(jìn)行邏輯運算處理的方法及裝置,首先確定組成各多邊形的各個第一向量,以及所述各個第一向量的交點,對存在交點但交點不為端點的第一向量,在交點處分解為多個第二向量,遍歷各個第二向量和未分解的第一向量的端點,將重合的端點確定為重合點,根據(jù)重合點每個關(guān)聯(lián)向量的邊界狀態(tài),確定符合邏輯運算結(jié)果的向量并輸出,本發(fā)明實施例提供的對多邊形進(jìn)行邏輯運算處理的方法及裝置,能夠?qū)M(jìn)行邏輯運算的多個多邊形出現(xiàn)線段相交或重合的各種情況進(jìn)行處理,對于參與邏輯計算的多邊形的復(fù)雜度及數(shù)量都沒有限制,可以實現(xiàn)對多個形狀復(fù)雜的多邊形進(jìn)行矢量化的邏輯運算處理,并且不用判斷各多邊形所有的向量是否符合邏輯運算結(jié)果,進(jìn)行只需要對重合點的關(guān)聯(lián)向量進(jìn)行判斷,將其中符合邏輯運算結(jié)果的向量輸出,得到多邊形邏輯運算的結(jié)果,運算效率較高。
圖1為本發(fā)明實施例提供的對多邊形進(jìn)行邏輯運算處理的方法的流程圖;圖2為本發(fā)明實施例提供的組成多邊形P和多邊形Q向量示意圖;圖3為本發(fā)明實施例提供的多邊形P和多邊形Q分解后的向量示意圖;圖4為本發(fā)明實施例提供的輸出多邊形P和多邊形Q的交集的結(jié)果的示意圖;圖5為本發(fā)明實施例提供的對多邊形進(jìn)行邏輯運算處理的裝置的結(jié)構(gòu)示意圖。
具體實施例方式下面結(jié)合附圖,用具體實施例對本發(fā)明提供的一種對多邊形進(jìn)行邏輯運算處理的方法及裝置進(jìn)行詳細(xì)的說明。本發(fā)明實施例提供的一種對多邊形進(jìn)行邏輯運算處理的方法,如圖1所示,包括如下幾個步驟S101、確定組成各多邊形的各個第一向量,以及各個第一向量的交點;S102、對存在交點但交點不為端點的第一向量,在交點處進(jìn)行分解為多個第二向量;S103、遍歷各第二向量和未分解的第一向量的端點,將重合的端點確定為重合
點;S104、根據(jù)重合點的每個關(guān)聯(lián)向量的邊界狀態(tài),確定符合邏輯運算結(jié)果的向量并輸出;關(guān)聯(lián)向量為端點為重合點的第一向量和/或第二向量。下面對上述各步驟進(jìn)行詳細(xì)地說明。SlOl中,確定組成待運算的各多邊形的第一向量,具體來說,就是對每個多邊形按照順時針或逆時針的順序依次確定出連接各端點和\或控制點的第一向量。構(gòu)成多邊形的基本單元是端點或者控制點,某一端點直接指向相鄰的另一端點的向量為直線向量,某一端點指向?qū)?yīng)的控制點再指向相鄰的另一端點的向量為曲線向量。多邊形的每個端點或控制點按照順時針或逆時針的順序排序,每個端點或控制點都包含自身指向后一個端點的前向向量,以及前一個端點或控制點指向自身的后向向量。確定多邊形的每個端點或控制點的前向向量和后相向量,將相同的向量合并,得到的首尾相連的各個向量即為該多邊形的各個向量。步驟SlOl中確定各第一向量的交點,具體過程如下確定各第一向量的端點在X和Y坐標(biāo)軸上的坐標(biāo)值;根據(jù)各個第一向量的端點的坐標(biāo)值之間的位置關(guān)系,確定存在相交關(guān)系的第一向量之間的交點。在X、Y坐標(biāo)軸中,確定每個向量的左端點和右端點,其中左端點為X坐標(biāo)值較小的端點,右端點為X坐標(biāo)值較大的端點,如果向量的兩個端點的X坐標(biāo)值相等,則確定Y坐標(biāo)較大的端點為左端點,Y坐標(biāo)較小的為右端點。如果在X軸和Y軸方向上,兩個向量例如向量A和向量B的左右端點出現(xiàn)相互交錯的現(xiàn)象,例如X軸方向上,向量A的左端點在向量B的左、右端點之間,而在Y軸方向上, 向量B的左端點在向量A的左右端點之間,則可以判斷向量A和向量B之間相交。求解所有相交的直線向量、曲線向量之間的交點的坐標(biāo)。S102中對存在交點但交點不是端點的第一向量在交點處進(jìn)行分解,第一向量為直線向量的,分解后生成的多個第二向量也是直線向量,第一向量為曲線向量的,分解后生成的多個第二向量為曲線向量。經(jīng)過S102的操作后,分解后生成的第二向量和未分解的第一向量,除了端點處相連之外,向量之間不存在交點。在上述步驟S103中,確定出重合點之后,還包括判斷重合點的關(guān)聯(lián)向量是否存在重合的向量。對于每個重合點來說,其關(guān)聯(lián)向量如果存在重合的關(guān)系,那么,將重合的關(guān)聯(lián)向量記錄為同一個向量。上述步驟S104中,如果邏輯運算為求交集的運算,則遍歷每個重合點的各關(guān)聯(lián)向量,如果某個關(guān)聯(lián)向量為某個多邊形的邊界,同時該關(guān)聯(lián)向量又位于另一個多邊形的填充區(qū)域內(nèi),該關(guān)聯(lián)向量為符合邏輯運算結(jié)果的向量。如果邏輯運算為求并集的運算,則遍歷每個重合點的各關(guān)聯(lián)向量,如果某個關(guān)聯(lián)向量為某個多邊形的邊界,同時該關(guān)聯(lián)向量又位于另一個多邊形的填充區(qū)域之外,該關(guān)聯(lián)向量為符合邏輯運算結(jié)果的向量。上述步驟S104中,輸出符合邏輯運算結(jié)果的向量,具體過程如下步驟a、設(shè)置某個重合點為運算結(jié)果多邊形的起點,輸出該起點符合邏輯運算結(jié)果的關(guān)聯(lián)向量作為當(dāng)前向量輸出;如果該起點符合邏輯運算結(jié)果的關(guān)聯(lián)向量有多個,可以選擇其中任一個關(guān)聯(lián)向量作為當(dāng)前向量輸出,根據(jù)輸出的順序,確定輸出的關(guān)聯(lián)向量的前端點和后端點。判斷當(dāng)前向量的后端點是否屬于重合點以及是否屬于起點,并根據(jù)判斷的結(jié)果執(zhí)行下述步驟b、步驟c或步驟d。步驟b、如果當(dāng)前向量的后端點不屬于任何重合點,則繼續(xù)取后端點關(guān)聯(lián)的除了當(dāng)前向量之外的其他向量作為當(dāng)前向量,再轉(zhuǎn)向執(zhí)行步驟a ;步驟C、如果當(dāng)前向量的后端點屬于重合點,但不屬于起點,則輸出當(dāng)前向量后端點(重合點)符合邏輯運算結(jié)果的關(guān)聯(lián)向量中除了當(dāng)前向量之外的其他向量,并將輸出的其他向量再作為當(dāng)前向量,再轉(zhuǎn)向執(zhí)行步驟a;步驟d、如果后續(xù)端點屬于某個重合點,并且屬于起點,那么已輸出一個屬于運算結(jié)果的多邊形;進(jìn)一步執(zhí)行下述步驟e ;步驟e、判斷所有重合點的所有關(guān)聯(lián)向量都已被輸出,則運算結(jié)束,否則轉(zhuǎn)向執(zhí)行步驟a。下面以一個實例來說明本發(fā)明實施例提供的對多邊形進(jìn)行邏輯運算處理的方法,該實例需要求如圖2所示的多邊形P(端點為%、仏和Q2)和多邊形Q(端點為&、 PpPyPpPpPjn P6)之間的交集。具體求解過程如下步驟1、分別確定組成多邊形P和多邊形Q的向量;如圖2所示,確定組成多邊形P的向量為@、,組成多邊形Q的向量為◎、^P2. P^P3, @和@。步驟2、求解組成多邊形P和多邊形Q的各向量的交點。步驟3、對求解完交點后的各個向量在交點處進(jìn)行分解,如圖3所示,分解后的各個向量列舉如下多邊形P 分解后各個向量為 4、13、125、124、I20, 118、116、113、I7 和 14。多邊形Q分解后各個向量為IQ、12、16、 IlO、Il2、Il5、工23、工26、工27、工8、工5、工9、工11、工14、
工17、工19、工21、工22和工280步驟4、確定重合點,以及各重合點的關(guān)聯(lián)向量。從圖3所示,重合點為S0 S8,每個重合點的關(guān)聯(lián)向量如下S010、、I2 和 I3 ;
S112、4、I5、工6、I 禾Π Ιδ ;
S216、9、IlO 禾口 111 ;
S313、8、工22、工25、工27和工28
S417、1、工12、Il3、114 和 Il5
S5Il5、21、“2 和工23 ‘
S6!23、24、!25、126 ‘
S7114、16、工17禾口工18 ‘
S8118、19、工20和工21 °步驟4、根據(jù)重合點的每個關(guān)聯(lián)向量的邊界狀態(tài),確定符合邏輯運算結(jié)果的向量;對每個重合點的各個關(guān)聯(lián)向量進(jìn)行判斷,當(dāng)某個關(guān)聯(lián)向量為多邊形P的邊界,同時又在多邊形Q的填充區(qū)域內(nèi)時,確定該關(guān)聯(lián)向量為符合邏輯運算結(jié)果的向量;或者當(dāng)某個關(guān)聯(lián)向量為多邊形Q的邊界,同時又在多邊形P的填充區(qū)域內(nèi)時,確定該關(guān)聯(lián)向量為符合邏輯運算結(jié)果的向量。最終確定的符合邏輯運算結(jié)果的向量列舉如下S1:12 和 I7;S2 空;
7
S3:13 和 Im;S4:17 和 I14;S5=I21 禾口&:“3和125;S7=I14 禾口 I18;S8 I18 禾口 I21。步驟5、將每個重合點符合邏輯運算結(jié)果的向量輸出。如圖4所示,取重合點&作為結(jié)果多邊形的起始點;依次輸出12、17、114、118、121、 123、125、I3,直至所有重合點的關(guān)聯(lián)向量都已輸出,結(jié)束流程?;谕话l(fā)明構(gòu)思,本發(fā)明實施例中還提供了一種對多邊形進(jìn)行邏輯運算處理的裝置,由于該裝置解決問題的原理與前述一種對多邊形進(jìn)行邏輯運算處理的方法相似,因此該裝置的實施可以參見方法的實施,重復(fù)之處不再贅述。本發(fā)明實施例提供的對多邊形進(jìn)行邏輯運算處理的裝置,如圖5所示,包括第一確定單元501、分解單元502、第二確定單元503和邏輯計算結(jié)果輸出單元504 ;第一確定單元501,用于確定組成各多邊形的各個第一向量,以及各個第一向量的奪占.分解單元502,用于對存在交點但交點不為端點的第一向量,在交點處進(jìn)行分解為多個第二向量;第二確定單元503,用于遍歷各第二向量和未分解的第一向量的端點,將重合的端點確定為重合點;邏輯計算結(jié)果輸出單元504,用于根據(jù)重合點的每個關(guān)聯(lián)向量的邊界狀態(tài),確定符合邏輯運算結(jié)果的向量并輸出;所述關(guān)聯(lián)向量為端點為重合點的第一向量和/或第二向量。進(jìn)一步地,本發(fā)明實施例提供的對多邊形進(jìn)行邏輯運算處理的裝置中的第一確定單元501,還用于對于每個多邊形分別按照順時針或逆時針順序依次確定連接各端點和 \或控制點的第一向量。進(jìn)一步地,本發(fā)明實施例提供的對多邊形進(jìn)行邏輯運算處理的裝置中的第一確定單元501,用于確定各第一向量的端點在X和Y坐標(biāo)軸上的坐標(biāo)值;根據(jù)各個第一向量的端點的坐標(biāo)值之間的位置關(guān)系,確定存在相交關(guān)系的第一向量之間的交點。進(jìn)一步地,本發(fā)明實施例提供的對多邊形進(jìn)行邏輯運算處理的裝置中的邏輯計算結(jié)果輸出單元501,用于當(dāng)邏輯運算為求交集運算時,遍歷重合點的各關(guān)聯(lián)向量;對于每一個關(guān)聯(lián)向量,當(dāng)其屬于多邊形的邊界,并且位于其他多邊形的填充區(qū)域以內(nèi)時,確定其為符合邏輯運算結(jié)果的向量。本發(fā)明實施例提供的對多邊形進(jìn)行邏輯運算處理的方法及裝置,首先確定組成各多邊形的各個第一向量,以及所述各個第一向量的交點,對存在交點但交點不為端點的第一向量,在交點處分解為多個第二向量,遍歷各個第二向量和未分解的第一向量的端點,將重合的端點確定為重合點,根據(jù)重合點每個關(guān)聯(lián)向量的邊界狀態(tài),確定符合邏輯運算結(jié)果的向量并輸出,本發(fā)明實施例提供的對多邊形進(jìn)行邏輯運算處理的方法及裝置,能夠?qū)M(jìn)行邏輯運算的多個多邊形出現(xiàn)線段相交或重合的各種情況進(jìn)行處理,對于參與邏輯計算的多邊形的復(fù)雜度及數(shù)量都沒有限制,可以實現(xiàn)對多個形狀復(fù)雜的多邊形進(jìn)行矢量化的邏輯運算處理,并且不用判斷各多邊形所有的向量是否符合邏輯運算結(jié)果,進(jìn)行只需要對重合點的關(guān)聯(lián)向量進(jìn)行判斷,將其中符合邏輯運算結(jié)果的向量輸出,得到多邊形邏輯運算的結(jié)果,運算效率較高。 顯然,本領(lǐng)域的技術(shù)人員可以對本發(fā)明進(jìn)行各種改動和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動和變型在內(nèi)。
權(quán)利要求
1.一種對多邊形進(jìn)行邏輯運算處理的方法,其特征在于,包括確定組成各多邊形的各個第一向量,以及所述各個第一向量的交點; 對存在交點但交點不為端點的第一向量,在交點處分解為多個第二向量; 遍歷各第二向量和未分解的第一向量的端點,將重合的端點確定為重合點; 根據(jù)重合點的每個關(guān)聯(lián)向量的邊界狀態(tài),確定符合邏輯運算結(jié)果的向量并輸出;所述關(guān)聯(lián)向量為端點為重合點的第一向量和/或第二向量。
2.如權(quán)利要求1所述的方法,其特征在于,所述確定組成各多邊形的各個第一向量,包括對于每個多邊形分別按照順時針或逆時針順序依次確定連接各端點和\或控制點的第一向量。
3.如權(quán)利要求1所述的方法,其特征在于,確定各個第一向量的交點,包括 確定各第一向量的端點在X和Y坐標(biāo)軸上的坐標(biāo)值;根據(jù)各個第一向量的端點的坐標(biāo)值之間的位置關(guān)系,確定存在相交關(guān)系的第一向量之間的交點。
4.如權(quán)利要求1所述的方法,其特征在于,在將分解后的第二向量和未分解的第一向量重合的端點確定為重合點的步驟之后,根據(jù)重合點的每個關(guān)聯(lián)向量的邊界狀態(tài),確定符合邏輯運算結(jié)果的向量的步驟之前,還包括確定重合點的所有的關(guān)聯(lián)向量; 判斷所有關(guān)聯(lián)向量中是否有重合的向量; 若有,將重合的向量記錄為同一個向量。
5.如權(quán)利要求4所述的方法,其特征在于,當(dāng)邏輯運算為求交集運算時,根據(jù)重合點的每個關(guān)聯(lián)向量的邊界狀態(tài),確定符合邏輯運算結(jié)果的向量,包括遍歷重合點的各關(guān)聯(lián)向量;對于每一個關(guān)聯(lián)向量,當(dāng)其屬于多邊形的邊界,并且位于其他多邊形的填充區(qū)域以內(nèi)時,確定其為符合邏輯運算結(jié)果的向量。
6.如權(quán)利要求4所述的方法,其特征在于,當(dāng)邏輯運算為求并集運算時,根據(jù)重合點的每個關(guān)聯(lián)向量的邊界狀態(tài),確定符合邏輯運算結(jié)果的向量,包括遍歷重合點的各關(guān)聯(lián)向量;對于每一個關(guān)聯(lián)向量,當(dāng)其屬于多邊形的邊界,并且位于其他多邊形的填充區(qū)域之外時,確定其為符合邏輯運算結(jié)果的向量。
7.一種對多邊形進(jìn)行邏輯運算處理的裝置,其特征在于,包括第一確定單元,用于確定組成各多邊形的各個第一向量,以及各個第一向量的交點; 分解單元,用于對存在交點但交點不為端點的第一向量,在交點處進(jìn)行分解為多個第二向量;第二確定單元,用于遍歷各第二向量和未分解的第一向量的端點,將重合的端點確定為重合點;邏輯計算結(jié)果輸出單元,用于根據(jù)重合點的每個關(guān)聯(lián)向量的邊界狀態(tài),確定符合邏輯運算結(jié)果的向量并輸出;所述關(guān)聯(lián)向量為端點為重合點的第一向量和/或第二向量。
8.如權(quán)利要求7所述的裝置,其特征在于,所述第一確定單元,進(jìn)一步用于對于每個多邊形分別按照順時針或逆時針順序依次確定連接各端點和\或控制點的第一向量。
9.如權(quán)利要求7所述的裝置,其特征在于,所述第一確定單元,進(jìn)一步用于確定各第一向量的端點在X和Y坐標(biāo)軸上的坐標(biāo)值;根據(jù)各個第一向量的端點的坐標(biāo)值之間的位置關(guān)系,確定存在相交關(guān)系的第一向量之間的交點。
10.如權(quán)利要求7所述的裝置,其特征在于,所述邏輯計算結(jié)果輸出單元,進(jìn)一步用于當(dāng)邏輯運算為求交集運算時,遍歷重合點的各關(guān)聯(lián)向量;對于每一個關(guān)聯(lián)向量,當(dāng)其屬于多邊形的邊界,并且位于其他多邊形的填充區(qū)域以內(nèi)時,確定其為符合邏輯運算結(jié)果的向量。
11.如權(quán)利要求7所述的裝置,其特征在于,邏輯計算結(jié)果輸出單元,進(jìn)一步用于當(dāng)邏輯運算為求和集運算時,遍歷重合點的各關(guān)聯(lián)向量;對于每一個關(guān)聯(lián)向量,當(dāng)其屬于多邊形的邊界,并且位于其他多邊形的填充區(qū)域之外時,確定其為符合邏輯運算結(jié)果的向量。
全文摘要
本發(fā)明公開了一種對多邊形進(jìn)行邏輯運算處理的方法及裝置,其中方法包括確定組成各多邊形的各個第一向量,以及各個第一向量的交點;對存在交點但交點不為端點的第一向量,在交點處分解為多個第二向量;遍歷各第二向量和未分解的第一向量的端點,將重合的端點確定為重合點;根據(jù)重合點的每個關(guān)聯(lián)向量的邊界狀態(tài),確定符合邏輯運算結(jié)果的向量并輸出;關(guān)聯(lián)向量為端點為重合點的第一向量和/或第二向量。本發(fā)明能夠?qū)M(jìn)行邏輯運算的多個多邊形出現(xiàn)線段相交或重合的各種情況進(jìn)行處理,對于參與邏輯計算的多邊形的復(fù)雜度及數(shù)量都沒有限制,可以實現(xiàn)對多個形狀復(fù)雜的多邊形進(jìn)行矢量化的邏輯運算處理。
文檔編號G06T11/00GK102194240SQ201010118590
公開日2011年9月21日 申請日期2010年3月4日 優(yōu)先權(quán)日2010年3月4日
發(fā)明者唐宇, 林好, 黃耿琳 申請人:北京北大方正電子有限公司, 北大方正集團(tuán)有限公司