• 沒有找到結果。

第四章 東方風格雲紋圖樣生成

4.1 單雲頭生成

4.1.2 結構生成

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

32

輪廓範圍線內側,當 Area Ratio 值為(1.8)2時,會分佈在輪廓範圍線外側,所以將 Area Ratio 的單位長度比設在 1.4~1.8,能讓雲頭生成的範圍更接近使用者畫的線條範圍。

表 2:壓縮比例比較表。

4.1.2 結構生成

在前一章我們提出的單一雲頭生成架構圖中,結構生成的這部分,我們又另外分出 了三個部分:「基本結構」、「多層結構」與「多內卷結構」。其中,「基本結構」指的是 雲頭圖樣的基本造型,有著外圍圓滑波狀曲線與內卷部分;而「多層結構」與「多內卷 結構」是在「基本結構」生成後,再做進一步的結構生成。在目前這個部分我們先不對

「多層結構」與「多內卷結構」做介紹,我們將在該結構生成所對應的小節當中分別做 介紹。

合(取 Original Ball 之用);最後做出的范諾圖線條集合定義為{OLi}集合(取 Original Line 之用);對原始使用者畫的雲頭輪廓線的點集合定義為{OSbi}集合(取 Original Stroke Body use 之用)。另外定義新的空集合空間{B1i}、{B2i}與{B3i};這三個集合的聯集代表的是所

Algorithm 1: Structure_1 generate

Input : {OBi},{OLi},{OSbi}。

Output : {B1i},{B2i},{B3i}。

Start

Step1: SortBalls({OSbi},{OBi},{OLi},{B1i});

Step2: FindBallsIntersection({B1i});

Step3: ChooesBalls({OSbi},{B1i},{B2i});

Step4: RemoveBallofBalls({B2i},{B1i},{B3i});

End

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

34

「SortBalls( )」:這個函式主要的目的是計算出分佈在最外圍的圓所成的集合;我們利用 {OSbi}、{OBi}與{OLi}等資訊,計算出分佈在最外圍的圓,然後以圓的位置做順時針方 向的排序,並放入{B1i}中;整個實作的方法是利用相似於解決 Convex Hull 問題的作法,

我們利用圓心位置所成的向量,以向量夾角作為判斷依據,並以順時針方向依序找出分 佈在外圍之圓;首先,找出圓心位置 y 座標值最小之圓,若有多個則取 x 座標最小之圓;

並將圖 4.4 中 P2值設為第一個圓之圓心座標值,P2P1向量值設為(1,0),Pi為其餘的圓 心座標值,找出當P2P1向量與P2Pi 向量夾角最大時的圓取為第二個找到的圓。接著將 P1值設為第一個圓之圓心座標值,P2值設為第二個圓之圓心座標值,則 Pi為其餘未被 選取的圓心座標值,相同的找出當P2P1向量與P2Pi 向量夾角最大時的圓取為第三個找到 的圓。之後,以此方式類推尋找分佈在外圍之圓。

圖 4.4:角度範圍示意圖。

「FindBallsIntersection( )」:這個函式主要的目的是計算出{B1i}中,B1[i]與 B1[i-1]、

B1[i+1]的交點,也就是算出與本身相鄰的圓的交點,{B1i}中第一個圓與最後一個圓視 為相鄰;在這我們只計算靠近外側的交點並放入 B1[i]的資料結構中,靠近內側的點我 們不計算,而由內向外看去,我們將每個圓的交點分為左右兩交點做區分(如圖 4.5)。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

35

圖 4.5:相鄰兩圓交點示意圖(藍點為所求交點)。

「ChooesBalls( )」:這個函式主要的目的是計算出,在{B1i}中分別距離兩控制點最近的 兩圓,並將其放入{B2i}中;其中,控制點分別是雲頭輪廓線的起始點與結束點,若距離 兩控制點最近的圓為相同的圓,則只將一個放入{B2i}中。

「RemoveBallofBalls( )」:這個函式主要的目的是將{B1i}中,不屬於外圍圓滑波狀曲線 使用部分的圓移出{B1i},並將扣除{B2i}中的圓後放入{B3i}中。

多層結構:

根據使用者給定的雲頭輪廓範圍與初始參數設定的不同,有可能會產生範圍輪廓的 厚度與堆疊圓的直徑相差好幾倍的情形,而只繪外圍輪廓與內卷部分,這樣子的結果可 能會使得雲紋圖樣有些空洞(如圖 4.6)。

圖 4.6:雲紋圖樣空洞感示意圖。

所以我們試著加入內部的層次感;我們利用前面{OBi}、{B2i}與{B3i}等資訊,先定義空 集合{TBi},將{B2i}與{B3i}中的圓放入{TBi}中,再從{OBi}中找出與{TBi}中的圓相鄰的圓,

並加上{TBi}中的圓放入新定義的空集合{TOBi},另外再定義三個空集合{TB1i}、{TCi}與

在這我們先不對「FindCloudCurve( )」函式另作說明,將在「輪廓生成」的小節中再作 說明。

Algorithm 2: Structure_2 generate

Input : {OBi},{OLi},{OSbi},{B2i},{B3i}。

Step5: FindBallsIntersection({TB1i});

Step6: RemoveBallofBalls({B2i},{TB1i});

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

37

多內卷結構:

在收集到的雲紋圖樣資料中,我們也發現到了的有些雲頭圖樣擁有多內卷的結構 (圖 4.8),不過在我們收集到的雲紋圖樣中不常出現;所以在我們的生成結構中,我們 有將這個特性實作出來。

(a) (b)

圖 4.8:多內卷結構示意圖。

在結構生成的部分,我們要對{B1i}中的圓做位置上的區分,所以利用{B1i}中第一個 圓的左交點位置與最後一個圓的右交點位置,計算這兩點的中點位置與兩點所形成的方 向向量,運用這兩個資訊將{B1i}中的圓分為左右兩邊的圓集合,如圖 4.9:將圓分堆概 念示意圖。,即以藍色線將{B1i}中的圓分為兩堆圓集合,但如何決定哪個圓作為內卷部 分的結構,我們沒有分析出這項特性,所以我們是以兩邊同間隔的方式作為多內卷的結 構判斷,間隔以圓為代表,間隔數讓使用自己設定。其實多內卷的結構有團聚的概念存 在,所以同邊的內卷會有相同的方向性。

圖 4.9:將圓分堆概念示意圖。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

38

相關文件