曲線(Curves)


三維中攝像機的運動、動畫軟件要完成的物體的運動、矢量字體的控制點 ......

這就是下面要說的貝塞爾曲線(Bézier Curves)

用一系列控制點去定義某段曲線,上圖就是用 p0、p1、p2、p3 這四個點定義的貝塞爾曲線。而且這里還有個系數 3,后面就會明白。

通過這四個點我可以定義這條曲線它的起始點和終止點一定在 p0 和 p3 上,並且這條線的起始切線和結束切線一定都是 p0p1 方向和 p2p3 方向。控制點並不一定要經過它。

 

de Casteljau Algorithm
對於三個點 b0、b1、b2

假設我有一個從 0 到 1 的時間軸,點 b0 就是時間 0 的位置,點 b2 就是時間 1 的位置。

如果我想畫出這條曲線,就是要補齊從 0 到 1 的所有點的位置。那我們看時間 t 曲線的點在哪里。

兩邊都按如圖所示找到邊上的點的位置

連線后再找一個點,那個點就處於曲線之上。

同樣的辦法將所有點補齊就得到了這條貝塞爾曲線:

為什么這種方法是顯式表示呢?因為顯式表示可以用參數來定義,這里的 t 就是參數的表示。

四個點定義的貝塞爾曲線,每一條邊上找點,很顯然這是一個遞歸的算法。

那么在代數上如何表示呢?即時間 t 它的點在哪。

示例:三個控制點得到的方程。是點 b0、點 b1、點 b2 的一個組合,很符合最早的分析。

(1 - t + t)2 的展開,而再加一個點,就是系數是 1 3 3 1 的形式。所以這其實就是 (s + t)n 的展開式

伯恩斯坦多項式,描述二項分布的一個多項式。表示任意一項是多少。

簡化一下,任意階數的貝塞爾曲線在任意時刻 t 上的點的位置,就是由伯恩斯坦多項式作為系數對給定控制點的加權。

貝塞爾曲線也不一定限制在平面內,在空間中我也同樣可以得到貝塞爾曲線:

 

伯恩斯坦多項式

貝塞爾曲線規定了很多不錯的性質,如曲線必須過起點和終點,並且起始和終止切線的方向一定是 3 倍的 b1 - b0 和 b3 - b2(以四個控制點為例,其它的並不一定是 3),仿射變換不變性,曲線一定在控制點的凸包內。

凸包:能夠包圍一系列給定的幾何形體的最小的凸多邊形。就像一塊木板釘上很多釘子,你用一個橡皮筋能夠框住的最大形狀叫做凸包。

比如一系列控制點在一條直線上,要畫出它的貝塞爾曲線,那這條曲線一定是畫在這條直線上,因為凸包的限制。你會知道貝塞爾曲線絕對不會超過給定的控制點形成的凸包的范圍內。

麻煩的在於控制點一多起來就不太好控制。

於是人們就想,為什么我要用這么多控制點來定義一個貝塞爾曲線呢?我能不能用很少的控制點來定義一段貝塞爾曲線。把這些貝塞爾曲線連起來。於是人們就發明了逐段地定義貝塞爾曲線,或者說每四個控制點來定義每段貝塞爾曲線。

這種定義方法就得到了非常廣泛的應用。也正是 Photoshop 里的鋼筆工具。

那么如何保證每段貝塞爾曲線的連接處是光滑的呢?

根據之前公式的定義,曲線起點終點的切線的導數要相等,連接處的控制點共線且等長。如果不等長也不能算光滑,因為切線不僅要方向一樣,大小也要一樣。

拿兩段貝塞爾曲線說明連續性:

只保證有連接,這種連續叫 C0 連續

像剛剛那樣,切線也能夠連續,就叫 C1 連續,可以理解成一階導數的連續

更高階的連續也有,我們叫曲率連續。一階連續看上去已經挺好的了,有時在制造上我們仍然覺得不夠,會采用 C2 連續。

貝塞爾曲線當然不只是圖形學上應用的曲線,還有各種各樣別的曲線。

( B 樣條極其復雜,可能是圖形學里最復雜的一塊,NURBS 是 B 樣條更延申的一步)

 

貝塞爾曲面

4 * 4 個控制點得到的貝塞爾曲面:

其實還是先從水平方向做一下貝塞爾曲線,再從垂直方向上做一下貝塞爾曲線,最后得到的貝塞爾曲面。

當然也要考慮曲面之間如何做到嚴絲合縫平滑的問題。

原先用一個時間 t 表示,現在在二維的方向上要用 (u, v) 來進行控制。

找到曲面在 (u, v) 參數下的位置

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM