1次元セルオートマトン
提供:kuhalaboWiki
(版間での差分)
1行: | 1行: | ||
− | + | == Wolframのセルオートマトン == | |
シェルピンスキーのガスケットの描画 | シェルピンスキーのガスケットの描画 | ||
6行: | 6行: | ||
#include "ofApp.h" | #include "ofApp.h" | ||
− | static const int NUM = | + | static const int NUM = 256; //セルの個数 |
int cell[NUM][NUM]; | int cell[NUM][NUM]; | ||
17行: | 17行: | ||
} | } | ||
cell[NUM/2][0] = 1; | cell[NUM/2][0] = 1; | ||
+ | } | ||
+ | //-------------------------------------------------------------- | ||
+ | void ofApp::update(){ | ||
//状態遷移則 1つ前と1つ後の値を足した値の1桁目(2進法の足し算 XOR) | //状態遷移則 1つ前と1つ後の値を足した値の1桁目(2進法の足し算 XOR) | ||
for(int j = 1; j < NUM; j++){ | for(int j = 1; j < NUM; j++){ | ||
− | for(int i = | + | for(int i = 0; i < NUM; i++){ |
− | cell[i][j] = ( cell[ | + | int i1 = (i - 1 + NUM ) % NUM; |
+ | int i2 = (i + 1 + NUM ) % NUM; | ||
+ | cell[i][j] = ( cell[i1][j-1] + cell[i2][j-1] ) % 2; | ||
} | } | ||
} | } | ||
28行: | 33行: | ||
//-------------------------------------------------------------- | //-------------------------------------------------------------- | ||
void ofApp::draw(){ | void ofApp::draw(){ | ||
− | int w = | + | int w = 4; //セルの描画幅 |
for(int i = 0; i < NUM; i++){ | for(int i = 0; i < NUM; i++){ | ||
for(int j = 0; j < NUM; j++){ | for(int j = 0; j < NUM; j++){ |
2017年11月6日 (月) 11:37時点における版
Wolframのセルオートマトン
シェルピンスキーのガスケットの描画
#include "ofApp.h" static const int NUM = 256; //セルの個数 int cell[NUM][NUM]; //-------------------------------------------------------------- void ofApp::setup(){ //初期状態は真ん中だけが 1 で残りはすべて 0 for(int i = 0; i < NUM; i++){ cell[i][0] = 0; } cell[NUM/2][0] = 1; } //-------------------------------------------------------------- void ofApp::update(){ //状態遷移則 1つ前と1つ後の値を足した値の1桁目(2進法の足し算 XOR) for(int j = 1; j < NUM; j++){ for(int i = 0; i < NUM; i++){ int i1 = (i - 1 + NUM ) % NUM; int i2 = (i + 1 + NUM ) % NUM; cell[i][j] = ( cell[i1][j-1] + cell[i2][j-1] ) % 2; } } } //-------------------------------------------------------------- void ofApp::draw(){ int w = 4; //セルの描画幅 for(int i = 0; i < NUM; i++){ for(int j = 0; j < NUM; j++){ if( cell[i][j] > 0 ) ofSetColor(255,0,0); //セルが 1 の時の描画色 else ofSetColor(0,0,0); //セルが 0 の時の描画色 ofRect(i * w, j * w , w , w ); } } }