首页 文章

用于高度图的离散流体“填充”算法

提问于
浏览
5

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

  • 尺寸为[x,y]的高度值(H)的二维矩阵

  • 尺寸为[x,y]的流体高度值(F)的二维矩阵

  • 矩阵(a)中每个点的面积的度量,即每个位置是1平方厘米

  • 流体的粘度值(u)

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

  • 不需要考虑每个点上流体柱顶部或底部的"slope"或"shape" . 即它可以将hightghtmap中的每个值视为描述某个高度的扁平方形,并且流体高度的每个值映射为具有平顶的水的矩形柱

  • 如果遇到"drain"(即高度图中的一个非常低的点),来自 Map 所有部分的流体可能会受到影响,因为它被拉向它 .

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

  • 一个5x5高度的 Map 矩阵,其中所有值均为0

  • 一个5x5流体高度映射矩阵,其中所有值均为0,除了[2,2],即10 .

  • 每点面积1平方公尺

  • 粘度为u

该算法将描述在几个时间步长上在5×5矩阵上展开的流体“列” . 最终算法将在所有位置以10/25的均匀高度稳定下来,但我真的对它们之间发生的事情感兴趣 .

我试图寻找这种算法,但我能找到的只是描述流体内颗粒行为的方程式,这对于我的目的而言过于颗粒化 . 有谁知道我可以参考这个问题的任何好的来源,或者可能满足我需要的现有算法 .

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
    

    Laplacian

    Laplacian's place in diffusion

    Diffusion's place in Navier-Stokes equations

    Discrete Laplace Operator

    简单算法(伪):

    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's fluid-solver对于扩散部分有类似的东西 .

相关问题