5

我正在寻找一种算法来描述流体在高度图表面上传播时的瞬态行为。我在 t=0 的起始条件是:

  • 大小为 [x, y] 的高度值 (H) 的二维矩阵
  • 大小为 [x, y] 的流体高度值 (F) 的二维矩阵
  • 矩阵(a)中每个点的面积的度量,即每个位置是1 cm^2
  • 流体的粘度值 (u)

我想要的是一种算法,可以在 t'=t+1 处计算流体高度矩阵 F 的新值。在任何时候,我都可以通过 v = a * (F(x,y) - H(x, y)) 计算给定点的流体体积。该算法的理想特性是:

  • 它不需要考虑每个点的流体柱顶部或底部的“斜率”或“形状”。即它可以将hieghtmap中的每个值视为描述一个具有一定高度的平坦正方形,而将流体高度图的每个值视为具有平顶的矩形水柱
  • 如果遇到“排水管”(即高度图中的一个非常低的点),来自地图所有部分的流体在被拉向它时可能会受到影响。

我正在寻找的一个简单示例是:

  • 一个 5x5 高度图矩阵,其中所有值为 0
  • 一个 5x5 流体高度图矩阵,其中除 [2, 2] 为 10 外,所有值均为 0。
  • 每点面积 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

拉普拉斯算子

拉普拉斯在扩散中的位置

扩散在 Navier-Stokes 方程中的位置

离散拉普拉斯算子

简单算法(伪):

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 回答