幾何建模與處理之五 Bezier曲線與B樣條曲線


幾何建模與處理之五 Bezier曲線與B樣條曲線

Bezier曲線

建模的兩種形式:

  1. 重建(Reconstruction)
    • 逆向工程:形狀已有,要將其“猜”出來
    • 采樣->擬合:需要函數空間足夠豐富(表達能力夠)
    • 代數觀點:{a,b,c}作為基函數的組合權系數
  2. 設計(Design)
    • 自由設計:憑空產生,或從一個簡單的形狀編輯得到
    • 交互式編輯:幾何直觀性要好
    • 幾何觀點:基函數{t2,t,1}作為控制點的組合權系數

二次多項式曲線(拋物線):

\[f(y)=at^2+bt+c\\ \]

使用冪基表示曲線

\[f(t)= \begin {pmatrix} x(t)\\t(t) \end {pmatrix}= \begin {pmatrix} 1\\1 \end {pmatrix}t^2+ \begin {pmatrix} -2\\0 \end {pmatrix}t+ \begin {pmatrix} 1\\0 \end {pmatrix} \]

使用Bernstein基函數表達

\[f(t)= \begin {pmatrix} x(t)\\t(t) \end {pmatrix}= \begin {pmatrix} 1\\0 \end {pmatrix}(1-t)^2+ \begin {pmatrix} 0\\0 \end {pmatrix}2t(t-1)+ \begin {pmatrix} 0\\1 \end {pmatrix}t^2 \]

系數頂點與曲線關聯性強,具有很好的幾何意義,對於交互式曲線設計更直觀.

Bernstein基函數

n次Bernstein基函數:\(B=({B_0^{(n)}, B_1^{(n)},...,B_n^{(n)}})\)

\[B_i^{(n)}=\begin {pmatrix} n\\i \end {pmatrix}t^i(1-t)^{n-i}=B_{i-th basis function}^{(degree)}\\ \begin {pmatrix} n\\i \end {pmatrix}= \begin {cases} \frac {n!}{(n-i)!i!} &for 0 \le i \le n \\ 0 & otherwise \end {cases} \]

性質

  • 對稱性:\(B_i^n(t)=B_{n-1}^n(1-t)\)

  • \(B_i^{(n)}\)\(t=\frac{i}{n}\)達到最大值

用Bernstein基函數所表達的曲線具有非常好的幾何意義

\[f(t)=\sum_{i=1}^n b_i(t)p_i \]

Bezier曲線

n次Berzier曲線:n+1個控制點

\[x(t)=\sum_{i=0}^n B_i^n(t)·b_i \]

image-20210719151954280

Berzier曲線的性質來源於Bernstein基函數的性質。

Bernstein基函數與Bezier曲線的性質

  • 正權性:正性+權性

    • \(B_i^{(n)}(t) \ge 0,t\in [0,1]\)
    • \(\sum_{i=1}^n B_i^{(n)}(t) = 1,t\in [0,1]\)
  • 基性:B是次數不高於n的多項式集合(空間)的一組基

  • 遞推公式:

    • 基函數的遞推公式:\(B_i^{(n)}(t)=(1-t)B_i^{(n-1)}(t)+tB_{i-1}^{(n-1)}(t) \quad B_0^0(t)=1,B_i^{(n)}(t)=0\quad for\quad i\notin{0...n}\)
    • 高階的基函數由兩個低階的基函數“升階”得到,利於保持一些良好的性質
  • 端點插值性:Bezier曲線經過首位兩個控制頂點

  • 導數:

    • \(f'(t)=n\sum_{i=0}^{n-1}B_i^{n-1}(t)(p_{i+1}-p_i)\)
    • \(f^{[r]}(t)=\frac{n!}{(n-r)!}\sum_{i=0}^{n-r}B_i^{n-r}(t)· \Delta ^rp_i\)

    Bezier曲線的端點性質

    • 端點插值:
    • 端點的切線方向與邊相同
    • 端點的2階(k)切線與3點(k+1)相關
  • 升階:\((1-t)B_i^n(t)=(1-\frac{i}{n+1})B_i^{n+1}(t)\) => \(tB_i^n(t)=\frac{i+1}{n+1}B_i^{n+1}(t)\)

    Bezier曲線升階:$$f(t)=\sum_{i=0}{n+1}B_i{n+1}(t)[\frac {n+1-i}{n+1}P_i+\frac{i}{n+1}P_{i-1}]$$

De casteljau algorithm

根據基函數的遞推公式:\(B_i^{(n)}(t)=(1-t)B_i^{(n-1)}(t)+tB_{i-1}^{(n-1)}(t)\)

給定一個t,就能求出x(t):\(b_i^{(r)}=(1-n)b_i^{r-1}+tb_{i+1}^{(r-1)}\)

image-20210719161102047

幾何樣條曲線

兩Bezier曲線的拼接條件:

C0:

G1:三點共線

C1:三點共線且等長

C2\(d^2/dt^2\)\((p_2-2p_1+p_0),(p_n-2p_{n-1}+p_{n-2})\),陰影三角形相似

構造3次插值Bezier曲線的幾何方法

工程中,在點pi(0<i<n)處,作pi-1和pi+1連線的平行線,取1/6的位置作為控制點。一段曲線由四個點約束。

B樣條

Bezier曲線(Bernstein基函數)存在全局性,不利於設計。

B樣條曲線:分段Bezier曲線,具有局部性

樣條曲線的統一表達

基函數

均勻結點(Uniform)

\[N_i^1=\begin{cases}1,&i\le t \le i+1 \\0,&otherwise\end{cases}\\ N_i^k=\frac{t-i}{(i+k-1)-i}N_i^{k-1}(t)+\frac{(i+k)-t}{(i+k)-(i+1)}N_{i+1}^{k-1}(t)\\ =\frac{t-i}{k-1}N_i^{k-1}(t)+\frac{i+k-t}{k-1}N_{i+1}^{k-1}(t) \]

非均勻結點(\(t_0<t_1<....<t_n<...t_{n+k}\)

\[N_{i,1}=\begin{cases}1,&t_i\le t \le t_{i+1} \\0,&otherwise\end{cases}\\ N_{i,k}=\frac{t-t_i}{t_{i+k-1}-t_i}N_{i,k-1}(t)+\frac{t_{i+k}-t}{t_{i+k}-t_{i+1}}N_{{i+1},{k-1}}(t)\\ for \quad k > 1\quad i=0...n \]

image-20210719172642187 image-20210719172654080 image-20210719172705319

性質:

  • \(N_{i,k}(t)>0\) for \(t_i<t<t_{i+k}\)(局部性)
  • \(\sum_{i=0}^nN_{i,k}(t)=1\) for \(t_{k-1}\le t \le t_{n+1}\) (權性)
  • \(N_{i,k}(t)\)\(t_j\)處是Ck-2

B-spline curve

給定n+1個控制點,\(d_0,...d_n\in R^3\)\(T=(t_0,...t_{n+k})\)稱為向量節點。

\[x(t)=\sum_{i=0}^nN_{i,k}(t)·d_i \]

每多出一個重結點(Multiple knots),曲線的光滑性降一階。

例如,k=4,n=5的B-spline curve

k重時(0,...,0,1,...,1)為Bernstein基。

The de Boor algorithm


免責聲明!

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



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