Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm “离散流体”;“填充”;高度图的算法_Algorithm_Simulation_Fluid Dynamics - Fatal编程技术网

Algorithm “离散流体”;“填充”;高度图的算法

Algorithm “离散流体”;“填充”;高度图的算法,algorithm,simulation,fluid-dynamics,Algorithm,Simulation,Fluid Dynamics,我正在寻找一种算法,可以描述流体在高度图表面传播时的瞬态行为。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))计算给定点的流体体积。该算法的理想特性为: 不必考虑流体柱顶部或底部各点的“坡度”或“形状”。也就是说,它可以考

我正在寻找一种算法,可以描述流体在高度图表面传播时的瞬态行为。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))计算给定点的流体体积。该算法的理想特性为:

    不必考虑流体柱顶部或底部各点的“坡度”或“形状”。也就是说,它可以考虑HIGHTMAP中的每一个值来描述某一高度的平坦平方,并且将流体高度图的每个值作为具有平顶的矩形柱。
  • 如果遇到“排放”(即高度图中的一个非常低点),当流体被拉向地图时,地图所有部分的流体都可能受到影响
我正在寻找的一个简单例子是:

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

简单算法(伪):

硬算法(伪):


扩散部分也有类似的问题。

Hmm。这是一个非常有趣的问题!但是,我不知道如果不使用与流体相关的物理方程,如何准确地模拟流体的运动。例如,要显示最终结果所采取的步骤,必须将水对象拆分为多个部分。这些衣服你穿多小?你必须为你使用的任何尺寸的块体建立一个模型,CFD是一个非常广泛的主题,但通常对颗粒或块体进行建模,尺寸不会太大。你尝试过泛洪填充吗?8^)更严重的是,您应该查找偏微分方程(PDE),以及将其离散为规则网格的方法。你需要仔细考虑你想模拟什么样的行为(例如,如果流体动量是显著的,这会给你波浪和涟漪)。有趣。我对此进行了一点研究,但我还没有真正能够让离散拉普拉斯算子为我工作。例如,在一维情况下,使用[0,0,10,0,0]并应用一维离散拉普拉斯算子,我得到[0,10,-10,10,0]作为t+1的结果。阅读那些维基百科文章让我想起了卷积运算,所以我尝试了一些方法。对于[0.1,0.8,0.1]的核,我对t=1的结果是[0,1,8,1,0],而t=2的结果是[0.1,1.6,6.6,1.6,0.1]。见()。看起来很有希望。你一定是在离散拉普拉斯算子上选择了太大的h平方,而且一定有时间乘数,它也很小。但你的卷积是合乎逻辑的。玩得高兴
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