高階Laplace曲面形變算法(Polyharmonic Deformation)


  數學上曲面的連續光滑形變可以通過最小化能量函數來建模得到,其中能量函數用來調節曲面的拉伸或彎曲程度,那么能量函數最小化同時滿足所有邊界條件的最優解就是待求曲面。

  能量函數通常是二次函數形式:

其中S*代表關於曲面參數u和v的k階偏導。

  對於上述優化問題的求解方法,通常利用變分法得到對應的Euler-Lagrange方程,然后求解該方程得到最優解。對於二次能量函數形式,其對應的Euler-Lagrange方程為如下多階調和方程:

  例如對於,那么對應的Euler-Lagrange方程就是2階Laplace方程Δ2x = 0。上式中Δ代表Laplace算子,邊界區域δΩ的限制條件bj保證了系統存在非平凡解。

  對於k = 1,上述方程描述的是滿足曲面面積最小的表面;對於k = 2,方程描述的是滿足曲面彎曲最小的表面,對於k = 3,方程描述的是滿足曲面曲率變化最小的表面。

  方程的邊界條件可以選擇Dirichlet邊界條件(第一類邊界條件),即指定曲面邊界點的位置,或者Neumann 邊界條件(第二類邊界條件),即指定曲面邊界點的法向方向。

  如果曲面用三角網格形式表示,那么我們在方程中需要使用離散Laplace算子,這是一個線性算子,具體形式在“網格形變算法”中有所解釋,其表達式如下:

其中αij和βij為邊eij對應的2個對角,N1(pi)表示頂點pi的1環鄰域點,A(pi)表示頂點pi的Voronoi面積。

function L = Laplace_Matrix(V, F)
    nV = size(V,1);
    L = sparse(nV,nV);
    for i = 1:3
       i1 = mod(i-1,3)+1;
       i2 = mod(i  ,3)+1;
       i3 = mod(i+1,3)+1;
       Vec1 = V(F(:,i2),:) - V(F(:,i1),:);
       Vec2 = V(F(:,i3),:) - V(F(:,i1),:);

       cotangle = 0.5 .* dot(Vec1, Vec2, 2) ./ norm(cross(Vec1, Vec2, 2));

       L = L + sparse(F(:,i2), F(:,i3), cotangle, nV, nV);
    end
    L = L + L';
    L = -spdiags(full( sum(L,2) ), 0, nV, nV) + L;
end

  利用離散線性Laplace算子,方程可以變化為稀疏線性方程組:

其中p = (p1, … , pp)是計算域內的待求點,對應下圖中黃色點集;h = (h1, … , hp)是計算域內的控制點,對應下圖中紅色和藍色點集,它們代表了方程中的邊界條件。需要注意的是為滿足求解得到的曲面Ck連續,方程中需要待求點外k+1環的控制點集作為邊界條件。

 

 

 

 

圖:k階能量方程使得曲面邊界滿足Ck-1連續

左:k = 1,中:k = 2,右:k = 3

本文為原創,轉載請注明出處:http://www.cnblogs.com/shushen

 

 

參考文獻:

[1] Mario Botsch and Leif Kobbelt. 2004. An intuitive framework for real-time freeform modeling. ACM Trans. Graph. 23, 3 (August 2004), 630-634.


免責聲明!

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



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