為什麼說畫圖時,參數方程比函數普通方程要容易?
01-05
舉個例子,一個普通的圓方程可以寫成x^2+y^2=1,如果直接根據這個方程來畫圖要怎麼畫呢?我們可以對x在-1~1之間進行採樣,接著把採樣得到的值代入這個方程去求每個採樣點對應的y值,然後我們就會發現好像一個x會解出兩個y來,所以要根據解出來的兩個y生成兩個採樣點。而且解的方法在用程序實現時,要麼採用迭代的方法求數值解,要麼直接實現二次方程的求根公式,而且要注意分情況求兩個解,這個過程實現起來很麻煩。等求完所有的y之後,還要想辦法對這些採樣點進行排序,再把它們依次連接畫一個圓來。
那如果用參數方程呢?圓方程可以寫成
y=sin(a)
x=cos(a)我只需要對a在0~2π之內進行採樣,然後依次代到參數方程中就可以得到自然而然地排好序了一個採樣點數組,接下來只要依次把採樣點連接起來就畫出圓來了。而且,用程序實現不需要涉及任何解方程的方法,不僅實現起來很快,而且運行起來也更快。以上例子說明了參數方程的兩個優點:
1、自然地得到排好序的採樣點數組。
2、計算採樣點坐標的方法實現起來更簡單,運行得也更快。下面再來看一個例子。
比方說一個被旋轉過的橢圓,它的普通方程和參數方程如下如果使用畫線方式繪圖,隱函數通常要轉為顯函數,才能從一個變數求出另一變數的值。但有時候不能轉為顯函數,例如圓形方程中,一個會對應兩個值。另外,還要求出函數的定義域。
而參數方程可以直接求值,也比較方便連線。
但如果使用對每個像素採樣的方式去繪圖,使用穩函數就更簡單。例如要畫一個實心圖形,可以當時填充顏色。如果函數是一個有號距離函數(signed distance field),還可以簡單地畫出抗鋸齒的圖形。可參考 http://www.valvesoftware.com/publications/2007/SIGGRAPH2007_AlphaTestedMagnification.pdf。推薦閱讀:
※3D 圖形光柵化的透視校正問題?
※有哪些辦法繪製分形?
※工作6年的程序員,還在原地踏步怎麼辦?
※透視裁剪到底發生在哪個階段?
※海島奇兵中海邊的浪花是如何實現的,使用shader還是序列幀動畫?