基于网格的波动方程模拟(Wave equation on mesh)附源码
波动方程是偏微分方程 (PDE) 里的经典方程,它在物理学中有大量应用并经常用来解释空间中的能量传播。波动方程是一个依赖时间的方程,它解释了系统状态是如何随着时间的推移而发生变化。在下面模拟波动方程时会使用会到拉普拉斯(Laplacian)算子,这是一个线性算子,具体形式在“网格形变算法”中有所解释。
波动方程:
其中:b为衰减系数,1/sqrt(a)为波传播速度,h为沿网格顶点法向移动的距离。
将波动方程离散化并整理后得到:
其中:dt为时间间隔,I为单位矩阵,L为离散Laplacian算子,hi为待求的波高,hi-1和hi-2为前两个时刻的波高。
因此波动方程可以根据系统前两时刻的状态求解系统的当前状态。
效果:
function [Frame] = wave_equation(V, F)
% vertex normal
N = per_vertex_normals(V, F); % laplacian operator
L = cotmatrix(V, F); % identical matrix
nV = size(V, );
I = speye(nV); % set parameters
dt = 0.0075;
a = ;
b = 0.5;
A = ( + b*dt)*I - a*dt^*L; % figure
figure('Position', [, , , ]);
fh = trisurf(F, V(:,), V(:,), V(:,), ...
'FaceColor', 'interp', 'FaceLighting', 'phong', ...
'EdgeColor', 'none', 'CData', zeros(nV,));
view()
axis equal
axis off
camlight set(gca, 'position', [ ]);
set(fh, 'ButtonDownFcn', @ondown); V0 = V;
H = zeros(nV, );
H_1 = zeros(nV, );
draw_t = ;
i = ;
tic;
while true
H_2 = H_1;
H_1 = H; B = ( + b*dt)*H_1 - H_2;
H = A\B; % updata figure
draw_t = draw_t + toc;
if draw_t > 0.033
V = V0 + bsxfun(@times, H, N);
set(fh, 'Vertices', V, 'CData', H);
drawnow; Frame(i) = getframe(gcf);
i = i + ;
if i >
break;
end tic;
draw_t = ;
end
end function ondown(src, ev)
pt = get(gca, 'CurrentPoint'); dH = /*sparse(knnsearch(V, pt(,:)), , , nV, );
H = H + dH;
end
end
本文为原创,转载请注明出处:http://www.cnblogs.com/shushen。
基于网格的波动方程模拟(Wave equation on mesh)附源码的更多相关文章
- JAVA模拟Spring实现IoC过程(附源码)
前言:本人大四学生,第一次写博客,如果有写得不好的地方,请大家多多指正 一.IoC(Inversion of Control)反转控制 传统开发都是需要对象就new,但这样做有几个问题: 效率低下,创 ...
- 网格测地线算法(Geodesics in Heat)附源码
测地线又称为大地线,可以定义为空间曲面上两点的局部最短路径.测地线具有广泛的应用,例如在工业上测地线最短的性质就意味着最优最省,在航海和航空中,轮船和飞机的运行路线就是测地线.[Crane et al ...
- arcgis api 4.x for js 集成 Echarts4 实现模拟迁徙图效果(附源码下载)
前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 4.x for js:esri 官网 api,里面详细的介绍 arcgis api 4.x 各个类 ...
- 基于C#的内网穿透学习笔记(附源码)
如何让两台处在不同内网的主机直接互连?你需要内网穿透! 上图是一个非完整版内外网通讯图由内网端先发起,内网设备192.168.1.2:6677发送数据到外网时候必须经过nat会转换成 ...
- 网格弹簧质点系统模拟(Spring-Mass System by Verlet Integration)附源码
模拟物体变形最简单的方法就是采用弹簧质点系统(Spring-Mass System),由于模型简单并且实用,它已被广泛应用于服饰.毛发以及弹性固体的动态模拟.对于三角网格而言,弹簧质点系统将网格中的顶 ...
- wpf 模拟3D效果(和手机浏览图片效果相似)(附源码)
原文 wpf 模拟3D效果(和手机浏览图片效果相似)(附源码) pf的3D是一个很有意思的东西,类似于ps的效果,类似于电影动画的效果,因为动画的效果,(对于3D基础的摄像机,光源,之类不介绍,对于依 ...
- 基于Redis缓存的Session共享(附源码)
基于Redis缓存的Session共享(附源码) 在上一篇文章中我们研究了Redis的安装及一些基本的缓存操作,今天我们就利用Redis缓存实现一个Session共享,基于.NET平台的Seesion ...
- 基于双向BiLstm神经网络的中文分词详解及源码
基于双向BiLstm神经网络的中文分词详解及源码 基于双向BiLstm神经网络的中文分词详解及源码 1 标注序列 2 训练网络 3 Viterbi算法求解最优路径 4 keras代码讲解 最后 源代码 ...
- wpf 模拟抖音很火的罗盘时钟,附源码,下载就能跑
wpf 模拟抖音很火的罗盘时钟,附源码 前端时间突然发现,抖音火了个壁纸,就是黑底蕾丝~~~ 错错错,黑底白字的罗盘时钟! 作为程序员的我,也觉得很新颖,所以想空了研究下,这不,空下来了就用wpf, ...
随机推荐
- Hadoop 2.5.1编译
1.环境安装 gcc.gcc-c++.make.cmake.svn yum install lzo-devel zlib-devel gcc gcc-c++ make cmake autoconf a ...
- 用TypeScript开发了一个网页游戏引擎,开放源代码
最开始学习电脑编程的原动力之一就是想自己编写游戏,一方面很好奇这些游戏是怎么做出来的,另一方面觉得有些地方设计的不合理,希望电脑游戏既能让人玩的有趣,又不浪费时间. 学校五年,毕业十年,学用了十多种编 ...
- Sharepoint学习笔记—习题系列--70-576习题解析 -(Q72-Q74)
Question 72 You are designing a SharePoint 2010 application and a Web application. You need to desi ...
- android https正确调用方案(防中间人劫持)
以下内容为原创,欢迎转载,转载请注明 来自博客园:http://www.cnblogs.com/joey-hua/p/4971380.html 1.劫持https接口 很多android客户端虽然使用 ...
- Android 国际化
由于公司的项目是投放 google play store , 所以要做国际化.国际化遇到的两个大问题 字符串国际化 布局样式国际化 一:字符串国际化 解决这个问题很简单,在res目录下放 ...
- spring.net (2)环境搭建 对(1)例子的解释和扩充
在上文中的例子实现了spring.net 控制反转的简单例子: 但是不免其中会有一些疑问. 例子中的配置文件是什么意思: app.config的配置规则可以参考web.config的配置详情 < ...
- iOS 开发之路(登陆验证调用WebService)二
swift3.0下使用Alamofire调用Webservice遇到的一些问题以及解决方案. 首先是针对没有证书的https下的接口处理问题(ps:不推荐在正式版本中使用),manager.reque ...
- iOS中响应者链条-触摸事件
总体来说,分2个步骤: 一,从上到下寻找合适的控件来处理这个触摸事件.如下图,如果点击了黄色4,则UIApplication -> UIWindow -> 1白色 -> 2橙色 -& ...
- Android实用代码七段(五)
前言 每次分享意味着每次都有进步,本系列以实用为主,欢迎和我分享和推荐好用的代码段~~ 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯伯 ...
- 不修改Xcode项目加载Reveal
关 于iOS UI调试工具Reveal的配置,很多初学者朋友可能在网上搜索到一些文章,这些文章大部分都是讲述了如何通过配置Xcode项目,通过加入一些库文件, 并且在程序中编写额外的代码来调用Reve ...