数值积分I

这篇主要是来实现粒子系统的

粒子系统可以模拟很多视觉 比如模拟大自然中的 雾气  火  雨 雪  还有些游戏中酷炫的激光 喷火等。。

一个粒子通常就需要一张纹理  对于那些火焰 激光的粒子系统 要配上globalCompositeOperation lighter属性 其作用就是叠加像素值

粒子的运动只需考虑线速度即可 也不用考虑粒子间的碰撞问题了 粒子是有生命期的 生命过后可以直接移除它 或者直接给它重置属性

不同的粒子系统 它们的发射点 纹理 生命期  受到的各种合力 都需要给出不同的参数

让我来现唤起你の物理之魂(你要相信我! 我是经过数学の女神传授过的! 女神是不会错的!)

用你仅有的物理知识 你一定看得懂下面的式子

s=s0+v*t

对一小段时间进行微分 得

dx=v*dt

位置变化就是某个时刻的瞬时速度乘很小的一段时间 我们可以将其推广到整个小段时间。

怎么把他用到具体代码中呢?dt就是连续的模拟时刻时间 用牛顿定律

有 F=m*a

a=d2x/d2t

v=dx/dt

a=dv/dt

这样只需要力和根据力计算出加速度即可

必如存在重力的力 F=m*g  g也可以表示其他的力

粒子系统算法过程

1 计算某个时刻一个粒子上的合力

2 求出一个粒子上的加速度

3 利用数值积分求出速度改变位置

关键代码

render(est){
    this.alp = sin(PI*(--this.ag/this.ag2));
    const finv = this.finv.scale(this.fss).rotate(this.frd);
    const [nn1,nn2] =[finv.x,finv.y];
    this.y += est*(this.n2+=est*nn2);
    this.x += est*(this.n1+=est*nn1);

    with(Stg.ctx){
        save();
        fillStyle = ‘pink‘;
        translate(this.x,this.y);
        globalAlpha = this.alp;
        drawImage(map,0,0);
        restore();
    }    

如下模拟了一个烟 有点像汽车的尾气吧。。

再来

总之 不同的参数都会呈现不同的效果

给出另外一种火球的效果  demo戳我~

在下一篇中 我将使用另外一种积分法 模拟出刚体 请期待~

时间: 2024-12-25 07:30:01

数值积分I的相关文章

MATLAB学习笔记(八)——MATLAB数值积分与微分

(一)数值积分 一.数值积分的MATLAB实现方法: 1.变步长辛普生法(quad)法: (1)调用格式: [I,n]=quad('fname',a,b,tol,trace); fname是被积函数: a,b是积分上下限: tol来控制积分精度,默认为0.001: trace控制是否展现积分过程,默认为0,不展现:若trace≠0,则展现. (2)fname使用的两种方法: 建立函数文件: function f=fesin(x) f=--; 另一种则是使用内联函数(据说14后的版本会删除这个):

关于本科毕业论文《Laguerre小波在数值积分与微分方程数值解中的应用》存在的问题与小结

本科的毕业设计<Laguerre小波在数值积分与微分方程数值解中的应用>是通过Laguerre小波函数来近似表达某个需要求积分或解微分方程的函数,将原函数很难求得函数用小波函数表达出来,这样在求解数值积分时就容易了.但用Laguerre小波逼近的函数有一定的误差性,这里的误差取决于小波函数的两个变量.在编写程序时由于未能根据用户的需要调节小波函数的两个变量,这就造成了此程序的局限性和误差不够好.另外对于错误的输入没有正确的提示,这也会造成用户的时间的浪费.从软件工程的角度来说这个程序并没有良好

计算方法(二)数值积分

在工程中,经常会遇到积分问题,这时原函数往往都是找不到的,因此就需要用计算方法的数值积分来求. public class Integral { /// <summary> /// 梯形公式 /// </summary> /// <param name="fun">被积函数</param> /// <param name="up">积分上限</param> /// <param name=&

【原创】开源Math.NET基础数学类库使用(08)C#进行数值积分

开源Math.NET基础数学类库使用系列文章总目录:   1.开源.NET基础数学计算组件Math.NET(一)综合介绍    2.开源.NET基础数学计算组件Math.NET(二)矩阵向量计算    3.开源.NET基础数学计算组件Math.NET(三)C#解析Matlab的mat格式   4.开源.NET基础数学类库使用Math.NET(四)C#解析Matrix Marke数据格式   5.开源.NET基础数学类库使用Math.NET(五)C#解析Delimited Formats数据格式

数值积分 模板

什么是数值积分 数值积分可以用来求定积分的近似值.对于很多函数来说,我们是可以使用初等函数来表示出其积分的,对于这种函数,只需要求出不定积分然后代入值就能得到定积分了. 可是除此之外还有许多难求的函数和没法使用初等函数表示的函数.当我们想要求出它们的定积分的时候,需要使用数值积分来求解. 在ACM中一些题目需要使用数值积分来求解,以下列出一些求数值积分的方法,由简单到难,而对ACMer来说最重要的是复合Simpson,其精度较高,且可调精度,是乱搞积分几何的利器. 我从这学的:网易公开课 MIT

AOJ 1313 Intersection of Two Prisms (数值积分)

Intersection of Two Prisms Suppose that P1 is an infinite-height prism whose axis is parallel to the z-axis, and P2 is also an infinite-height prism whose axis is parallel to the y-axis. P1 is defined by the polygon C1 which is the cross section of P

开源Math.NET基础数学类库使用(08)C#进行数值积分

原文:[原创]开源Math.NET基础数学类库使用(08)C#进行数值积分               本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html 开源Math.NET基础数学类库使用总目录:http://www.cnblogs.com/asxinyu/p/4329737.html 前言 在数值计算的需求中,数值积分也是比较常见的一个.我们也知道像Matlab,Mathematics等软件的积分求解功能非常高大上,不仅能

等参单元和数值积分

https://www.taodocs.com/p-120594397.html http://www.doc88.com/p-0951440228882.html http://www.docin.com/p-1714264883.html https://wenku.baidu.com/view/df78c1e3360cba1aa811da45.html  ( 单元刚度矩阵组装及整体分析 ) 单元刚度矩阵单元方程推导(https://wenku.baidu.com/view/2deb67c5

Scipy---5.数值积分

scipy的integrate模块提供了集中数值积分算法,其中包括对常微分方程组ODE的数值积分. 1. 积分 (1)数值积分函数: scipy.integrate.quad(func, a, b, args=(), full_output=0, epsabs=1.49e-08, epsrel=1.49e-08, limit=50, points=None, weight=None, wvar=None, wopts=None, maxp1=50, limlst=50) 参数: func:一个P