• 沒有找到結果。

第三章 研究方法與步驟

3.2 研究步驟

3.2.2 多個雲頭生成概念

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

27

圖 3.23:單一雲頭生成架構流程圖。

3.2.2 多個雲頭生成概念

在這小節的生成概念裡,主要與 3.2.1 中提到的概念相似。在這個部分多個雲頭的 生成概念裡,我們一樣是讓使用者畫出如圖 3.20 中的輪廓線,以這個線條與單一雲頭 的集合做為輸入資訊。這時我們將雲頭視為一個圓,也就是要在這個限制的範圍內,讓 雲頭的擺放能使得「雲團」產生(表現出)“飽滿”的效果,而在做雲團佈置時,不同的雲 頭其原始建構的圓之大小應該是要差不多的,但在這裡作為輸入的雲頭集合,是由在 3.2.1 節提到的方法產生的,所以我們會產生不同大小的圓來對應不同圓所建構出的雲頭,

利用不同大小的圓在限制範圍之內做分佈;在這裡我們依然是使用 CVD 的分佈概念作 為點的分佈方式,我們提出了一個近似的方法對原本的范諾圖線條做改變,藉此來達成 不同大小的圓在限制範圍內彼此互相影響的分佈狀況。在圓的分佈完之後,我們再將對 應的雲頭擺放上去,然後再做各別的位置與方向調整。而雲尾的擺放方法與在 3.2.1 節 中提到的方式差不多,只做了些微的改變。詳細的多個雲頭生成實作方法與細節,我們 將在 4.2 節時做更完整的介紹,在此我們先介紹多個雲頭生成的概念與流程,流程圖如

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

28

下(圖 3.24:多個雲頭生成架構流程圖。)。

圖 3.24:多個雲頭生成架構流程圖。

所以,我們完整的雲紋圖樣生成架構流程如下(圖 3.25:雲紋圖樣生成架構流程圖。)。

圖 3.25:雲紋圖樣生成架構流程圖。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

29

第四章

東方風格雲紋圖樣生成

在本章節中,我們將接續前一章節裡提到的雲紋圖樣生成的方法,做進一步更詳細的介 紹。在 4.1 節中將介紹單雲頭的雲紋圖樣生成;我們是如何一步一步地利用什麼樣的方 法、根據什麼原因去實作的。在 4.2 節中將介紹多雲頭的雲紋圖樣生成;我們是如何利 用單雲頭雲紋圖樣、根據什麼原因去實作的。在 4.3 節的特殊造型雲頭生成中,將介紹 如何對我們所提出的雲紋生成方法再做限制,而運用在 3.1.1 小節提到的「特殊結構」

雲頭樣式,再做出不一樣雲紋圖樣變化生成。

4.1 單雲頭生成

使用者一開始先畫出雲頭輪廓範圍線條與雲尾走向線條(雲尾部分可不畫),我們先 在雲頭輪廓範圍線條內做圓心的分佈,所以利用「圓形堆疊」這個步驟做圓形的堆疊處 理,讓圓形在限制範圍裡能堆疊出“飽滿”效果的外貌,接著利用「結構生成」這個步驟 處理堆疊結束後的圓;找出圓心位置位於外圍的圓集合,並且計算出與左右兩邊圓之交 點位置資訊,接著分為:用於外圍雲頭曲線用的圓集合、內卷部分用的圓集合與其他在 外圍的圓集合,然後利用「輪廓生成」這個步驟計算出要被繪出的輪廓線條來產生雲頭

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

30

圖樣,而最後再根據雲尾走向線條做「雲尾生成」這個步驟來產生雲尾圖樣(如圖 4.1 所示)。細節部分於下面再一一作細部說明:

圖 4.1:雲紋圖樣生成概念流程圖。

(a)使用者繪畫曲線、(b)雲頭輪廓線、(c)雲尾走向線、(d)圓形堆疊分佈、(e)內卷部分選 取、(f)選取部分位移、(g)雲頭曲線、(h)雲尾範圍、(i)雲尾曲線、(j)雲紋圖樣結果。

在雲頭圖樣生成的部分,為了讓圓形在分佈後能有相對好的飽滿效果,我們利用 cubic b-spline 的畫線方法,將使用者畫的雲頭輪廓線條做了簡易的平滑化處理,然後依 照前面提出的雲紋生成架構,讓雲頭輪廓線條頭尾相連,使其變成完全封閉的曲線,並 在這個封閉的曲線範圍內做圓形的堆疊排列。

4.1.1 圓形堆疊

根據對雲紋圖樣的觀察結果,雲紋圖樣的厚度與堆疊使用的圓形的大小有著間接的 關係,所以我們會計算一開始所給定的雲頭範圍輪廓的厚度作為參照,而雲頭輪廓厚度 的計算方式是先算出雲頭輪廓的質心,然後找出通過質心的所有截線,接著找出最短截 線長度作為此雲頭輪廓線之厚度。用來堆疊使用的圓形個數,我們是根據雲頭輪廓線所 圍出來的面積來當作判斷的依據;對於雲紋的形成我們假想,它是由一堆圓受力聚集而 形成的,而我們使用壓縮的概念來實現。我們先算出雲頭輪廓範圍的面積,並將它放大 作為堆疊圓形面積總和的上限,以此計算出堆疊使用的圓形個數,然後在原本使用者畫 出的雲頭輪廓線範圍內做隨機撒點的動作,撒點的個數為前面求得的圓形個數,並以每 個點作為圓之圓心,此時圓心是凌亂分佈於雲頭輪廓範圍內的,接著我們以這些圓心製

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

31

作范諾圖,並將不在雲頭輪廓範圍內的部分除去,然後我們計算每一個圓心所在區域的 質心位置取代原本圓心的位置,之後,利用以上步驟(○1 製作范諾圖→○2 去除不要的范 諾圖線條部分→○3 計算質心位置取代原本圓心位置)作遞迴的處理(如圖 4.2),來達到圓 形的平均分佈;我們都知道范諾圖的製作是找出到兩點距離相同的部分,而當我們將區 域面積的質心位置取代原本圓心位置,之後再做一次范諾圖,此時范諾圖會有所改變,

使不同區域的面積變得更為平均,我們可以將這個現象想像成,區域面積小的圓受力較 大所以會往外擠,區域面積大的圓受力較小所以會往內縮,而經過遞迴收斂之後,每一 個圓會平均受力於雲紋輪廓範圍內,藉由這個概念來達成圓形在雲紋輪廓範圍內的堆疊 排列。

圖 4.2:圓形堆疊分佈流程圖。

我們利用壓縮的概念來呈現飽滿的特性,所以我們做了表 2 的比較表,表中 Area Ratio 為雲頭輪廓範圍單位長度放大的面積比值,Radius Ratio 為堆疊圓半徑與輪廓範圍 一半厚度值的比值;在表中,我們可以發現,當 Area Ratio 值在(1.4)2~(1.8)2之間時,圓 形的交點會分佈在離輪廓範圍線條較接近的位置;當 Area Ratio 值為(1.4)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}中的圓做位置上的區分,所以利用{B1i}中第一個 圓的左交點位置與最後一個圓的右交點位置,計算這兩點的中點位置與兩點所形成的方

相關文件