【发布时间】:2012-09-05 17:04:13
【问题描述】:
我正在寻找一种算法来描述流体在高度图表面上传播时的瞬态行为。我在 t=0 的起始条件是:
- 高度值 (H) 的二维矩阵,大小为 [x, y]
- 大小为 [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 的统一高度,但我真的对两者之间发生的事情很感兴趣。
我试图搜索这种算法,但我只能找到描述流体内部粒子行为的方程,这对于我的目的来说太细化了。有谁知道我可以参考这个问题的任何好的资源,或者可能满足我需求的现有算法。
【问题讨论】:
-
嗯。一个非常有趣的问题!不过,我不知道如何在不使用与流体相关的物理方程的情况下准确地模拟流体的运动。例如,为了显示最终结果所采取的步骤,您的水对象必须被分成几部分。这些碎片对你来说有多小?你必须为你使用的任何大小的块想出一个模型,CFD 是一个很好的话题 - 但通常模拟粒子或块不会大很多。
-
你试过flood-fill吗? 8^)
-
更严重的是,您应该查找偏微分方程 (PDE),以及将它们离散为规则网格的方法。您需要仔细考虑要模拟的确切行为(例如,如果流体动量很大,这会给您带来波浪和涟漪)。
标签: algorithm simulation fluid-dynamics