animation


截图:

布朗树是一种分形结构,和雪花类似。

原理:

粒子做随机运动,设置一个种子进入固定状态。
当其它粒子运动到已固定的粒子的附近时,也被固定住。

代码

public class BrownTree extends Application{Pane pane=new Pane();public static void main(String[] args) {launch();}public BrownTree() {}public void  addParticle(Pane pane) {for(int i=0;i<3000;i++) {Particle p=new Particle(Particle.MIN+Math.random()*600,Particle.MIN+Math.random()*600);pane.getChildren().add(p.getNode());}Particle center=new Particle(300,300);pane.getChildren().add(center.getNode());center.goDie();}public void start(Stage primaryStage) throws Exception {addParticle(pane);ParticleService service=new ParticleService();service.setDelay(Duration.seconds(1));service.setPeriod(Duration.seconds(0.1));service.start();pane.setOnMouseClicked(e->{service.cancel();});primaryStage.setScene(new Scene(pane));primaryStage.setWidth(600);primaryStage.setHeight(600);primaryStage.setTitle("布朗树 ");primaryStage.show();}}
class ParticleService extends ScheduledService<Number>{protected Task<Number> createTask() {Task<Number> task=new Task<Number>(){protected void updateValue(Number value) {super.updateValue(value);Particle.list.forEach(Particle::move);}protected Number call() throws Exception {return null;}};return task;}
}
class Particle{static ArrayList<Particle> list=new ArrayList<Particle>();final static int SIZE=2;final static int MIN=0;final static int MAX=600;final int SPACE=10;boolean live=true;public Circle node;public Particle(double x ,double y) {node=new Circle(x,y,SIZE);node.setFill(Color.valueOf("#43CD80"));list.add(this);}public Circle getNode() {return node;}public  void move() {if(this.live) {double x=0;double y=0;do{x=node.getCenterX()+(Math.random()>0.5?1:-1)*Math.random()*SPACE;y=node.getCenterY()+(Math.random()>0.5?1:-1)*Math.random()*SPACE;}while(x<MIN||x>MAX||y<MIN||y>MAX) ;node.setCenterX(x);node.setCenterY(y);for(Particle itme:list) {if(this!=itme&&isNear(this,itme)&&itme.live==false) {goDie();}}}}public void  goDie() {node.setFill(Color.valueOf("#912CEE"));this.live=false;}public static boolean isNear(Particle u,Particle r) {double x = u.node.getCenterX()-r.node.getCenterX();double y=  u.node.getCenterY()-r.node.getCenterY();return x*x+y*y<64;//return x*x+y*y<Math.pow((u.getNode().getRadius()+r.getNode().getRadius()),2);}
}

运行效果

让粒子拥有不同大小

布朗树 (扩散限制聚集模型)相关推荐

  1. 创意编程——随机(扩散限制聚集DLA)

    基于processing实现 目录 效果演示 DLA(Diffusion Limited Aggrefation)介绍 Figure 1. Point attractor Figure 2. Line ...

  2. poj 3321 Apple Tree(dfs序+树状数组求和模型)

    题目链接:http://poj.org/problem?id=3321 解题思路: 先dfs求出序列,将子树转化到dfs序列的区间内,接下来就是简单的树状数组求和模型了.水题. #include< ...

  3. 回归树与基于规则的模型(part3)--回归模型树

    学习笔记,仅供参考,有错必纠 回归树与基于规则的模型 回归模型树 One limitation of simple regression trees is that each terminal nod ...

  4. 回归树与基于规则的模型(part2)--简单回归树

    学习笔记,仅供参考,有错必纠 回归树与基于规则的模型 简单回归树 简单回归树将数据划分为若干组,其中组内的样本点在结果变量取值上具有一定的同质性.为了实现这种同质性划分,回归树需要决定: 用于切分的预 ...

  5. 回归树与基于规则的模型(part1)--if-then语句

    学习笔记,仅供参考,有错必纠 回归树与基于规则的模型 if-then语句 基于树的模型由一个或多个针对预测变量的if−thenif-thenif−then语句组成,它们被用来对数据进行划分,基于这些划 ...

  6. 自然语言处理:CBOW(哈夫曼树)与Skip-Gram模型

    gensim库中的word2vev中模型主要使用了CBOW(哈夫曼树)与Skip-Gram模型.CBOW表示基于上下文来预测目标词,即输入是2c个上下文词(c表示窗口大小),输出是目标词的概率:Ski ...

  7. 回归树与基于规则的模型(part4)--基于规则的模型

    学习笔记,仅供参考,有错必纠 回归树与基于规则模型 基于规则的模型 A rule(规则) is defined as a distinct path through a tree(树中一条不重复的路径) ...

  8. MySQL(InnoDB剖析):24---B+树索引(聚集索引与非聚集索引(辅助索引))、B+树索引的分裂

    一.B+树索引概述 B+树索引的本质就是B+树在数据库中的实现.但是B+索引在数据库中有一个特点就是高扇出性,因此在数据库中,B+树的高度一般都在2~4层,也就是说查找某一键值的行记录最多只需要2~4 ...

  9. 有限扩散集团凝聚模型(DLCA)第三讲:流动水流中的凝聚模拟(1)

    上几节课我们都再讲这个模型在一个非常非常小的一个立方体中,然后这群粒子在里面走碰粘沉.在现实世界中,水不可能就在一个小立方体中,而且水是动态的.流动的.而DLCA模型讲的确实在静止的水中切一小块出来做 ...

最新文章

  1. python中噪音是什么意思_Python数据噪音
  2. formal method revision
  3. numpy 若干行和列_Numpy的轴,pandas的行和列
  4. oracle授权with,ORACLE权限关于with admin option和with grant option的用法
  5. python matplotlib设置字体_Matplotlib中修改字体属性
  6. mvc html.antiforgerytoken,MVC Html.AntiForgeryToken() 防止CSRF***
  7. 解决自建ca认证后浏览器警告
  8. 阿里架构师进阶23期精讲:Redis、Kafka、Dubbo、Docker等
  9. hive中使用case、if:一个region统计业务(hive条件函数case、if、COALESCE语法介绍:CONDITIONAL FUNCTIONS IN HIVE)...
  10. %3cul%3e标签 php_php中lt
  11. 如何用计算机快捷键代替鼠标,什么快捷键代替鼠标左键
  12. 摆地摊赚钱方案全攻略
  13. 学海无涯!java全栈工程师面试题
  14. javascript判断一个数是否是素数(质数)
  15. 一句话详解常见的心理学效应
  16. c++ 数组置0_面试中常见的数据结构与算法题整理,想当架构师,数据结构与算法不过关可不行(数组+字符串,共60题)...
  17. 金蝶外贸进出口行业解决方案(K/3 Cloud、EAS版)
  18. 牛逼!java只能输入数字的正则
  19. iOS 初探代码混淆(OC)
  20. 【Python画图01】一张图上两条线,坐标图例设置

热门文章

  1. 《操作系统 》 操作系统概述 (一)
  2. 地质勘查土质分类图片_如何看懂地质勘察报告
  3. 米拓自助建站,提供整站开源代码
  4. nvme命令中prp_蛋蛋读NVMe之三
  5. oracle 存储过程 循环嵌套,oracle 存储过程 循环嵌套
  6. 《ABP Framework 极速开发》 - 教程首发
  7. 操作系统自学(十三)生产者消费者问题以及多生产者多消费者问题
  8. TTL与CMOS 电路
  9. 厌倦了各种app推送广告?用RSS来订阅自己想看的内容吧
  10. 成长日记——初识C语言