细胞自动机 c语言程序,Processing精彩例程之细胞自动机
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精彩例程之细胞自动机相关推荐
- c语言文件发送程序,C语言程序例程的文件结构
以往写C语言程序都是一个文件里面写个几十.几百行,在练算法的时候还可以,现在搞开发需要模块化编程,所谓模块化编程,就是指一个程序包含多个源文件(.c 文件和 .h 文件),每个 .c 文件可以被称为一 ...
- 松翰松翰c语言编程指导,松翰C程序检单例程代码下载
标签: 松翰C程序检单例程 #include "define.h" #include "sn8p2501b.h" //--------------------- ...
- stm8程序无法写入c语言,[转载]STM8 PWM例程
STM8--PWM 在单片机应用系统中,也常常会用到PWM 信号输出,例如电机转速的控制.现在很多高档的单片机 也都集成了PWM 功能模块,方便用户的应用. 对于PWM 信号,主要涉及到两个概念,一个 ...
- at89c52串口通信c语言程序,AT89C52DEMO 基于51单片机的(89C51/52)C语言源码例程 - 下载 - 搜珍网...
例程与源码/12864带字库测试程序/12864 例程与源码/12864带字库测试程序/12864.hex 例程与源码/12864带字库测试程序/12864.lnp 例程与源码/12864带字库测试程 ...
- c语言程序设计基础程序改错,c程序设计程序改错题_相关文章专题_写写帮文库...
时间:2019-05-15 04:59:44 作者:admin 第二十一套 2.1 DO cya WITH r,h,carea改为:carea=cya(r,h,carea) PROCEDURE cya ...
- python语言程序设计2019版第二章课后答案-python语言程序设计基础(嵩天)第二章课后习题...
**第二学期第一周学习总结 一. 本周学习内容总结 一维数组,了解了一维数组的定义(定义一个数组,需要明确数组变量名,数组元素的类型和数组大小,即数组中元素的数量) 一维数组定义的一般形式为:类型名, ...
- c语言程序改错例题,C语言程序改错习题
C语言程序改错习题 行动是通向成功的唯一途径.以下是小编为大家搜索整理的C语言程序改错习题,希望能给大家带来帮助!更多精彩内容请及时关注我们应届毕业生考试网! 在考生文件夹下,给定程序MODI.C的功 ...
- c语言程序40例,C语言程序讲解40例.pdf
实用标准文案 C 语言程序讲解 40 例 [程序 1] 题目:有 1.2.3.4 个数字, 能组成多少个互不相同且无重复数字的三位数?都是多少? 1. 程序分析:可填在百位.十位.个位的数字都是 1. ...
- c语言课后作业答案指针,C语言程序基础练习题带答案
C语言程序基础练习题带答案 C语言传递参数均是以值传递(pass by value),另外也可以传递指针(a pointer passed by value).下面是小编为大家搜索整理的C语言专项训练 ...
最新文章
- pytorch模型参数信息 计算模型的FLOPs
- 解析java匿名内部类
- java 时间轮算法_时间轮算法(TimingWheel)是如何实现的?
- 学习SAP项目成功实施的十大条件
- 努比亚z17s刷原生安卓_电脑运行手机APP,不会没关系,我推荐你使用显卡服务器运行安卓模拟器...
- 【Android】Android6.0发送短信Demo
- MFC之CString与const char* string 转换
- request 获取url
- [leetcode]169. 多数元素
- Scrapy中的Spider
- [原创]测试用例设计策略
- linux下设置好环境变量要重启计算机
- ubuntu上安装 ibus Google拼音输入法解决中文输入问题
- AP 微积分 第12版 第4章参考答案
- TCP/IP协议五:HTTP协议详解
- js执行oracle函数吗,执行javascript函数
- Corsiniの时光漏
- 用KDL在C++中控制UR5机器人的TCP位置——逆向运动学解释
- easyExcel实现单sheet多子表,并结合动态表头,复杂表头
- webpack配置静态资源
热门文章
- python session模块_Python requests模块session代码实例
- matlab 结构(struct)数组,matlab 结构(struct)数组
- 广告主成本怎么又超了!
- 1-概述程序构成基本元素
- Leetcode每日一题:175.组合两个表
- TensorFlow2.0:张量限幅
- html5 刷子,简单聊聊眼部刷子吧(打底刷、上色刷、晕染刷)
- spss正态性检验_SPSS和R中的正态分布的确定和几何均值的计算
- c++ 遍历list_小白学PyTorch | 6 模型的构建访问遍历存储(附代码
- 电脑功耗测试软件_进步超乎你想象!寻找移动处理器中的 最强性能 与 最低功耗...