美文网首页
js粒子的随机运动与反弹计算

js粒子的随机运动与反弹计算

作者: CODERLIHAO | 来源:发表于2020-04-18 11:21 被阅读0次

1.先看预览

circleShake.gif
circleSport.gif

2.随机运动分析

随机运动比较很好计算,从-speed 到speed之间随机获取一个当前速度,来控制粒子的x,y坐标就可以了。
代码demo

let speedX = window.random(-this.speed, this.speed);
let speedY = window.random(-this.speed, this.speed);
this.x += speedX;
this.y += speedY;

3.反弹运动分析

我门先来看看向量问题:


image.png

有向量OB与向量OA,求向量OB关于向量OA的对称向量OB1


image.png
为了限制粒子在圆内,需要将超出圆范围的粒子重新计算x,y坐标,并与圆心链接组成对称向量,计算对称向量与向量(1,0)之间的角度
image.png
 let f = Math.acos((particle.x - this.cx) / Math.sqrt(Math.pow(particle.x - this.cx, 2)+ Math.pow(particle.y - this.cy, 2)));

粒子初始化时,会随机给出粒子的方向弧度,范围是[0,2PI),粒子就会沿着初始化的方向一致运动,一直到碰到圆,那么对于粒子来说,向量就是

const vectorI = {x: Math.cos(particle.vector), y: Math.sin(particle.vector)};

对称向量就是半径的那条直线

  const vectorN = {x: particle.x - this.cx, y: -particle.y + this.cy};

按照公式计算两个向量之间的点乘

const iDotN = vectorI.x * vectorN.x + vectorI.y * vectorN.y;

那么前面的系数就是

  const q = 2 * iDotN / (Math.pow(vectorN.x, 2) + Math.pow(vectorN.y, 2));

接下里就是计算OB1了,前面加了一个负号,那就是我们计算的反弹向量

  const vectorM = {x: -(q * vectorN.x - vectorI.x), y: -(q * vectorN.y - vectorI.y)};
image.png

计算反弹向量与水平线弧度

 let theta = Math.acos(vectorM.x / Math.sqrt(Math.pow(vectorM.x, 2) + Math.pow(vectorM.y, 2)));
 if (vectorM.y < 0) {
     theta = 2 * Math.PI - theta;
}

theta就是粒子运动的新方向
Demo

3.扩展

我们将圆变成矩形


rectShake.gif
rectSport.gif

代码:github

相关文章

  • js粒子的随机运动与反弹计算

    1.先看预览 2.随机运动分析 随机运动比较很好计算,从-speed 到speed之间随机获取一个当前速度,来控制...

  • 随机分布与扩散

    摘要 在本报告系计算物理课程期末作业,研究随机行走与扩散的相关问题。先从二维单粒子系统入手,模拟单粒子的随机行走,...

  • 作业导航

    1.第0章练习:第0章主要内容:随机游走与噪声。根据上述内容我做出基于流场的粒子运动https://www.jia...

  • C4D TP粒子入门学习笔记-2

    继续上一篇。 1、下面解决蓝色球与地面碰撞问题。 2、点击粒子反弹节点,找到属性--偏移类型---改为“粒子尺寸行...

  • 程序员带你回忆经典,原生javascript面向对象开发打砖块小

    效果知识点: js面向对象,js运动碰撞检测,js随机颜色,动态生成动态监测实现原理,运动实现原理,模块化编程思想...

  • canvas渲染随机粒子

    偶然看到有些网站上会使用随机粒子的背景,感觉很炫,就自己试着写了一个,效果还不错。 html部分 js部分 效果图

  • 粒子运动

    https://jparticles.js.org/#/examples/quick_start 很棒的效果

  • 《时间简史》读后感(八)

    在量子力学中,物质的粒子之间的相互作用通常会发出携带力的粒子,同时引起反弹,改变粒子的速度。携带力的粒子一般包括引...

  • 指令专题:快乐的海底世界(边缘反弹、随机数)

    指令专题:快乐的海底世界(边缘反弹、随机数) · 视频课程 指令专题:快乐的海底世界(边缘反弹、随机数) · 课程...

  • 12.有心力场中的运动

    两个粒子的运动,可以化为单个粒子在有心力场中的运动,所以总是要考察有心力场中粒子的运动。 将两个粒子的哈密顿量经过...

网友评论

      本文标题:js粒子的随机运动与反弹计算

      本文链接:https://www.haomeiwen.com/subject/ntamvhtx.html