高度图的离散流体"filling"算法



我正在寻找一种算法,该算法将描述流体在高度图表面扩散时的瞬态行为。我在t=0时的启动条件是:

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

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

  • 它不需要考虑每个点的液柱顶部或底部的"坡度"或"形状"。也就是说,它可以将高度图中的每个值视为描述某个高度的平坦正方形,而流体高度图的每个值则视为具有平坦顶部的矩形水柱
  • 如果遇到"排水"(即高度图中的一个非常低的点),当流体被拉向地图时,地图所有部分的流体都可能受到影响

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

  • 5x5高度映射矩阵,其中所有值均为0
  • 5x5流体高度映射矩阵,其中除[2,2]之外的所有值均为0,后者为10
  • 每点1平方米的面积
  • 粘度为u

该算法将描述在5x5矩阵上以几个时间步长分布的流体"列"。最终,算法在所有位置都会稳定在10/25的统一高度,但我真的很感兴趣介于两者之间的情况。

我曾试图搜索这种算法,但我能找到的只是描述流体中粒子行为的方程,这对我来说太精细了。有人知道我可以为这个问题参考什么好的来源吗,或者有一个现有的算法可以满足我的需求吗。

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的流体解算器在扩散部分也有类似的功能。

相关内容

  • 没有找到相关文章

最新更新