参考资料: RWTH Aachen university(亚坦工业大学)的sph教程

文章目录

  • 前言
  • 粒子系统
  • 基础数学
    • 狄拉克函数
    • 狄拉克恒等式
      • 核函数W(x)的性质
    • 通过核函数逼近(泰勒展开式)

前言

流体模拟的研究学习博客中,我先阐述流体模拟的数学方法,再阐述流体模拟引擎splishsplash的架构和实现,使用方法。

物理仿真是视觉计算中的一个重要研究课题。它具有许多应用,包括虚拟原型,培训模拟器,机器人,用于数字制作的动画软件,包括电影和动画电影中的视觉效果以及计算机游戏。

我希望这些示例及其文档能帮助您了解仿真方法。随意在您自己的课题中使用这些示例。


粒子系统

简单粒子系统的实现步骤
除去使用寿命>最长使用寿命的颗粒
通过发射器生成新粒子
计算所有粒子的力
时间积分以获得新的粒子位置和速度
  1. 去除使用寿命>最长使用寿命的颗粒
    生成粒子时,每个粒子的生存期设置为 0。在每个仿真步骤中,寿命会随着时间步长的增加而增加δ吨.当粒子的生存时间大于预定义的最大生存期时,将从模拟中删除该粒子。生存期可用于渲染效果。在我们的例子中,透明度根据颗粒淡出的使用寿命而增加。

  2. 发射器生成新粒子
    在每个仿真步骤中,都会在发射器的位置生成新的粒子。通常,它们使用一些预定义的值进行初始化,有时还会添加一些随机值以获得更自然的结果。

    在我们的模拟中,粒子以朝上的速度生成。此外,x和y方向的速度由一些随机值修改。

  3. 计算所有粒子的力
    在每个步骤中,确定粒子的力,例如重力,风等。在我们的简单示例中,仅应用重力

  4. 粒子关于时间t的积分公式 包括速度v,位移x,旋转角度α,已知粒子质量m与角速度ω
    V(t+Δt)=V(t)+ΔtmV(t+\Delta t)=V(t)+\frac{\Delta t}{m}V(t+Δt)=V(t)+mΔt​X(t+Δt)=X(t)+ΔtV(t+Δt)X(t+\Delta t)=X(t)+\Delta tV(t+\Delta t)X(t+Δt)=X(t)+ΔtV(t+Δt)α(t+Δt)=α(t)+Δtω\alpha(t+\Delta t)=\alpha(t)+\Delta t\omega α(t+Δt)=α(t)+Δtω

基础数学

狄拉克函数

