Particle Life粒子生命演化的MATLAB模拟

惯例声明:本人没有相关的工程应用经验,只是纯粹对相关算法感兴趣才写此博客。所以如果有错误,欢迎在评论区指正,不胜感激。本文主要关注于算法的实现,对于实际应用等问题本人没有任何经验,所以也不再涉及。

请添加图片描述

0 前言

Particle Life粒子生命演化最早是2017年由数字艺术家Jeffery Ventrella定义的,通过非常简单方法的定义粒子间的作用力,从而产生非常复杂的变化。

最开始Jeffery Ventrella管这种生成方法叫做Clusters,其思想来源于生物学家Lynn Margulus。每个粒子具有不同的颜色,每个颜色代表一种属性。粒子不仅会受到自己颜色粒子的吸引或排斥,也会受到其它颜色粒子的吸引和排斥。

在不同的参数下,粒子间会发生复杂的相互运动,某些参数会呈现出复杂的固定斑图,某些参数会呈现出类似生物之间的集群、逃跑、捕食等各种行为。

章节安排为:第一章主要是讲解原理,第二章演示一些基本的例子,第三章给出了基于MATLAB的具体代码。

本文的参考文献如下:
[1]粒子生命演化:由数量庞大的单体粒子演化出复杂的群体行为逻辑
https://www.bilibili.com/video/BV1Dh4y1t7hn/
https://www.youtube.com/watch?v=p4YirERTVF0
[2]https://particle-life.com
[3]blender3.6模拟-粒子生命-Particle Life
https://www.bilibili.com/video/BV1Ns4y1B7Fu/

1 基本原理

首先,假设一群粒子A,它们互相会受到其它粒子的作用力。两个粒子间的力大小是粒子间距离r的函数。

请添加图片描述

当距离r较小,小于rmin时,设置了-1的排斥力,为防止粒子之间重合。当粒子距离在rmin和rmax之间,粒子最大作用力为Fi。当粒子距离超过rmax,设置作用力为0,防止计算量过大。

当然有几个细节点需要注意:

1粒子所受的作用力只遵循上面的力方程,但不一定遵循牛顿第三定理。粒子的速度和加速度通过牛二律F=ma得到。由于防止粒子运动过快,还需要在全场设置粘滞阻尼。所以其实牛顿第一定理也不满足。当然由于这并不是精准的模拟仿真,所以这些小事可以忽略。

2力Fi是可以自行设置的,当Fi<0,粒子间呈现出排斥性,当Fi>0,粒子间呈现出吸引性,一般不超过±2;

3距离rmin通常在rmax的1/4~1/5左右;rmax和画布大小有关,rmax越大,越会有全局的粒子参与,rmax越小,粒子的行为越局部。

1.1 力影响-吸引排斥行为

当F<0时,粒子间呈现出排斥的现象:
请添加图片描述
当F>0时,粒子间呈现出吸引的现象:
请添加图片描述

1.2 距离rmax影响

这里画布大小都定义为1。
当rmax=0.2时,粒子的汇集效果如下:
请添加图片描述
当rmax=0.5时,粒子的汇集效果更全局化:
请添加图片描述

2 多种粒子相互作用

2.1 双种粒子作用

对于两种粒子A和B,力Fi共有4个,分别为A对A之间的力,A对B之间的力,B对A之间的力和B对B之间的力。这4个力可以写为一个矩阵形式:

A B
A F_AA F_AB
B F_BA F_BB

当假设A对A存在吸引,且A还会吸引B。但是B没有反向作用A的力,B与B之间也不会互相作用。这里的矩阵可以写作:
[ 1 0 0.5 0 ] \begin{bmatrix} 1 &0 \\ 0.5&0 \end{bmatrix} [10.500]
此时得到的图形为细胞图案,A粒子在中间互相吸引到一团,周围吸引一圈B粒子。
请添加图片描述
再添加两个规则给粒子B,粒子B之间会弱吸引,但粒子B排斥粒子A。此时由于粒子AB间一个吸引一个排斥,构成了不断向前运动的追逐系统。
[ 1 − 1 0.5 0.5 ] \begin{bmatrix} 1 &-1 \\ 0.5&0.5 \end{bmatrix} [10.510.5]
追逐模型如下:
请添加图片描述
之后多种粒子之间的运动规律,也是由上述各个规则叠加演化而成。
但是由于规则数量等于粒子种类N的平方,比如3种粒子就有9种粒子间规则,4种粒子就有16种粒子间规则。这就导致复杂性暴增,产生了无穷多的变化。

2.1 多种粒子作用

由于规则的复杂性,每一次随机出的结果可能都是独一无二的,且是其它人都未曾见过的。这种随机性和复杂性正是Particle Life的迷人之处。

下面列举一些演示计算结果
三种粒子,细胞图案:
请添加图片描述
三种粒子,岛屿图案:
请添加图片描述

三种粒子,循环捕食图案:
请添加图片描述
5种粒子的交互作用,呈现出一定的结构:
请添加图片描述

3 代码

上面绘图代码见文末。

主要更改粒子数量N,颜色数量NColor即可。建议粒子数量N大概是500倍颜色数量。不易太多,由于MATLAB运行效率较低,所以按照实际电脑配置自行更改。

力的作用距离Rmax在最好是1/c的形式,c是一个整数。

迭代总步数StepMax越大,展示的时间越长。这个如果想长时间欣赏粒子间作用,可以选择一个比较大的数。

图像刷新频率FrameFreq是用来控制多少个时间步显示一次。一般选择2就行,太大会有卡顿的感觉。

clear
clc
close all
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值