Saturday, September 5, 2009

Deformationテスト

デフォメーションのプログラムを組んでみた.
詳しいことは後でまとめるとして,まずは絵だけ.


初期状態の四面体です.ここからてっぺんの頂点を右にずらします.
以下に有限要素法を適用していない結果と適用した結果を並べます.


有限要素法を適用していない結果.てっぺんの頂点が移動しただけです.


有限要素法を適用した結果.てっぺんの頂点が移動するにつれて,他の頂点にも力が加わり移動しています.

今回の古典力学のシミュレーションはオイラー法で計算しているので,精度はすげー悪いはずです.論文に出ているようなタイムステップを実装しているわけではないので,そのうち誤差がたまって,四面体が爆発してしまいます.次はまともなタイムステップの計算をしてみます.

追記(2009/9/6):このデフォメーションはオイラー法でしか,古典力学の計算をできないかもしれない.ルンゲクッタ法では導関数を求めなければならない.しかしデフォメーションでは次のタイムステップの加速度は次の計算を行わない限り求まらない.つまり,ルンゲクッタ法に用いるための導関数は次の計算まで求まらないが,次の計算をするためには,次の導関数が必要となり,計算ができないということになる.だから,オイラー法で逐次計算していくしかない.ということは,みんな計算誤差なんて無視しているのか.

メモ
ちなみに,2007年のシグラフで公開されたBargteilさん達の論文に書いてあるFEMをそのまま実装しても全然うまくいきません.理由は,若干の記述を間違えている箇所があるからです.まじめに読んで実装しても,頂点は変な回転をしながら移動します.この論文が参照している2003年に公開されたTeranさん達のFinite Volume Methods for the Simulation of Skeletal Muscleか,2004年に公開されたIrvingさん達のInvertible Finite Elements For Robust Simulation of Large Deformationに記述されているFEMを実装するべきです.

No comments: