1次元セルオートマトン

提供:kuhalaboWiki
(版間での差分)
移動: 案内, 検索
1行: 1行:
;Wolframのセルオートマトン
+
== Wolframのセルオートマトン ==
  
 
シェルピンスキーのガスケットの描画
 
シェルピンスキーのガスケットの描画
6行: 6行:
 
#include "ofApp.h"
 
#include "ofApp.h"
  
static const int NUM = 100; //セルの個数
+
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 = 1; i < NUM-1; i++){
+
for(int i = 0; i < NUM; i++){
cell[i][j] = ( cell[i-1][j-1] + cell[i+1][j-1] ) % 2;
+
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 = 5; //セルの描画幅
+
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 ); 
		}
	}
}


参考

ジェネラティブアート論

個人用ツール
名前空間

変種
操作
案内
ツールボックス