Skip to content

Instantly share code, notes, and snippets.

@kaizu
Last active August 29, 2015 14:22
Show Gist options
  • Save kaizu/2bfcc03ed58f627ec0f3 to your computer and use it in GitHub Desktop.
Save kaizu/2bfcc03ed58f627ec0f3 to your computer and use it in GitHub Desktop.

1、粒子の初期位置を原点として、 2、適当なシェルの半径(吸収境界条件の位置a)を決めてdrawTimeする 3、もしdrawTimeした時間と現在時刻の和がシミュレーション終了時刻より以前ならば   4、平面状での角度(0-2pi)を乱数で決定   5、シェルの半径と角度から現在位置からのdisplacementを得て、位置を更新する   6、時間をdrawTimeで得た時刻だけ進める   7、2に戻る (edited) 3、もしdrawTimeした時間と現在時刻の和がシミュレーション終了時刻よりも後ならば   4、シミュレーション終了時刻引く現在時刻で得た時間幅(drawTimeで得た時刻より手前なはず)でdrawRする   5、平面状での角度を乱数で決定   6、drawRで得た半径と角度から現在位置からのdisplacementを得て、位置を更新する   7、時間をシミュレーション終了時刻まで進める   8、end (edited)

先の処理に加えて、 1、今自分が直方体のどの平面状にいるのかを位置に加えてに保持 2、シェルが平面のどの辺も含まない場合は普通に位置更新。ただし、displacementをRと角度から計算するときには所属する平面の法線ベクトルをもとに行う。 3、辺をひとつだけ含む場合はその辺を軸として折り返した点を新たな位置として、所属する平面の番号を隣り合った平面に移動する。 4、点を含む場合(辺をふたつ含む場合)は、直方体の場合は3と同様に行う→必要であれば2度折り返す。 5、シェルの半径を選ぶときは点を含まない最大距離を目指す。そのシェルの半径があるthresholdよりも小さい場合はあきらめて点を高々ひとつ含むようにとる。 6、点を高々ひとつ取るようにとったときの最大半径がthresholdよりもなお小さい場合はエラーで落とす。 基本的にはこのような処理になります。 おそらく必要になるポリゴンがらみの処理は、 *2の法線ベクトルを利用したdisplacementの計算 *3,4における辺をdisplacementが横切った際の折り返しの処理 *最も近い点または辺とそこまでの距離計算(シェルの半径を決定するのに使う)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment