為什麼說畫圖時,參數方程比函數普通方程要容易?


舉個例子,一個普通的圓方程可以寫成x^2+y^2=1,如果直接根據這個方程來畫圖要怎麼畫呢?我們可以對x在-1~1之間進行採樣,接著把採樣得到的值代入這個方程去求每個採樣點對應的y值,然後我們就會發現好像一個x會解出兩個y來,所以要根據解出來的兩個y生成兩個採樣點。而且解的方法在用程序實現時,要麼採用迭代的方法求數值解,要麼直接實現二次方程的求根公式,而且要注意分情況求兩個解,這個過程實現起來很麻煩。等求完所有的y之後,還要想辦法對這些採樣點進行排序,再把它們依次連接畫一個圓來。

那如果用參數方程呢?圓方程可以寫成

y=sin(a)

x=cos(a)

我只需要對a在0~2π之內進行採樣,然後依次代到參數方程中就可以得到自然而然地排好序了一個採樣點數組,接下來只要依次把採樣點連接起來就畫出圓來了。而且,用程序實現不需要涉及任何解方程的方法,不僅實現起來很快,而且運行起來也更快。

以上例子說明了參數方程的兩個優點:

1、自然地得到排好序的採樣點數組。

2、計算採樣點坐標的方法實現起來更簡單,運行得也更快。

下面再來看一個例子。

比方說一個被旋轉過的橢圓,它的普通方程和參數方程如下

根據第一個普通的橢圓方程,一般人都不能很快地求出長短軸的頂點坐標。你能很快說出頂點的x坐標是多少然後代進去求y嗎?但是用下面的參數方程,只要讓t=0,π/2,π,3π/2,2π,即可求出長短軸的頂點來,如下圖所示,利用參數方程畫出來的橢圓採樣點精確地採到了這些特殊的頂點,結果是只用少量的幾個採樣點即可有很好的效果。

這些頂點對於繪製出來的橢圓的效果是很重要的,如果只是簡單地對x進行均勻採樣,再解普通方程求出採樣點的y坐標,且採樣點數量不多,運氣不好沒採到這些頂點,那繪製的結果就會很難看,比如像下面這樣

雖然用了更多的採樣點,但效果卻比使用參數方程進行採樣的結果還差。這說明參數方程還有一個優點是:

3、更容易地對特殊點進行定位,在採樣點不多時畫出更好的結果。


如果使用畫線方式繪圖,隱函數f(x, y) = 0通常要轉為顯函數y=g(x),才能從一個變數求出另一變數的值。但有時候不能轉為顯函數,例如圓形方程中,一個x_0會對應兩個值y_0, y_1。另外,還要求出函數的定義域。

而參數方程可以直接求值,也比較方便連線。

但如果使用對每個像素採樣的方式去繪圖,使用穩函數就更簡單。例如要畫一個實心圖形,可以當f(x, y) le 0時填充顏色。如果函數是一個有號距離函數(signed distance field),還可以簡單地畫出抗鋸齒的圖形。可參考 http://www.valvesoftware.com/publications/2007/SIGGRAPH2007_AlphaTestedMagnification.pdf。


推薦閱讀:

3D 圖形光柵化的透視校正問題?
有哪些辦法繪製分形?
工作6年的程序員,還在原地踏步怎麼辦?
透視裁剪到底發生在哪個階段?
海島奇兵中海邊的浪花是如何實現的,使用shader還是序列幀動畫?

TAG:數學 | 計算機科學 | 計算機圖形學 |