δ(r)={∞r= 00otherwise d\delta(r) = \begin{cases} ∞ &\text{r= } 0 \cr 0 &\text{otherwise } d \end{cases}δ(r)={∞0​r= 0otherwise d​
Dirac−δfunction称狄拉克函数,通常用于表示质点。质点只有距离刚好相等时才会出现反应,在该函数中r=0不一定是无穷大,也可以是一个常数,此外如果函数在r≠0的常数点取无穷(或常数)时表示为
δ(r−r0)={∞r= r00otherwise d\delta(r-r_0) = \begin{cases} ∞ &\text{r= } r_0 \cr 0 &\text{otherwise } d \end{cases}δ(r−r0​)={∞0​r= r0​otherwise d​

狄拉克恒等式

A(x)=(A∗δ)(x)=∫RdA(x′)δ(x−x′)dvA(x)=(A*\delta) (x)=\int_{R^d}{A (x')\delta(x-x')dv}A(x)=(A∗δ)(x)=∫Rd​A(x′)δ(x−x′)dv
根据狄拉克恒等式,我们可以选择一个核函数W(x)则有:
W(x)≈(W∗δ)(x)W(x)\approx(W*\delta) (x)W(x)≈(W∗δ)(x)

其中Rd是高斯核,对于高斯核N满足以下等式,图为推导

核函数W(x)的性质


实际使用较少,需要时查表自取。

通过核函数逼近(泰勒展开式)

(A∗W)(x)=∫[A(x)+∇A∣x⋅(x′−x)+∇∇12(x′−x)+O(∥r∥3)]W(x−x′,h)dv′(A*W) (x)=\int{[A(x)+\nabla A\vert_x·(x'-x)+\nabla\nabla\frac{1}{2}(x'-x)+\Omicron(\lVert r \rVert^3)]W(x-x',h)dv'}(A∗W)(x)=∫[A(x)+∇A∣x​⋅(x′−x)+∇∇21​(x′−x)+O(∥r∥3)]W(x−x′,h)dv′
=A(x)∫W(x−x′)dv′+∇A∣x∫⋅(x′−x)W(x−x′)dv′+O(∥r∥2)=A(x)\int W(x-x')dv'+ \nabla A\vert_x \int ·(x'-x)W(x-x')dv'+\Omicron(\lVert r \rVert^2)=A(x)∫W(x−x′)dv′+∇A∣x​∫⋅(x′−x)W(x−x′)dv′+O(∥r∥2)
这个积分式的结果可以表示为
(A∗W)(xi)=∫A(x′)ρ(x′)W(xi−x′,h)ρ(x′)dv′⏟dm’(A*W) (x_i)=\int \frac{A(x')}{\rho(x')}W(x_i-x',h)\underbrace{\rho(x')dv'}_{\text{dm'}}(A∗W)(xi​)=∫ρ(x′)A(x′)​W(xi​−x′,h)dm’ρ(x′)dv′​​
(A∗W)(xi)≈∑j∈FAjmjρjW(xi−xj,h)=<A(xi)>(A*W) (x_i)\approx\sum_{\substack{j\in F}} A_j \frac {m_j}{\rho_j}W(x_i-x_j,h)= <A(x_i)> (A∗W)(xi​)≈j∈F​∑​Aj​ρj​mj​​W(xi​−xj​,h)=<A(xi​)>

流体模拟引擎splishsplash 数学方法相关推荐

  1. SPH(光滑粒子流体动力学)流体模拟实现二:SPH算法(1)-数学原理

    流体模拟(二) SPH算法的数学原理: 标量场和矢量场 如果空间区域内任意一点P,都有一个确定的数f(P),则称这个空间区域内确定了一个标量场,如果空间区域内任意一点P,都有一个确定的向量vF(P), ...

  2. 图形学笔记(二十)粒子、刚体、流体的模拟—— 欧拉方法、Errors 和 Instability、中点法、自适应步长、隐式欧拉方法、Runge-Kutta方法、刚体与流体模拟(质点法、网格法、MPM)

    图形学笔记(十九)粒子.刚体.流体的模拟-- 欧拉方法.Errors 和 Instability.中点法.自适应步长.隐式欧拉方法.Runge-Kutta方法.刚体与流体模拟(质点法.网格法.MPM) ...

  3. Chango的数学Shader世界(九)流体模拟-散度,梯度,二阶导与拉普拉斯

    目的: 参考<GPU Gems>,在UE4中尝试重现2D流体模拟. 本节试图结合场论知识粗略理解Navier–Stokes equations. 参考: <GPU Gems> ...

  4. [计算机图形学]动画与模拟:欧拉方法、刚体与流体(前瞻预习/复习回顾)

    一.前言 这是本专栏的倒数第二篇文章了,为什么不是最后一篇?因为我要单独写一篇总结哈哈,不管怎么说,从今年的3.13的MVP变换开始写,写到现在,也是一个很大的工程了,我很高兴能在大二下学期的期中这个 ...

  5. SPH(光滑粒子流体动力学)流体模拟实现二:SPH算法(4)-算法实现1

    流体模拟(二) SPH算法实现1: 由于我们计算每个粒子的状态时,都需要获得在它光滑核半径内(邻域内)的所有粒子信息.我们如果遍历每个粒子,计算欧式距离的话,那开销就过于庞大了.因此我们可以将我们的空 ...

  6. 【计算机图形学】流体模拟渲染基础

    流体模拟渲染基础 前言 矢量微积分 Naiver-Stokes偏微分方程组 N-S方程的分步求解 对流算法 前言   本文主要参考文献<FLUID SIMULATION SIGGRAPH 200 ...

  7. Python3破冰人工智能,你需要掌握一些数学方法

    为什么要把数学建模与当今火热的人工智能放在一起? 首先,数学建模在字面上可以分解成数学+建模,即运用统计学.线性代数和积分学等数学知识,构建算法模型,通过模型来解决问题.数学建模往往是没有对与错,只有 ...

  8. 不用任何数学方法,如何计算圆面积

    本文转载自机器之心公众号,作者:Andre Ye,由机器之心编译.特此感谢! 杀鸡用牛刀,我们用机器学习方法来算圆的面积. 询问任何人圆的面积是多少,他们都会告诉你不就是????r²吗.但如果你问他们 ...

  9. 机器学习实现计算不规则图形面积_不用任何数学方法,如何计算圆面积

    杀鸡用牛刀,我们用机器学习方法来算圆的面积. 询问任何人圆的面积是多少,他们都会告诉你不就是r²吗.但如果你问他们为什么,他们很可能并不知道. 这是因为圆的面积公式的证明在大多数情况下要么不直观,不令 ...

最新文章

  1. 基础学习总结(四)--SQLite
  2. php linux 调试工具,内网Visual Studio Code通过XDebug远程调试linux服务器PHP脚本
  3. python下载图片-Python下载URL图片
  4. 接收到开始本地截图的命令:videoshot.exe 解决方法
  5. MVC简捷调用EasyUI的datagrid
  6. 如何知道交换机的缓存大小_网络基本功之细说交换机
  7. 教授犀利致辞:躺平的韭菜不挨刀,但不挨刀的韭菜做不成佳肴
  8. Log--日志变大原因总结
  9. 76.Nodejs Express目录结构
  10. 7.2.Zeng_Cache(3) --- 前端
  11. 拓端tecdat|R语言文本主题模型之潜在语义分析(LDA:Latent Dirichlet Allocation)
  12. PMP试题 | 每日一练,快速提分
  13. 20220518 十堂课教会管理者打胜仗———管理者如何快速上手,带领团队打胜仗?
  14. ADUM1201BRZ DGTL ISO 2.5KV GEN PURP 8SOIC
  15. 实用:最经济的美容偏方大汇集
  16. 垂直搜索开发:垂直搜索引擎开发全过程[原创]
  17. likely()与unlikely()函数的作用
  18. 博达:经营管理再升级,从选对CRM开始
  19. 宾果消消乐和宾果消消消_手机游戏软件宾果消消消和开心消消乐各有什么优点?...
  20. websocket实现简易聊天室

热门文章

  1. 地铁供电系统原理图_地铁供电系统智能化发展原稿(图文高清版)
  2. Mall4j电商小程序源码分享
  3. 让ie浏览器成为支持html5的浏览器的解决方法(使用html5shiv)
  4. 【第二季】Arcgis地图制图基础|(一)Arcgis地图符号制作
  5. realme 拨号代码_苹果手机信号差?或许是英特尔的锅,这串代码自查
  6. SQL基础编程练习及答案
  7. premiere介绍和安装方法
  8. STM32八种IO口模式区别,以及上拉输入、下拉输入、浮空输入、模拟输入的区别
  9. java protoc工具_protoc 编译工具
  10. 3DMAX渲染高分辨率图像教程