專利名稱:檢測當(dāng)前像素是否位于多邊形中的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及圖形處理領(lǐng)域,更具體地涉及一種檢測當(dāng)前像素是否位于多邊形中的
方法和系統(tǒng)。
背景技術(shù):
在計算機(jī)圖形學(xué)中,多邊形(包括凸多邊形、凹多邊形、以及包含多邊形孔的多邊 形)柵格化可以不通過三角化來進(jìn)行。這是因為三角化常常需要太多的計算負(fù)擔(dān),沒有簡 單的算法來將一個多邊形(尤其是凸多邊形和包含孔以及自相交的復(fù)雜多邊形)分為三角 形。 使用掃描線來對多邊形進(jìn)行柵格化(而不使用三角化)對于柵格顯示是一個直接 途徑。在每條掃描線上,需要判斷當(dāng)前像素是否包含在多邊形中,如果是,則需要對此像素 進(jìn)行描畫。 對于檢測當(dāng)前像素是否在多邊形中,存在很多方法。最著名的是Jordan曲線理 論對于從當(dāng)前像素出發(fā)的任何射線,如果此射線與多邊形相交的數(shù)目為奇數(shù),那么此像素 位于多邊形中。另一個比較常用的方法是檢測當(dāng)前像素相對于所有多邊形邊的邊方程值, 如果相對于凸邊的邊方程值都是正,并且相對于凹邊的邊方程值也為正,那么此像素就位 于多邊形中。另外一個方法是檢測當(dāng)前像素與多邊形頂點組成的符號角之和,如果其為零, 那么像素在多邊形外,否則在多邊形中。 然而,上述方法在實際圖形產(chǎn)品中不太容易使用硬件實現(xiàn),效率也不高。具體地, 在Jordan曲線理論中,計算當(dāng)前像素的射線與多邊形相交的計算量巨大,且不容易使用硬 件實現(xiàn)射線的方法;在檢測所有多邊形邊方程值的方法中,當(dāng)多邊形邊的數(shù)目很大時,此方 法的性能大大降低;在計算符號角的方法中,需要大量計算角度的數(shù)學(xué)運算,硬件上不容易 實現(xiàn),同時,當(dāng)計算帶有多邊形孔的復(fù)雜多邊形時,算法變得很復(fù)雜。
發(fā)明內(nèi)容
鑒于以上所述的一個或多個問題,本發(fā)明提供了一種檢測當(dāng)前像素是否位于多邊 形中的方法和系統(tǒng)。 根據(jù)本發(fā)明實施例的檢測當(dāng)前像素是否位于多邊形中的方法,包括以下步驟獲 取當(dāng)前像素所在掃描線與多邊形的相交邊;將相交邊兩兩配對為多對配對相交邊;計算當(dāng) 前像素位于多少對配對相交邊之間;以及如果當(dāng)前像素位于奇數(shù)對配對相交邊之間,則判 定當(dāng)前像素位于多邊形中,否則判定當(dāng)前像素位于多邊形外。 根據(jù)本發(fā)明實施例的檢測當(dāng)前像素是否位于多邊形中的系統(tǒng),包括相交邊獲取 單元,用于獲取當(dāng)前像素所在掃描線與多邊形的相交邊;相交邊配對單元,用于將相交邊兩 兩配對為多對配對相交邊;中間性計算單元,用于計算當(dāng)前像素位于多少對配對相交邊之 間;以及像素位置判定單元,用于在當(dāng)前像素位于奇數(shù)對配對相交邊之間的情況下,判定當(dāng) 前像素位于多邊形中,在當(dāng)前像素位于偶數(shù)對配對相交邊之間的情況下,判定當(dāng)前像素位于多邊形外。 本發(fā)明適用于凸多邊形、凹多邊形以及帶有多邊形孔的復(fù)雜多邊形;并且本發(fā)明 的方法簡單,過程模塊化強,容易硬件實現(xiàn)。另外,在本發(fā)明中,在每行掃描之前使用相交邊 獲取單元計算相交邊,與每一行的像素步進(jìn)無關(guān),掃描性能不會隨多邊形邊數(shù)目的增加而 降低;在中間性計算單元中,像素在掃描線上的步進(jìn)可以使用加法來計算邊方程值,簡單而 高效;并且奇數(shù)為內(nèi)、偶數(shù)為外的奇數(shù)中間性規(guī)則簡化了系統(tǒng)的實現(xiàn)。
圖l是應(yīng)用了根據(jù)本發(fā)明實施例的檢測當(dāng)前像素是否位于多邊形中的方法/系統(tǒng) 的多邊形柵格化系統(tǒng)的工作原理的示意性框圖; 圖2是根據(jù)本發(fā)明實施例的檢測當(dāng)前像素是否位于多邊形中的方法的簡要流程 圖; 圖3是根據(jù)本發(fā)明實施例的檢測當(dāng)前像素是否位于多邊形中的方法的詳細(xì)流程 圖; 圖4是根據(jù)本發(fā)明實施例的獲取當(dāng)前像素所在掃描線與多邊形的相交邊的過程 的詳細(xì)流程圖; 圖5是應(yīng)用左上規(guī)則來判定是否描畫當(dāng)前像素的原理示意圖; 圖6是應(yīng)用了根據(jù)本發(fā)明實施例的檢測當(dāng)前像素是否位于多邊形中的方法/系統(tǒng)
的多邊形柵格化系統(tǒng)的硬件模塊示意圖; 圖7是應(yīng)用根據(jù)本發(fā)明實施例的檢測當(dāng)前像素是否位于多邊形中的方法/系統(tǒng)來
判斷當(dāng)前像素相對于包含多邊形孔的凹多邊形的位置的示意圖; 圖8是根據(jù)本發(fā)明實施例的將相交邊兩兩配對的過程的示意圖; 圖9是掃描線上的當(dāng)前像素相對于多邊形的相交邊的三種位置的示意圖; 圖10是根據(jù)本發(fā)明實施例的奇數(shù)中間性規(guī)則的一個示例的示意圖; 圖11至圖16是用于說明根據(jù)本發(fā)明實施例的奇數(shù)中間性規(guī)則的各種多邊形與當(dāng)
前像素之間的相對位置關(guān)系的示意圖。
具體實施例方式
本發(fā)明提供了一種檢測當(dāng)前像素是否位于多邊形中的方法和系統(tǒng)。其中,在根據(jù) 本發(fā)明實施例的檢測當(dāng)前像素是否位于多邊形中的方法和系統(tǒng)中,應(yīng)用了奇數(shù)中間性規(guī) 則。該奇數(shù)中間性規(guī)則的內(nèi)容在于將與當(dāng)前像素所在的掃描線相交的多邊形邊兩兩配對 為多對配對相交邊,如果當(dāng)前像素位于奇數(shù)對配對相交邊之間,則判定當(dāng)前像素位于多邊 形中,否則判定當(dāng)前像素位于多邊形外。 圖1是應(yīng)用了根據(jù)本發(fā)明實施例的檢測當(dāng)前像素是否位于多邊形中的方法/系統(tǒng) 的多邊形柵格化系統(tǒng)的工作原理的示意性框圖。在圖l所示的多邊形柵格化系統(tǒng)中,按照 不同的順序?qū)Χ噙呅雾旤c以及多邊形孔的頂點進(jìn)行排序。例如,如果多邊形頂點是順時針 計數(shù)的,那么多邊形孔的頂點就是按逆時針計數(shù)的,反過來也是如此。在找到第一條掃描線 之后,按照掃描線的順序逐行計算掃描線與多邊形和/或多邊形孔的相交邊。其中,可以通 過對掃描線的Y軸坐標(biāo)值與多邊形和/或多邊形孔的頂點的Y軸坐標(biāo)值進(jìn)行比較來找出相
6交邊,而不需要計算相交點,所以可以避免除法運算。然后,將每兩條相交邊配對為一對配 對相交邊,以計算配對相交邊中間性的數(shù)目。其中,使用多邊形的邊方程值來進(jìn)行當(dāng)前像素 的中間性的計算。然后,將計算出的中間性的信息輸入到檢測模塊,用來判斷當(dāng)前掃描線的 像素是否在多邊形內(nèi)。如果是,則將這些像素送入描畫模塊和輸入的參數(shù)一起進(jìn)行渲染;否 則該多邊形柵格化系統(tǒng)移到下一條掃描線進(jìn)行以上所述的過程。 圖2是根據(jù)本發(fā)明實施例的檢測當(dāng)前像素是否位于多邊形中的方法的簡要流程 圖。如圖2所示,該檢測當(dāng)前像素是否位于多邊形中的方法包括以下步驟S202,獲取當(dāng)前 像素所在掃描線與多邊形的相交邊;S204,將相交邊兩兩配對為多對配對相交邊;S206,計 算當(dāng)前像素位于多少對配對相交邊之間;以及S208,如果當(dāng)前像素位于奇數(shù)對配對相交邊 之間,則判定當(dāng)前像素位于多邊形中,否則判定當(dāng)前像素位于多邊形外。
具體地,可以通過將當(dāng)前像素所在掃描線的Y軸坐標(biāo)值與多邊形的頂點的Y軸坐 標(biāo)值進(jìn)行比較來獲取當(dāng)前像素所在掃描線與多邊形的相交邊。如果當(dāng)前像素所在掃描線 的Y軸坐標(biāo)值介于多邊形的任意兩個相鄰頂點的Y軸坐標(biāo)值之間,則判定該任意兩個相鄰 頂點所在的多邊形邊為當(dāng)前像素所在掃描線與多邊形的相交邊??梢酝ㄟ^計算當(dāng)前像素相 對于配對相交邊中的每條相交邊的邊方程值來判定當(dāng)前像素是否位于配對相交邊之間。如 果當(dāng)前像素相對于配對相交邊中的每條相交邊的邊方程值都為正或者都為負(fù),則判定當(dāng)前 像素位于配對相交邊之間。如果當(dāng)前像素相對于配對相交邊中的一條相交邊的邊方程值為 零,則判定當(dāng)前像素位于該配對相交邊中的該一條相交邊上。 如果當(dāng)前像素所在掃描線的Y軸坐標(biāo)值等于多邊形的任意兩個相鄰頂點的Y軸坐 標(biāo)值或者等于多邊形的任意一個或多個頂點的Y軸坐標(biāo)值,則判定當(dāng)前像素所在掃描線通 過多邊形的該任意兩個相鄰頂點所在的多邊形邊或通過多邊形的該任意一個或多個頂點。 如果當(dāng)前像素相對于該任意兩個相鄰頂點所在的多邊形邊或者該任意一個或多個頂點所 在的多邊形邊的邊方程值為零,則判定當(dāng)前像素在該任意兩個相鄰頂點所在的多邊形邊上 或者該任意一個或多個頂點所在的多邊形邊上。如果當(dāng)前像素位于多邊形的左上側(cè)邊上, 則判定當(dāng)前像素位于多邊形中,如果當(dāng)前像素位于多邊形的右下側(cè)邊上,則判定當(dāng)前像素 位于多邊形外。 當(dāng)多邊形為包含多邊形孔的多邊形時,通過將當(dāng)前像素所在掃描線的Y軸坐標(biāo)值 與多邊形孔的頂點的Y軸坐標(biāo)值進(jìn)行比較來獲取當(dāng)前像素所在掃描線與多邊形孔的相交 邊。如果當(dāng)前像素所在掃描線的Y軸坐標(biāo)值等于多邊形孔的任意兩個相鄰頂點的Y軸坐標(biāo) 值或者等于多邊形孔的任意一個或多個頂點的Y軸坐標(biāo)值,則判定當(dāng)前像素所在掃描線通 過多邊形孔的該任意兩個相鄰頂點所在的多邊形孔邊或通過多邊形孔的該任意一個或多 個頂點。如果當(dāng)前像素相對于該任意兩個相鄰頂點所在的多邊形孔邊或者該任意一個或多 個頂點所在的多邊形孔邊的邊方程值為零,則判定當(dāng)前像素在該任意兩個相鄰頂點所在的 多邊形孔邊上或者該任意一個或多個頂點所在的多邊形孔邊上。如果當(dāng)前像素位于多邊形 孔的右下側(cè)邊上,則判定當(dāng)前像素位于多邊形中,如果當(dāng)前像素位于所述多邊形孔的左下 側(cè)邊上,則判定當(dāng)前像素位于所述多邊形外。 圖3是根據(jù)本發(fā)明實施例的檢測當(dāng)前像素是否位于多邊形中的方法的詳細(xì)流程 圖。如圖3所示,在步驟S302中,將輸入的頂點分為兩個類型多邊形的頂點和多邊形孔的 頂點,他們分別存儲于數(shù)組V[n]和HV[m]。其中,n是多邊形的頂點的數(shù)目,m是多邊形孔的頂點的數(shù)目。在步驟S304中,確定起始掃描線。通常,為了掃描多邊形,需要創(chuàng)建一個邊 界框,那么起始掃描線就是該邊界框中的最上面的掃描線yi = y0。 接著,對于每一條掃描線yi,在計算其與多邊形的相交邊(步驟S306)以及將其的 相交邊兩兩配對(步驟S308)之后,沿著當(dāng)前掃描線按像素對多邊形進(jìn)行處理。對于每兩 條配對的相交邊,首先判斷當(dāng)前像素(xi, yi)相對于該兩條配對的相交邊中的一條的邊方 程值e是否為零(步驟S310)。如果是,則使用左上規(guī)則來檢測當(dāng)前像素是否在多邊形中 (步驟S312);如果不是,則判斷當(dāng)前像素相對于兩條配對的相交邊的邊方程值是否都為正 或者都為負(fù)(步驟S314),如果是,則表明當(dāng)前像素在該兩條配對的相交邊之間(稱為中間 性),并且中間性的數(shù)目betw加一 (步驟S316)。 對于掃描線穿過的多邊形或多邊形孔的邊(存儲在ee數(shù)組中),逐個進(jìn)行判斷,如 果當(dāng)前像素的邊方程值為0(步驟S318),則根據(jù)左上規(guī)則來確定它是否位于多邊形中;如 果不為O,則忽略。如果當(dāng)前掃描線沒有到達(dá)邊界框的右邊(xmax),則沿掃描線方向步進(jìn)一 個像素;否則轉(zhuǎn)移到下一個掃描線上,直到邊界框的下邊(ymax)。 圖4是根據(jù)本發(fā)明實施例的獲取當(dāng)前像素所在掃描線與多邊形的相交邊的過程 的詳細(xì)流程圖。如圖4所示,該過程包含兩大部分一部分用于多邊形邊,一部分用于多 邊形孔的邊。首先,輸入掃描線yi、多邊形的頂點V[n]、以及多邊形孔的頂點HV[m](步驟 406)。在每一部分中,首先要檢查yi是否介于V[u].y(V[u].y表示多邊形的頂點V[u]的Y 軸坐標(biāo)值,下面的類似符號表示類似的意思)和V[u+l].y之間(步驟S408)以及是否介于 HV[u]. y(HV[u]. y表示多邊形孔的頂點HV[u]的Y軸坐標(biāo)值,下面的類似符號表示類似的意 思)和HV[u+l]. y之間(步驟S410)。如果是,則將V[u]和V[u+1]所在的邊、和HV[u]和 HV[u+l]所在的邊的計數(shù)號碼存儲于數(shù)組e[p]中(步驟S412和步驟S414);如果不是,則檢 查掃描線是否穿過多邊形或者多邊形孔的頂點或邊,這是通過分別判斷yi是否等于V[u]. y或者V[u+l] y,以及HV[u]. y或者HV[u+l] y,或者兩者的全部來實現(xiàn)的(步驟S416和步 驟S418)。如果掃描線穿過多邊形和/或多邊形孔的頂點和/或邊,則將該邊和/或該頂 點所在的邊的計數(shù)號存儲在數(shù)組ee[q]中(步驟S420和步驟S422)。最后,輸出數(shù)組e[p] 和ee[p](步驟424)。 在計算數(shù)組e[p]中的配對邊的中間性數(shù)目之后,通過掃描數(shù)組ee[q]來判斷當(dāng)前 像素相對于ee[q]中的這些邊的邊方程值是否為零。如果是,則通過左上規(guī)則來完成是否 在多邊形中的檢測。 圖5是應(yīng)用左上規(guī)則來判定是否描畫當(dāng)前像素的原理示意圖。如圖5所示,對于 任意一條邊,其邊方程為e(xi, yi) = a朽i+l^yi+c,這里系數(shù)a、 b以及c可以通過計算邊 頂點的坐標(biāo)來獲得。對于多邊形邊i,這些系數(shù)表示為a[i]、b[i]和c[i];對于多邊形孔 的邊j,這些系數(shù)表示為a[j]、b[j]和c[j]。多邊形的左上方邊(邊502、504、506和508) 為描畫,多邊形孔的右下方邊(邊510、512和514)也為描畫,其他邊為不描畫。描畫的表 示在多邊形之內(nèi),否則在多邊形之外。描畫的多邊形邊的條件為a[i] X)或者a[i] ==0 & & b[i] X),描畫的多邊形孔的邊的條件為a[j] X)或者a[j] ==0 & & b[j] <0。
圖6是應(yīng)用了根據(jù)本發(fā)明實施例的檢測當(dāng)前像素是否位于多邊形中的方法/系統(tǒng) 的多邊形柵格化系統(tǒng)的硬件模塊示意圖。如圖6所示,計算邊方程系數(shù)的模塊利用頂點緩 存中的頂點信息計算得到邊方程系數(shù),計算相交邊的模塊同時也從頂點緩存中讀取頂點信息。相交邊的系數(shù)和計數(shù)號碼存儲在內(nèi)存中,用于計算中間性數(shù)目的模塊進(jìn)行的計算。通 過檢測規(guī)則(左上規(guī)則以及奇數(shù)中間性規(guī)則)檢測的結(jié)果送入描畫模塊。
圖7是應(yīng)用根據(jù)本發(fā)明實施例的檢測當(dāng)前像素是否位于多邊形中的方法/系統(tǒng)來 判斷當(dāng)前像素相對于包含多邊形孔的凹多邊形的位置的示意圖。圖7示出了一個包含多 邊形孔的凹多邊形,該凹多邊形也包含掃描線。其中,多邊形的頂點V[i]按順時針計數(shù), 多邊形孔的頂點HV[j]按逆時針計數(shù)。如果V[i].y < yi < V[i+l].y或者HV[j] < yi < HV[j+l]. y,則掃描線yi將與多邊形邊V[i]V[i+l]相交或者與多邊形孔的邊HV[j] HV[j+l]相交(如圖7中的虛線702)。如果yi == V[i].y或者yi = = V[i+1] y,則掃 描線yi將穿過多邊形頂點V[i](如圖7中的虛線704),這對于多邊形孔是一樣的。如果 V[i].y = = yi = V[i+l].y或者HV[i].y = = yi = = HV[i+l] y,則掃描線將分別穿過邊 V[i]V[i+l]或者HV[i]HV[i+l](如圖7中的虛線706)。在本實施例中,不把這些穿過的情 況看作是相交,所以使用左上規(guī)則來對穿過情況下的掃描線上的像素進(jìn)行檢測。相交邊的 計數(shù)號碼存儲于數(shù)組e[p]中,穿過情況中的邊計數(shù)號碼存儲于數(shù)組ee[q]中。
從Jordan曲線理論可知,相交邊的數(shù)目永遠(yuǎn)為偶數(shù)。因此,可以將相交邊兩兩配 對。圖8是根據(jù)本發(fā)明實施例的將相交邊兩兩配對的過程的示意圖。其中,E用于計數(shù)原 始的邊號碼。如圖8所示,包含多邊形孔的凹多邊形的頂點按順時針計數(shù),被包含的多邊形 孔的頂點按逆時針計數(shù)。每個邊的號碼記錄為此邊的第一個頂點的號碼,相交邊畫為粗實 線。根據(jù)邊號碼和計算的順序,圖8中的配對邊為[E0, E3] 、 [E4, E6] 、 [E7, E8] 、 [E9, E12]、 [E15,E16]以及[E17,E18]。這里,多邊形孔邊的號碼緊跟多邊形邊的號碼計數(shù)。在實際運 用中,一般將配對邊的號碼按順序存儲于數(shù)組e[p]中,所以不需要顯式地進(jìn)行配對操作, 只要將e[i]和e[i+l]看作一對即可。 對于每一對配對邊,掃描線上的當(dāng)前像素具有三種位置中間(中間性)、一側(cè) ( 一側(cè)性)、或者在配對邊上,如圖9所示。如果當(dāng)前像素相對于一對配對邊的邊方程值都 為正或者都為負(fù),則當(dāng)前像素在該對配對邊的中間;如果一個為正一個為負(fù),則當(dāng)前像素在 該對配對邊的某條相交邊的一側(cè);如果至少一個為零,此則當(dāng)前像素在該對配對邊的某條 相交邊上。同時,對于同一個多邊形,根據(jù)不同的起始邊號碼,也有兩種配對組合。例如,如 圖9中所示,配對邊組合可以為[e0, el]、 [e2, e3]以及[e4, e5],也可以為[e5, e0] 、 [el, e2]以及[e3, e4]。在第一種組合中,pO在所有配對邊的一側(cè),pl在配對邊[e2, e3]的中 間,p2在配對邊[e4,e5]中的相交邊e4上。在第二種組合中,p0在配對邊[e0,el]和[e4, e5]中間,pl在配對邊[e4, e5]中間并在其他配對邊的一側(cè),p2在配對邊[e2, e3]中上。 其中,在配對邊中間的像素相對于配對邊的邊方程值既可以都為正,也可以都為負(fù)。雖然有 兩種組合方式,他們不會影響奇數(shù)中間性規(guī)則。 本發(fā)明中應(yīng)用了奇數(shù)中間性規(guī)則來檢測當(dāng)前像素與多邊形之間的相對位置關(guān)系。 奇數(shù)中間性規(guī)則表明,如果某像素的中間性數(shù)目為奇數(shù),則此像素就在多邊形中。圖io示 出了奇數(shù)中間性規(guī)則的一個示例。在圖10所示的示例中,配對相交邊為[e0,el]、[e2,e3]、 [e4, e5] 、 [e6, e7] 、 [e8, e9]和e [10, ell]。對于像素p0,中間性的數(shù)目為1,它位于多邊形 中洞樣,根據(jù)奇數(shù)中間性規(guī)則,可以得到pl的中間性數(shù)目為2,不位于多邊形中;p2的中 間性數(shù)目為3,位于多邊形中;p3的中間性數(shù)目為3,位于多邊形中;以及p4的中間性數(shù)目 為4,不位于多邊形中。
下面,對上述方法和系統(tǒng)中應(yīng)用的奇數(shù)中間性規(guī)則進(jìn)行證明。具體地,這里使用歸 納法來證明奇數(shù)中間性規(guī)則。 這里,將多邊形凹頂點的數(shù)目記為k,將多邊形孔的凹點數(shù)目記為q。
第一步對于任何不包含多邊形孔的凸多邊形(k = 0),如圖11所示,只存在兩條 相交邊(圖11中的邊1103、1104),如果當(dāng)前像素p(圖11中的像素1101、1102)的中間性 數(shù)目為l,那么該當(dāng)前像素在多邊形中。 對于任何包含一個凸多邊形孔的凸多邊形(k = 0, q = O),如圖12所示,對于凸 多邊形來說只存在兩條相交邊(圖12中的邊1201、 1206),同時對于凸多邊形孔來說也只存 在兩條相交邊(圖12中的邊1202、 1207)。對于多邊形中的像素點p0(圖12中的點1203、 1208)來說,中間性的數(shù)目永遠(yuǎn)是1 ;對于多邊形孔中的像素pl(圖12中的點1204、 1209) 來說,中間性的數(shù)目永遠(yuǎn)是2 ;對于多邊形外的像素點p2(圖12中的點1205U210)來說, 中間性的數(shù)目永遠(yuǎn)是O。 對于任何具有m個凸多邊形孔的凸多邊形來說(k = 0, q = O),如圖13所示,存 在最多2+m*2條相交邊。對于在多邊形中但是不在多邊形孔之間的像素p0(圖13中的點 1301)來說,并且對于在多邊形中而且也在多邊形孔之間的像素p2(圖13中的點1303)來 說,中間性的數(shù)目永遠(yuǎn)是1 ;對于多邊形孔中的像素pl(圖13中的點1302)來說,中間性的 數(shù)目永遠(yuǎn)是2 ;對于多邊形外的像素p3(圖13中的點1304)來說,中間性的數(shù)目永遠(yuǎn)是0。
由以上所述可見,奇數(shù)中間性規(guī)則對于k = 0禾P q = 0成立。 第二步對于k二 1的凹多邊形,如圖14所示,存在兩種情況情況l,掃描線穿過 凹部分(圖14中的1401),情況2 :掃描線不穿過凹部分(圖14中的1402)。對于情況1中 的任何像素P,中間性的數(shù)目是0、1或者2 ;如果是l,則像素在多邊形中。對于情況2中的 任何像素P,中間性的數(shù)目是O或者l,如果是l,則像素在多邊形中。 對于k二 l并且q二 1的包含一個凹多邊形孔的凹多邊形,如圖15所示,對于在 多邊形中的像素(例如,圖15中的點1501),因為它們總是在凹多邊形孔的外面,所以根據(jù) k = 1的規(guī)則,中間性的數(shù)目永遠(yuǎn)加0或者2,這里0或者2是當(dāng)q = 1時在凹多邊形孔之 外的像素的中間性數(shù)目。對于凹多邊形孔中間的像素(例如,圖15中的點1502),根據(jù)k = 1的規(guī)則,中間性數(shù)目將加l(變成2)。 由以上所述可見,奇數(shù)中間性規(guī)則對于k = 1和q = 1成立。 第三步假定奇數(shù)中間性規(guī)則當(dāng)k = i-l, i < = k,以及q = j-l, j < = k時成
第四步考慮k = i以及q = j。 首先考慮k二i。對于具有n個頂點的任何凹多邊形,它具有最多n-2個凹點,并 具有一個對應(yīng)的n頂點凸多邊形。通過將一個凸點變成凹點,一個具有j個凹點的凹多邊 形A可以從一個具有j-l個凹點的凹多邊形生成,如圖16所示。并且,從一條邊產(chǎn)生一個 凹點也具有相同的效果。 經(jīng)過上述處理后,從按順序排號的多邊形B中的相交邊,一對新的相交邊在三角 形V2V3' V4中刪除了,它插入了三角形V2V3V4。對于多邊形A中三角形V2V3' V4中的像 素,中間性的數(shù)目減1 ,根據(jù)第3步,此數(shù)目將變成偶數(shù),此像素不在多邊形中。對于其他像 素,中間性的數(shù)目不會改變,因此它們與多邊形B的判斷方式相同,這已經(jīng)在第三步中證明
10過了。 這個增加凹點的過程同樣對于q = j也實用。然而,我們只考慮在凹多邊形之外 的像素的中間性數(shù)目,根據(jù)上述已證明規(guī)則,它將永遠(yuǎn)為偶數(shù)。最后,我們考慮k二 i和q =j,對于具有凹多邊形孔的凹多邊形中的像素,中間性的數(shù)目將是原來凹多邊形相同像素 的中間性數(shù)目(奇數(shù))加上插入的凹多邊形孔之外同樣位置像素的中間性數(shù)目(偶數(shù)),因 此結(jié)果永遠(yuǎn)為奇數(shù)。
由以上所述可見,奇數(shù)中間性規(guī)則對于k = i禾P q = j成立。 綜上所述,本發(fā)明適用于凸多邊形、凹多邊形以及帶有多邊形孔的復(fù)雜多邊形;并 且本發(fā)明的方法簡單,過程模塊化強,容易硬件實現(xiàn)。另外,在本發(fā)明中,在每行掃描之前使 用相交邊獲取單元計算相交邊,與每一行的像素步進(jìn)無關(guān),掃描性能不會隨多邊形邊數(shù)目 的增加而降低;在中間性計算單元中,像素在掃描線上的步進(jìn)可以使用加法來計算邊方程 值,簡單而高效;并且奇數(shù)為內(nèi)、偶數(shù)為外的奇數(shù)中間性規(guī)則簡化了系統(tǒng)的實現(xiàn)。
本領(lǐng)域技術(shù)人員將理解,還存在可用于實現(xiàn)本發(fā)明實施例的更多可選實施方式和 改進(jìn)方式,并且上述實施方式和示例僅是一個或多個實施例的說明。因此,本發(fā)明的范圍僅 由所附權(quán)利要求書限制。
權(quán)利要求
一種檢測當(dāng)前像素是否位于多邊形中的方法,其特征在于,包括以下步驟獲取當(dāng)前像素所在掃描線與多邊形的相交邊;將所述相交邊兩兩配對為多對配對相交邊;計算所述當(dāng)前像素位于多少對所述配對相交邊之間;以及如果所述當(dāng)前像素位于奇數(shù)對所述配對相交邊之間,則判定所述當(dāng)前像素位于所述多邊形中,否則判定所述當(dāng)前像素位于所述多邊形外。
2. 根據(jù)權(quán)利要求1所述的檢測當(dāng)前像素是否位于多邊形中的方法,其特征在于,通過 將所述當(dāng)前像素所在掃描線的Y軸坐標(biāo)值與所述多邊形的頂點的Y軸坐標(biāo)值進(jìn)行比較來獲 取所述當(dāng)前像素所在掃描線與所述多邊形的相交邊。
3. 根據(jù)權(quán)利要求2所述的檢測當(dāng)前像素是否位于多邊形中的方法,其特征在于,如果 所述當(dāng)前像素所在掃描線的Y軸坐標(biāo)值介于所述多邊形的任意兩個相鄰頂點的Y軸坐標(biāo)值 之間,則判定所述任意兩個相鄰頂點所在的多邊形邊為所述當(dāng)前像素所在掃描線與所述多 邊形的相交邊。
4. 根據(jù)權(quán)利要求3所述的檢測當(dāng)前像素是否位于多邊形中的方法,其特征在于,通過 計算所述當(dāng)前像素相對于所述配對相交邊中的每條相交邊的邊方程值來判定所述當(dāng)前像 素是否位于所述配對相交邊之間。
5. 根據(jù)權(quán)利要求3所述的檢測當(dāng)前像素是否位于多邊形中的方法,其特征在于,如果 所述當(dāng)前像素相對于所述配對相交邊中的每條相交邊的邊方程值都為正或者都為負(fù),則判 定所述當(dāng)前像素位于所述配對相交邊之間。
6. 根據(jù)權(quán)利要求3所述的檢測當(dāng)前像素是否位于多邊形中的方法,其特征在于,如果 所述當(dāng)前像素相對于所述配對相交邊中的一條相交邊的邊方程值為零,則判定所述當(dāng)前像 素位于所述配對相交邊中的一條相交邊上。
7. 根據(jù)權(quán)利要求2所述的檢測當(dāng)前像素是否位于多邊形中的方法,其特征在于,如果 所述當(dāng)前像素所在掃描線的Y軸坐標(biāo)值等于所述多邊形的任意兩個相鄰頂點的Y軸坐標(biāo)值 或者等于所述多邊形的任意一個或多個頂點的Y軸坐標(biāo)值,則判定所述當(dāng)前像素所在掃描 線通過所述多邊形的任意兩個相鄰頂點所在的多邊形邊或通過所述多邊形的任意一個或 多個頂點。
8. 根據(jù)權(quán)利要求7所述的檢測當(dāng)前像素是否位于多邊形中的方法,其特征在于,如果 所述當(dāng)前像素相對于所述任意兩個相鄰頂點所在的多邊形邊或者所述任意一個或多個頂 點所在的多邊形邊的邊方程值為零,則判定所述當(dāng)前像素在所述任意兩個相鄰頂點所在的 多邊形邊上或者所述任意一個或多個頂點所在的多邊形邊上。
9. 根據(jù)權(quán)利要求6或8所述的檢測當(dāng)前像素是否位于多邊形中的方法,其特征在于,如 果所述當(dāng)前像素位于所述多邊形的左上側(cè)邊上,則判定所述當(dāng)前像素位于所述多邊形中, 如果所述當(dāng)前像素位于所述多邊形的右下側(cè)邊上,則判定所述當(dāng)前像素位于所述多邊形 外。
10. 根據(jù)權(quán)利要求1至8中任一項所述的檢測當(dāng)前像素是否位于多邊形中的方法,其 特征在于,當(dāng)所述多邊形為包含多邊形孔的多邊形時,通過將所述當(dāng)前像素所在掃描線的Y 軸坐標(biāo)值與所述多邊形孔的頂點的Y軸坐標(biāo)值進(jìn)行比較來獲取所述當(dāng)前像素所在掃描線 與所述多邊形孔的相交邊。
11. 根據(jù)權(quán)利要求io所述的檢測當(dāng)前像素是否位于多邊形中的方法,其特征在于,如果所述當(dāng)前像素所在掃描線的Y軸坐標(biāo)值等于所述多邊形孔的任意兩個相鄰頂點的Y軸坐 標(biāo)值或者等于所述多邊形孔的任意一個或多個頂點的Y軸坐標(biāo)值,則判定所述當(dāng)前像素所 在掃描線通過所述多邊形孔的任意兩個相鄰頂點所在的多邊形孔邊或通過所述多邊形孔 的任意一個或多個頂點。
12. 根據(jù)權(quán)利要求11所述的檢測當(dāng)前像素是否位于多邊形中的方法,其特征在于,如 果所述當(dāng)前像素相對于所述任意兩個相鄰頂點所在的多邊形孔邊或者所述任意一個或多 個頂點所在的多邊形孔邊的邊方程值為零,則判定所述當(dāng)前像素在所述任意兩個相鄰頂點 所在的多邊形孔邊上或者所述任意一個或多個頂點所在的多邊形孔邊上。
13. 根據(jù)權(quán)利要求12所述的檢測當(dāng)前像素是否位于多邊形中的方法,其特征在于,如 果所述當(dāng)前像素位于所述多邊形孔的右下側(cè)邊上,則判定所述當(dāng)前像素位于所述多邊形 中,如果所述當(dāng)前像素位于所述多邊形孔的左上側(cè)邊上,則判定所述當(dāng)前像素位于所述多 邊形外。
14. 一種檢測當(dāng)前像素是否位于多邊形中的系統(tǒng),其特征在于,包括 相交邊獲取單元,用于獲取當(dāng)前像素所在掃描線與多邊形的相交邊; 相交邊配對單元,用于將所述相交邊兩兩配對為多對配對相交邊; 中間性計算單元,用于計算所述當(dāng)前像素位于多少對所述配對相交邊之間;以及 像素位置判定單元,用于在所述當(dāng)前像素位于奇數(shù)對所述配對相交邊之間的情況下,判定所述當(dāng)前像素位于所述多邊形中,在所述當(dāng)前像素位于偶數(shù)對所述配對相交邊之間的 情況下,判定所述當(dāng)前像素位于所述多邊形外。
15. 根據(jù)權(quán)利要求14所述的檢測當(dāng)前像素是否位于多邊形中的系統(tǒng),其特征在于,所 述相交邊獲取單元通過將所述當(dāng)前像素所在掃描線的Y軸坐標(biāo)值與所述多邊形的頂點的Y 軸坐標(biāo)值進(jìn)行比較來獲取所述當(dāng)前像素所在掃描線與所述多邊形的相交邊。
16. 根據(jù)權(quán)利要求15所述的檢測當(dāng)前像素是否位于多邊形中的系統(tǒng),其特征在于,所 述相交邊獲取單元在所述當(dāng)前像素所在掃描線的Y軸坐標(biāo)值介于所述多邊形的任意兩個 相鄰頂點的Y軸坐標(biāo)值之間的情況下,判定所述任意兩個相鄰頂點所在的多邊形邊為所述當(dāng)前像素所在掃描線與所述多邊形的相交邊。
17. 根據(jù)權(quán)利要求16所述的檢測當(dāng)前像素是否位于多邊形中的系統(tǒng),其特征在于,所述中間性計算單元通過計算所述當(dāng)前像素相對于所述配對相交邊中的每條相交邊的邊方 程值來判定所述當(dāng)前像素是否位于所述配對相交邊之間。
18. 根據(jù)權(quán)利要求16所述的檢測當(dāng)前像素是否位于多邊形中的系統(tǒng),其特征在于,所 述中間性計算單元在所述當(dāng)前像素相對于所述配對相交邊中的每條相交邊的邊方程值都 為正或者都為負(fù)的情況下,判定所述當(dāng)前像素位于所述配對相交邊之間。
19. 根據(jù)權(quán)利要求16所述的檢測當(dāng)前像素是否位于多邊形中的系統(tǒng),其特征在于,所 述像素位置判定單元在所述當(dāng)前像素相對于所述配對相交邊中的一條相交邊的邊方程值 為零的情況下,判定所述當(dāng)前像素位于所述配對相交邊中的一條相交邊上。
20. 根據(jù)權(quán)利要求15所述的檢測當(dāng)前像素是否位于多邊形中的系統(tǒng),其特征在于,所 述相交邊獲取單元在所述當(dāng)前像素所在掃描線的Y軸坐標(biāo)值等于所述多邊形的任意兩個 相鄰頂點的Y軸坐標(biāo)值或者等于所述多邊形的任意一個或多個頂點的Y軸坐標(biāo)值的情況下,判定所述當(dāng)前像素所在掃描線通過所述多邊形的任意兩個相鄰頂點所在的多邊形邊或 通過所述多邊形的任意一個或多個頂點。
21. 根據(jù)權(quán)利要求20所述的檢測當(dāng)前像素是否位于多邊形中的系統(tǒng),其特征在于,所 述像素位置判定單元在所述當(dāng)前像素相對于所述任意兩個相鄰頂點所在的多邊形邊或者 所述任意一個或多個頂點所在的多邊形邊的邊方程值為零的情況下,判定所述當(dāng)前像素在 所述任意兩個相鄰頂點所在的多邊形邊上或者所述任意一個或多個頂點所在的多邊形邊 上。
22. 根據(jù)權(quán)利要求19或21所述的檢測當(dāng)前像素是否位于多邊形中的系統(tǒng),其特征在 于,所述像素位置判定單元在所述當(dāng)前像素位于所述多邊形的左上側(cè)邊上的情況下,判定 所述當(dāng)前像素位于所述多邊形中,在所述當(dāng)前像素位于所述多邊形的右下側(cè)邊上的情況 下,判定所述當(dāng)前像素位于所述多邊形外。
23. 根據(jù)權(quán)利要求14至21中任一項所述的檢測當(dāng)前像素是否位于多邊形中的系統(tǒng),其 特征在于,在所述多邊形為包含多邊形孔的多邊形的情況下,所述相交邊獲取單元通過將 所述當(dāng)前像素所在掃描線的Y軸坐標(biāo)值與所述多邊形孔的頂點的Y軸坐標(biāo)值進(jìn)行比較來獲 取所述當(dāng)前像素所在掃描線與所述多邊形孔的相交邊。
24. 根據(jù)權(quán)利要求23所述的檢測當(dāng)前像素是否位于多邊形中的系統(tǒng),其特征在于,所 述相交邊獲取單元在所述當(dāng)前像素所在掃描線的Y軸坐標(biāo)值等于所述多邊形孔的任意兩 個相鄰頂點的Y軸坐標(biāo)值或者等于所述多邊形孔的任意一個或多個頂點的Y軸坐標(biāo)值的情 況下,判定所述當(dāng)前像素所在掃描線通過所述多邊形孔的任意兩個相鄰頂點所在的多邊形 孔邊或通過所述多邊形孔的任意一個或多個頂點。
25. 根據(jù)權(quán)利要求24所述的檢測當(dāng)前像素是否位于多邊形中的系統(tǒng),其特征在于,所 述像素位置判定單元在所述當(dāng)前像素相對于所述任意兩個相鄰頂點所在的多邊形孔邊或 者所述任意一個或多個頂點所在的多邊形孔邊的邊方程值為零的情況下,判定所述當(dāng)前像 素在所述任意兩個相鄰頂點所在的多邊形孔邊上或者所述任意一個或多個頂點所在的多 邊形孔邊上。
26. 根據(jù)權(quán)利要求25所述的檢測當(dāng)前像素是否位于多邊形中的系統(tǒng),其特征在于,所 述像素位置判定單元在所述當(dāng)前像素位于所述多邊形孔的右下側(cè)邊上的情況下,判定所述 當(dāng)前像素位于所述多邊形中,在所述當(dāng)前像素位于所述多邊形孔的左上側(cè)邊上的情況下, 判定所述當(dāng)前像素位于所述多邊形外。
全文摘要
本發(fā)明公開了一種檢測當(dāng)前像素是否位于多邊形中的方法和系統(tǒng)。其中,該檢測當(dāng)前像素是否位于多邊形中的方法包括以下步驟獲取當(dāng)前像素所在掃描線與多邊形的相交邊;將相交邊兩兩配對為多對配對相交邊;計算當(dāng)前像素位于多少對配對相交邊之間;以及如果當(dāng)前像素位于奇數(shù)對配對相交邊之間,則判定當(dāng)前像素位于多邊形中,否則判定當(dāng)前像素位于多邊形外。本發(fā)明適用于凸多邊形、凹多邊形以及帶有多邊形孔的復(fù)雜多邊形;并且本發(fā)明的方法簡單,過程模塊化強,容易硬件實現(xiàn)。
文檔編號G06T7/00GK101751665SQ200810184068
公開日2010年6月23日 申請日期2008年12月15日 優(yōu)先權(quán)日2008年12月15日
發(fā)明者洲鐮康, 白向暉, 譚志明 申請人:富士通株式會社