專利名稱:多邊形平滑方法
技術(shù)領(lǐng)域:
本發(fā)明涉及使多邊形平滑的方法,更準(zhǔn)確地說(shuō),本發(fā)明涉及通過(guò)將多邊形劃分為多個(gè)圖塊并使每個(gè)這種圖塊平滑化來(lái)使多邊形平滑的軟件。
計(jì)算機(jī)圖形大部分由多邊形構(gòu)成。多邊形是由端端連接的直線所組成的圖形。兩線的連接點(diǎn)稱為頂點(diǎn)。封閉多邊形是其中所有直線端點(diǎn)都連接并形成“封閉”回路的多邊形。封閉多邊形的頂點(diǎn)可當(dāng)作是封閉的。封閉多邊形的一個(gè)例子是五邊形。開(kāi)放多邊形是其中直線未連接形成封閉回路而有兩“開(kāi)放”端的多邊形。開(kāi)放多邊形的一個(gè)例子是“V”。開(kāi)放多邊形的起始和終止點(diǎn)可稱作頂點(diǎn)或開(kāi)放頂點(diǎn)。
由于計(jì)算機(jī)圖形圖象大部分是由多種多邊形構(gòu)成,所以圖象常常有不希望有的粗糙或齒狀的表面。例如,計(jì)算機(jī)用戶可能希望產(chǎn)生帶有弧線體形狀的汽車的圖象。由于計(jì)算機(jī)圖形是用多邊形打印的,所以,轎車車體由連接一起的直線組成。線連接產(chǎn)生粗糙或齒狀的表面而不是所要求的平滑曲線。因此,已研究一些方法用來(lái)使這樣的多邊形平滑化。
將多邊形平滑化指的是修改多邊形的粗糙或齒狀的表面,使之呈現(xiàn)待產(chǎn)生的平滑曲線。過(guò)去,一直是通過(guò)使用一般稱作Bezier三次曲線算法的算法來(lái)執(zhí)行這種平滑過(guò)程。Bezier算法在計(jì)算機(jī)圖形圖象方面的一種應(yīng)用在“PostscriptLanguageReferenceManual”(AdobeSystems,Inc.,Copyright1985)中進(jìn)行了討論。
本發(fā)明的方法通過(guò)使用Bezier算法連同確定圖形圖象所需“平滑”或“精細(xì)”程度的特征使多邊形平滑,然后打印該結(jié)果。通過(guò)確定所需精細(xì)度,本發(fā)明的方法使圖形圖象質(zhì)量最優(yōu)而使平滑圖象所需時(shí)間及計(jì)算機(jī)存儲(chǔ)器最少。
本發(fā)明的多邊形平滑方法包括將一多邊形描述為帶有比原多邊形有較多頂點(diǎn)的另一多邊形的軟件。通過(guò)確定得到可接受的輸出質(zhì)量所需細(xì)度以及通過(guò)用所需細(xì)度打印新多邊形的Bezier三次曲線來(lái)構(gòu)造所述的新多邊形。
圖1展示計(jì)算機(jī)產(chǎn)生的未平滑的圖形圖象。
圖2展示按照本發(fā)明的方法,計(jì)算機(jī)所產(chǎn)生的已平滑的圖形圖象。
圖3為本發(fā)明多邊形平滑方法的框圖。
圖4為本發(fā)明方法的詳細(xì)框圖。
圖1示出了標(biāo)號(hào)10的計(jì)算機(jī)產(chǎn)生的汽車的圖形圖象。該圖象也可稱為封閉多邊形。該圖象的外表面12粗糙并且顯出產(chǎn)生該多邊形的相連接的直線。
圖2示出了使用本發(fā)明的多邊形平滑方法由計(jì)算機(jī)產(chǎn)生的相同的圖形圖象14。外表面16也由連在一起的線構(gòu)成,但是,這些線已平滑化,以產(chǎn)生得到所要求質(zhì)量所需的細(xì)度。
圖3是展示本發(fā)明多邊形平滑方法的方框圖。首先,在步驟18,收集定義未平滑多邊形的數(shù)據(jù),并將該多邊形劃分為多個(gè)圖塊,如框20所示。多邊形圖塊是由預(yù)定個(gè)數(shù)的頂點(diǎn)所定義的該多邊形的一部分。例如,在最佳實(shí)施例中,每三個(gè)順序的頂點(diǎn)一組構(gòu)成一多邊形圖塊。從該定義來(lái)看,很顯然多邊形圖塊可以重疊。
然后,本方法通過(guò)將圖塊定義為頂點(diǎn)數(shù)增加的新的多邊形來(lái)平滑每一個(gè)圖塊,如步驟22所示。然后,連接新多邊形以形成“平滑的”多邊形。形成該平滑多邊形的線較短,所以外表面的粗糙并不顯著。
在步驟24,確定該新多邊形的達(dá)到可接收輸出質(zhì)量所需的細(xì)度。由于精細(xì)程度規(guī)定被打印的圖形具有多大“顆粒度”,所以,常常將所述細(xì)度稱為“粒度”或“顆粒細(xì)度”。簡(jiǎn)單地說(shuō),該顆粒細(xì)度是將構(gòu)成平滑多邊形的直線劃分成多個(gè)較短線、以便取得可接受的打印質(zhì)量的分度。該細(xì)度規(guī)定應(yīng)將平滑多邊形劃分為多少條較短的線。實(shí)驗(yàn)表明,將平滑多邊形的每一條線除以4/300英寸,取最接近的整數(shù),然后,打印具有所確定的顆粒細(xì)度的平滑多邊形的各線,就能得到可接受的輸出質(zhì)量。在這個(gè)例子中,4/300英寸被認(rèn)為是4個(gè)象素,其中,該圖象以300象素/英寸的密度進(jìn)行打印??梢钥吹?,線越短,顆粒細(xì)度越小。這樣,本發(fā)明的方法對(duì)每一線確定不同的細(xì)度,因此只有在需要時(shí)才使用較大的細(xì)度。
然后用所確定的顆粒細(xì)度來(lái)打印平滑多邊形,如框25所示。
圖4是本發(fā)明的多邊形平滑方法的詳細(xì)框圖。首先收集定義未平滑多邊形的數(shù)據(jù),如框26所示。
使用本發(fā)明方法的每個(gè)系統(tǒng)都會(huì)有諸如有效存儲(chǔ)器的系統(tǒng)限制。例如,某計(jì)算機(jī)系統(tǒng)可能有其中可描述多邊形的32K字節(jié)的有效存儲(chǔ)器。這種存儲(chǔ)器局限由于限制了未平滑多邊形可劃分的線段個(gè)數(shù)據(jù)而限制了多邊形的平滑程度。因此,步驟28識(shí)別該系統(tǒng)所允許的最大顆粒細(xì)度,即,換言之,每一線段最大的分段數(shù)目。又,該極限值隨存儲(chǔ)器而變。
步驟30對(duì)未平滑多邊形每三個(gè)頂點(diǎn)一組計(jì)算Bezier控制點(diǎn)而將未平滑多邊形劃分多個(gè)圖塊。具體地說(shuō),本發(fā)明的方法識(shí)別未平滑多邊形的前三個(gè)這樣的頂點(diǎn)P0、P1和P2。Bezier曲線的控制點(diǎn)可標(biāo)識(shí)為X0、X1、X2和X3。封閉頂點(diǎn)組的控制點(diǎn)可按以下等式計(jì)算X0=(P0+P1)/2X1=1/6P0+5/6P1X2=5/6P1+1/6P2X3=(P1+P2)/2對(duì)既有開(kāi)放頂點(diǎn)又有封閉頂點(diǎn)、而且第一頂點(diǎn)P0是開(kāi)放的頂點(diǎn)集,那么按以下等式計(jì)算控制點(diǎn)X0=P0X1=1/3P0+2/3P1X2=5/6P1+1/6P2X3=(P1+P2)/2對(duì)既有開(kāi)放又有封閉頂點(diǎn)、而且第一頂點(diǎn)P0為封閉的頂點(diǎn)集,控制點(diǎn)計(jì)算如下X0=(P0+P1)/2X1=1/6P0+5/6P1X2=2/3P1+1/3P2X3=P2對(duì)以開(kāi)放頂點(diǎn)開(kāi)始和結(jié)束的三頂點(diǎn)集合的控制點(diǎn),按以下等式計(jì)算X0=P0X1=1/3P0+2/3P1X2=2/3P1+1/3P2X3=P2
這些控制點(diǎn)表示X軸上的坐標(biāo)值。類似地,可用相同等式一一用Y替代每個(gè)X,來(lái)得到Y(jié)軸的坐標(biāo)值。
對(duì)未平滑多邊形每個(gè)三頂點(diǎn)集合計(jì)算其控制點(diǎn)、并存儲(chǔ)于存儲(chǔ)器中,用來(lái)計(jì)算Bezier曲線。對(duì)每個(gè)三頂點(diǎn)P0、P1和P3的集合,計(jì)算四個(gè)控制點(diǎn)。下一個(gè)三頂點(diǎn)P1、P2、P3集合的第一控制點(diǎn)為前一集合的最后一個(gè)控制點(diǎn)。這樣,控制點(diǎn)不重疊。
控制點(diǎn)的計(jì)算也將未平滑多邊形劃分為多個(gè)線段。順序的控制點(diǎn)之間的直線構(gòu)成這些線段。然后,步驟32確定每一條這種線段的長(zhǎng)度。在最佳實(shí)施例中,按其密度為每英寸300個(gè)象素的象素的數(shù)目來(lái)量度所述長(zhǎng)度。
步驟34確定打印具有所要求的平滑度、由控制點(diǎn)所限定的Bezler曲線所必須的最小顆粒細(xì)度。通過(guò)將每個(gè)線段長(zhǎng)度除以預(yù)定分解數(shù)來(lái)計(jì)算出最小顆粒細(xì)度。在最佳實(shí)施例中,線段長(zhǎng)度除以4個(gè)象素,其中,有每英寸300象素。將所得到的商舍入而取最接近的整數(shù),該整數(shù)構(gòu)成所需最小顆粒細(xì)度。又,簡(jiǎn)單地說(shuō),顆粒細(xì)度就是將線段劃分為許多更短的線以致在打印時(shí)得到可接受的輸出質(zhì)量的分度。該線段越短,顆粒細(xì)度越小。而顆粒細(xì)度受到描述更短線段所必須的存儲(chǔ)器的限制。
接著,本發(fā)明的方法判定所需最小顆粒細(xì)度是否小于或等于允許顆粒細(xì)度,如步驟36所示。如果所需最小允許顆粒細(xì)度大于最大允許顆粒細(xì)度,那么,該系統(tǒng)不能打印具有該最小顆粒的多邊形,所以,最終顆粒細(xì)度選擇為最大允許顆粒細(xì)度,如步驟38所示。如果所必需的最小顆粒細(xì)度小于或等于最大允許顆粒細(xì)度,那么,本系統(tǒng)能夠用最小顆粒細(xì)度作為最終粒度,如框40所示。
然后,步驟42打印帶有所述最終粒度的Bezier曲線段。該Bezier曲線段是每個(gè)三頂點(diǎn)集合的、由Bezier算法定義的曲線的一部分。在以下三個(gè)方程中使用計(jì)算出的控制點(diǎn)來(lái)計(jì)算X軸的常數(shù)Ax,Bx和Cx以及相對(duì)應(yīng)的Y軸常數(shù)Ay,By和Cy(未示出)X1=X0+Cx/3X2=X1+(Cx+Bx)/3X3=X0+Cx+Bx+Ax然后在以下Bezier方程中使用這些常數(shù)來(lái)繪出Bezier曲線,其中,t為定義曲線在其間延伸的距離的無(wú)量綱數(shù),例如0≤t≤1Xt=Axt3+Bxt2+Cxt+XYt=Ayt3+Byt2+Cyt+Y簡(jiǎn)言之,本發(fā)明的方法計(jì)算了未平滑多邊形的每個(gè)三頂點(diǎn)集合的控制點(diǎn)。將這些控制點(diǎn)存儲(chǔ)在存儲(chǔ)器中并用來(lái)計(jì)算整個(gè)未平滑多邊形的Bezier曲線。本方法還確定為打印平滑多邊形所必需顆粒細(xì)度,使得該平滑多邊形具有可接受的輸出質(zhì)量。當(dāng)Bezier曲線和所必需最小顆粒細(xì)度都已計(jì)算出來(lái)時(shí),本方法打印整個(gè)平滑多邊形。
本發(fā)明的方法可用于打印計(jì)算機(jī)圖形圖象的系統(tǒng)中。本方法使這種圖象平滑,以獲得高質(zhì)量輸出,同時(shí),提高處理速度以節(jié)省時(shí)間。
盡管文中已描述了本發(fā)明的最佳方式和最佳實(shí)施例,但仍可作變型和修改而不偏離本發(fā)明的精神。
權(quán)利要求
1.一種使多邊形平滑的方法,其特征在于包括將多邊形劃分為多個(gè)圖塊的步驟(20),通過(guò)將多邊形的第一圖塊定義為新的多邊形而使多邊形的第一圖塊平滑的步驟(22),對(duì)該第一圖塊確定為得到可接受的輸出質(zhì)量所需的顆粒細(xì)度的步驟(24),對(duì)每個(gè)多邊形圖塊重復(fù)所述平滑和確定步驟,以及打印該平滑多邊形的步驟(25)。
2.一種由打印系統(tǒng)用來(lái)平滑并打印具有若干頂點(diǎn)的多邊形的方法,其特征在于包括接收定義待平滑的多邊形的數(shù)據(jù)的步驟(26),計(jì)算該系統(tǒng)所允許的最大顆粒細(xì)度的步驟(28),對(duì)多邊形的每個(gè)三頂點(diǎn)集合計(jì)算Bezier曲線的控制點(diǎn)的步驟(30),確定所計(jì)算的控制點(diǎn)之間的線段長(zhǎng)度的步驟(32),使用所確定的線段長(zhǎng)度來(lái)計(jì)算為打印由所算出的控制點(diǎn)確定的Bezier曲線所需的最小顆粒細(xì)度的步驟(34),選擇所允許最大顆粒細(xì)度和所需要最小顆粒細(xì)度中的較小者作為最終顆粒細(xì)度(36)的步驟,以及打印具有最終顆粒細(xì)度的與所計(jì)算出的控制點(diǎn)對(duì)應(yīng)的Bezier曲線的步驟(42)。
3.權(quán)利要求2的方法,其特征在于所述確定所計(jì)算的控制點(diǎn)之間線段長(zhǎng)度的步驟包括對(duì)所計(jì)算控制點(diǎn)之間的象素個(gè)數(shù)進(jìn)行計(jì)數(shù)。
4.權(quán)利要求3的方法,其特征在于所述使用所確定線段長(zhǎng)度來(lái)計(jì)算所需最小顆粒細(xì)度的步驟包括該線段除以4個(gè)象素并對(duì)商舍入而取最接近的整數(shù)。
全文摘要
本發(fā)明的多邊形平滑方法包括以帶有比原多邊形更多頂點(diǎn)的另一多邊形來(lái)描述原多邊形的軟件。通過(guò)確定為得到可接受輸出質(zhì)量所需的細(xì)度的步驟(34)以及通過(guò)用所需細(xì)度打印新的多邊形的Bezier三次曲線的步驟(42)來(lái)構(gòu)造新的多邊形。
文檔編號(hào)G06T11/20GK1044355SQ8910934
公開(kāi)日1990年8月1日 申請(qǐng)日期1989年12月11日 優(yōu)先權(quán)日1989年1月19日
發(fā)明者史蒂文·O·米勒 申請(qǐng)人:惠普公司