title: Processing精彩例程之细胞自动机

date: 2018-3-25 22:19:41

categories: 编程与生活

tags: Java

一维细胞自动机

一维细胞自动机

int [] rules = { 0, 0, 0, 1, 1, 1, 1, 0}; // 生成一维规则

int gen = 1; // 回合数,等于当前y轴位置加一

color on = color(255); // 设定状态 on 为白色

color off = color(0); // 设定状态 off 为黑色

void setup() { // 入口函数初始化参数

size(1001, 501);

frameRate(8); // 设定较低的帧率

background(0); // 黑色背景

set(width/2, 0, on); // 设定初始状态

}

void draw() {

for (int i = 1; i < width - 1; i++) {

// 生成循环

int left = get(i - 1, gen - 1);

int me = get(i, gen - 1);

int right = get(i + 1, gen - 1);

// 规则生效

if (rules(left, me, right) == 1) {

set(i, gen, on);

}

}

gen++;

if (gen > height - 1) {

noLoop();

save("CA.png");

}

}

int rules (color a, color b, color c) {

// 规则

if ((a == on) && (b == on) && (c == on)) {return rules[0];}

else if ((a == on) && (b == on) && (c == off)) {return rules[1];}

else if ((a == on) && (b == off) && (c == on)) {return rules[2];}

else if ((a == on) && (b == off) && (c == off)) {return rules[3];}

else if ((a == off) && (b == on) && (c == on)) {return rules[4];}

else if ((a == off) && (b == on) && (c == off)) {return rules[5];}

else if ((a == off) && (b == off) && (c == on)) {return rules[6];}

else if ((a == off) && (b == off) && (c == off)) {return rules[7];}

return 0;

}

二维细胞自动机

二维细胞自动机

需要gif相关的库——gifAnimation。

import gifAnimation.*;

GifMaker gifExport; // 声明对象

int [][] grid, futureGrid;

void setup() {

size(940, 500);

frameRate(8);

grid = new int [width][height]; // 目前的图像像素数组

futureGrid = new int [width][height]; // 下一刻状态数组

// 设定初始状态

float density = 0.3 * width * height;

for (int i = 0; i < density; i++) {

grid[int(random(width))][int(random(height))] = 1;

}

background(0);

// 设定gif导出相关参数

gifExport = new GifMaker(this, "2D_CA.gif");

gifExport.setRepeat(0); // make it an "endless" animation

gifExport.setTransparent(0,0,0); // black is transparent

}

void draw() {

for (int x = 1; x < width - 1; x++) {

for (int y = 1; y < height - 1; y++) {

// “活着的”相邻细胞数目

int nb = neighbors(x, y);

if ((grid[x][y] == 1) && (nb < 2)) {

futureGrid[x][y] = 0;

set(x, y, color(0));

} else if ((grid[x][y] == 1) && (nb > 3)) {

futureGrid[x][y] = 0;

set(x, y, color(0));

} else if ((grid[x][y] == 0) && (nb == 3)) {

futureGrid[x][y] = 1;

set(x, y, color(255));

} else {

futureGrid[x][y] = grid[x][y];

}

}

}

int [][] temp = grid;

grid = futureGrid;

futureGrid = temp;

gifExport.setDelay(1);

gifExport.addFrame();

}

// 统计“活着的”相邻细胞数目

//int neighbors (int x, int y) {

// return grid[x][y-1] +

// grid[x+1][y-1] +

// grid[x+1][y] +

// grid[x+1][y+1] +

// grid[x][y+1] +

// grid[x-1][y+1] +

// grid[x-1][y] +

// grid[x-1][y-1];

//}

// 改进的neighbors()

int neighbors (int x, int y) {

int north = (y + height - 1) % height;

int south = (y + 1) % height;

int east = (x + 1) % width;

int west = (x + width - 1) % width;

return grid[x][north] +

grid[east][north] +

grid[east][y] +

grid[east][south] +

grid[x][south] +

grid[west][south] +

grid[west][y] +

grid[west][north];

}

void mousePressed() {

gifExport.finish(); // write file

noLoop();

}

