5

流体が高さマップの表面全体に広がるときの流体の一時的な動作を記述するアルゴリズムを探しています。t=0 での私の開始条件は次のとおりです。

  • サイズ [x, y] の高さの値 (H) の 2D マトリックス
  • サイズ [x, y] の流体の高さの値 (F) の 2D マトリックス
  • 行列 (a) の各点の面積のメトリック。つまり、各位置は 1 cm^2 です。
  • 流体の粘度値 (u)

私が欲しいのは、t'=t+1 で流体の高さ行列 F の新しい値を計算できるアルゴリズムです。任意の時点で、特定の時点での流体の体積を v = a * (F(x,y) - H(x, y)) で計算できます。このアルゴリズムの望ましい特性は次のとおりです。

  • 各ポイントでの流体柱の上部または下部の「勾配」または「形状」を考慮する必要はありません。つまり、ハイトマップの各値を特定の高さの平らな正方形を表すものと見なし、流体の高さマップの各値を上部が平らな長方形の水柱と見なすことができます。
  • 「ドレイン」(高さマップの非常に低いポイント) に遭遇した場合、マップのすべての部分からの流体がそれに引き寄せられるため、影響を受ける可能性があります。

私が探しているものの簡単な例は次のとおりです。

  • すべての値が 0 である 5x5 の高さマップ マトリックス
  • 10 である [2, 2] を除くすべての値が 0 である 5x5 流体高さマップ マトリックス。
  • 1 m^2 の点あたりの面積
  • u の粘度

アルゴリズムは、いくつかの時間ステップにわたって 5x5 マトリックス上に広がる流体の「柱」を記述します。最終的には、アルゴリズムはすべての場所で 10/25 の均一な高さに落ち着きますが、その間に何が起こるかに非常に興味があります.

この種のアルゴリズムを検索しようとしましたが、見つけることができるのは流体内の粒子の挙動を記述する方程式だけであり、これは私の目的には細かすぎます。この問題について参照できる良い情報源、または私のニーズを満たす可能性のある既存のアルゴリズムを知っている人はいますか?

4

1 に答える 1

5
O is your starting fluid-column
o are diffusing columns
************************
X  X  X  X  X

X  X  X  X  X

X  X  O  X  X

X  X  X  X  X

X  X  X  X  X  
************************
--Get the Laplacian of the heights of each neighbour and accumulate results
in a separate matrix
--Then apply the second matrix into first one to do synchronous diffusion
--go to Laplacian step again and again


************************
X  X  X  X  X

X  X  o  X  X

X  o  O  o  X

X  X  o  X  X

X  X  X  X  X  
************************


************************
X  X  .  X  X

X  .  o  .  X

.  o  O  o  .

X  .  o  .  X

X  X  .  X  X  
************************
************************
X  X  .  X  X

X  o  o  o  X

.  o  o  o  .

X  o  o  o  X

X  X  .  X  X  
************************


************************
X  X  .  X  X

X  o  o  o  X

.  o  o  o  .

X  o  o  o  X

X  X  .  X  X  
************************

************************
X  .  o  .  X

.  o  o  o  .

o  o  o  o  o

.  o  o  o  .

X  .  o  .  X  
************************
************************
.  .  .  .  .

.  o  o  o  .

.  o  o  o  .

.  o  o  o  .

.  .  .  .  .  
************************
************************
.  .  .  .  .

.  .  .  .  .

.  .  o  .  .

.  .  .  .  .

.  .  .  .  .  
************************
************************
.  .  .  .  .

.  .  .  .  .

.  .  .  .  .

.  .  .  .  .

.  .  .  .  .  
************************
sorry for very low height-resolution

ラプラシアン

拡散におけるラプラシアンの位置

ナビエストークス方程式における拡散の位置

離散ラプラス演算子

単純なアルゴリズム (疑似):

get a cell's value in a.
get neighbour cells' values in b(sum of them)
put b/4.0 in c(getting 4 cells' values)
add a to c
build a matrix with this algorithm
apply the matrix onto old one
goto step 1

より難しいアルゴリズム (疑似):

apply discrete-Laplacian-operator on all neighbours(finite-differences thing)
put solution in c height-map
subtract or add c to/from starting height-map
goto step 1

Jos Stam の流体ソルバーには、拡散部分についても同様の機能があります。

于 2012-09-12T16:26:15.653 に答える