细胞自动机 c语言程序,Processing精彩例程之细胞自动机相关推荐

  1. c语言文件发送程序,C语言程序例程的文件结构

    以往写C语言程序都是一个文件里面写个几十.几百行,在练算法的时候还可以,现在搞开发需要模块化编程,所谓模块化编程,就是指一个程序包含多个源文件(.c 文件和 .h 文件),每个 .c 文件可以被称为一 ...

  2. 松翰松翰c语言编程指导,松翰C程序检单例程代码下载

    标签: 松翰C程序检单例程 #include "define.h" #include "sn8p2501b.h" //--------------------- ...

  3. stm8程序无法写入c语言,[转载]STM8 PWM例程

    STM8--PWM 在单片机应用系统中,也常常会用到PWM 信号输出,例如电机转速的控制.现在很多高档的单片机 也都集成了PWM 功能模块,方便用户的应用. 对于PWM 信号,主要涉及到两个概念,一个 ...

  4. at89c52串口通信c语言程序,AT89C52DEMO 基于51单片机的(89C51/52)C语言源码例程 - 下载 - 搜珍网...

    例程与源码/12864带字库测试程序/12864 例程与源码/12864带字库测试程序/12864.hex 例程与源码/12864带字库测试程序/12864.lnp 例程与源码/12864带字库测试程 ...

  5. c语言程序设计基础程序改错,c程序设计程序改错题_相关文章专题_写写帮文库...

    时间:2019-05-15 04:59:44 作者:admin 第二十一套 2.1 DO cya WITH r,h,carea改为:carea=cya(r,h,carea) PROCEDURE cya ...

  6. python语言程序设计2019版第二章课后答案-python语言程序设计基础(嵩天)第二章课后习题...

    **第二学期第一周学习总结 一. 本周学习内容总结 一维数组,了解了一维数组的定义(定义一个数组,需要明确数组变量名,数组元素的类型和数组大小,即数组中元素的数量) 一维数组定义的一般形式为:类型名, ...

  7. c语言程序改错例题,C语言程序改错习题

    C语言程序改错习题 行动是通向成功的唯一途径.以下是小编为大家搜索整理的C语言程序改错习题,希望能给大家带来帮助!更多精彩内容请及时关注我们应届毕业生考试网! 在考生文件夹下,给定程序MODI.C的功 ...

  8. c语言程序40例,C语言程序讲解40例.pdf

    实用标准文案 C 语言程序讲解 40 例 [程序 1] 题目:有 1.2.3.4 个数字, 能组成多少个互不相同且无重复数字的三位数?都是多少? 1. 程序分析:可填在百位.十位.个位的数字都是 1. ...

  9. c语言课后作业答案指针,C语言程序基础练习题带答案

    C语言程序基础练习题带答案 C语言传递参数均是以值传递(pass by value),另外也可以传递指针(a pointer passed by value).下面是小编为大家搜索整理的C语言专项训练 ...

最新文章

  1. pytorch模型参数信息 计算模型的FLOPs
  2. 解析java匿名内部类
  3. java 时间轮算法_时间轮算法(TimingWheel)是如何实现的?
  4. 学习SAP项目成功实施的十大条件
  5. 努比亚z17s刷原生安卓_电脑运行手机APP,不会没关系,我推荐你使用显卡服务器运行安卓模拟器...
  6. 【Android】Android6.0发送短信Demo
  7. MFC之CString与const char* string 转换
  8. request 获取url
  9. [leetcode]169. 多数元素
  10. Scrapy中的Spider
  11. [原创]测试用例设计策略
  12. linux下设置好环境变量要重启计算机
  13. ubuntu上安装 ibus Google拼音输入法解决中文输入问题
  14. AP 微积分 第12版 第4章参考答案
  15. TCP/IP协议五:HTTP协议详解
  16. js执行oracle函数吗,执行javascript函数
  17. Corsiniの时光漏
  18. 用KDL在C++中控制UR5机器人的TCP位置——逆向运动学解释
  19. easyExcel实现单sheet多子表,并结合动态表头,复杂表头
  20. webpack配置静态资源

热门文章

  1. python session模块_Python requests模块session代码实例
  2. matlab 结构(struct)数组,matlab 结构(struct)数组
  3. 广告主成本怎么又超了!
  4. 1-概述程序构成基本元素
  5. Leetcode每日一题:175.组合两个表
  6. TensorFlow2.0:张量限幅
  7. html5 刷子,简单聊聊眼部刷子吧(打底刷、上色刷、晕染刷)
  8. spss正态性检验_SPSS和R中的正态分布的确定和几何均值的计算
  9. c++ 遍历list_小白学PyTorch | 6 模型的构建访问遍历存储(附代码
  10. 电脑功耗测试软件_进步超乎你想象!寻找移动处理器中的 最强性能 与 最低功耗...