Close
Sign in to view the code!
Sign in to send to cube!
Average Automaton
Created by michi on August 31, 2016
Twitter
Facebook
Creates fancy colors by taking the average of the neighboured voxels.
Comments:
noahbreslow
said
love it
Walter
said
super schön, gefällt mir :-))
reubidium
said
this is absolutely beautiful
reubidium
said
this is absolutely beautiful
Up next
Sound Balloon
Update Demo
Sign up, make your own!
#define modNumber 9 Cube cube = Cube(); int voxelRed[9][9][9], voxelGreen[9][9][9], voxelBlue[9][9][9]; int newVoxelRed[9][9][9], newVoxelGreen[9][9][9], newVoxelBlue[9][9][9]; Color voxel[9][9][9]; void average(int x, int y, int z) { newVoxelRed[x][y][z] = ((voxelRed[(x-1)%modNumber][(y)%modNumber][(z)%modNumber] + voxelRed[(x)%modNumber][(y)%modNumber][(z+1)%modNumber] + voxelRed[(x)%modNumber][(y)%modNumber][(z-1)%modNumber] + voxelRed[(x)%modNumber][(y+1)%modNumber][(z)%modNumber] + voxelRed[(x)%modNumber][(y+1)%modNumber][(z+1)%modNumber] + voxelRed[(x)%modNumber][(y+1)%modNumber][(z-1)%modNumber] + voxelRed[(x)%modNumber][(y-1)%modNumber][(z)%modNumber] + voxelRed[(x)%modNumber][(y-1)%modNumber][(z+1)%modNumber] + voxelRed[(x)%modNumber][(y-1)%modNumber][(z-1)%modNumber] + voxelRed[(x+1)%modNumber][(y)%modNumber][(z)%modNumber] + voxelRed[(x+1)%modNumber][(y)%modNumber][(z+1)%modNumber] + voxelRed[(x+1)%modNumber][(y)%modNumber][(z-1)%modNumber] + voxelRed[(x+1)%modNumber][(y+1)%modNumber][(z)%modNumber] + voxelRed[(x+1)%modNumber][(y+1)%modNumber][(z+1)%modNumber] + voxelRed[(x+1)%modNumber][(y+1)%modNumber][(z-1)%modNumber] + voxelRed[(x+1)%modNumber][(y-1)%modNumber][(z)%modNumber] + voxelRed[(x+1)%modNumber][(y-1)%modNumber][(z+1)%modNumber] + voxelRed[(x+1)%modNumber][(y-1)%modNumber][(z-1)%modNumber] + voxelRed[(x-1)%modNumber][(y)%modNumber][(z+1)%modNumber] + voxelRed[(x-1)%modNumber][(y)%modNumber][(z-1)%modNumber] + voxelRed[(x-1)%modNumber][(y+1)%modNumber][(z)%modNumber] + voxelRed[(x-1)%modNumber][(y+1)%modNumber][(z+1)%modNumber] + voxelRed[(x-1)%modNumber][(y+1)%modNumber][(z-1)%modNumber] + voxelRed[(x-1)%modNumber][(y-1)%modNumber][(z)%modNumber] + voxelRed[(x-1)%modNumber][(y-1)%modNumber][(z+1)%modNumber] + voxelRed[(x-1)%modNumber][(y-1)%modNumber][(z-1)%modNumber] ) / 26 + voxelRed[x][y][z])/2; newVoxelGreen[x][y][z] = ((voxelGreen[(x-1)%modNumber][(y)%modNumber][(z)%modNumber] + voxelGreen[(x)%modNumber][(y)%modNumber][(z+1)%modNumber] + voxelGreen[(x)%modNumber][(y)%modNumber][(z-1)%modNumber] + voxelGreen[(x)%modNumber][(y+1)%modNumber][(z)%modNumber] + voxelGreen[(x)%modNumber][(y+1)%modNumber][(z+1)%modNumber] + voxelGreen[(x)%modNumber][(y+1)%modNumber][(z-1)%modNumber] + voxelGreen[(x)%modNumber][(y-1)%modNumber][(z)%modNumber] + voxelGreen[(x)%modNumber][(y-1)%modNumber][(z+1)%modNumber] + voxelGreen[(x)%modNumber][(y-1)%modNumber][(z-1)%modNumber] + voxelGreen[(x+1)%modNumber][(y)%modNumber][(z)%modNumber] + voxelGreen[(x+1)%modNumber][(y)%modNumber][(z+1)%modNumber] + voxelGreen[(x+1)%modNumber][(y)%modNumber][(z-1)%modNumber] + voxelGreen[(x+1)%modNumber][(y+1)%modNumber][(z)%modNumber] + voxelGreen[(x+1)%modNumber][(y+1)%modNumber][(z+1)%modNumber] + voxelGreen[(x+1)%modNumber][(y+1)%modNumber][(z-1)%modNumber] + voxelGreen[(x+1)%modNumber][(y-1)%modNumber][(z)%modNumber] + voxelGreen[(x+1)%modNumber][(y-1)%modNumber][(z+1)%modNumber] + voxelGreen[(x+1)%modNumber][(y-1)%modNumber][(z-1)%modNumber] + voxelGreen[(x-1)%modNumber][(y)%modNumber][(z+1)%modNumber] + voxelGreen[(x-1)%modNumber][(y)%modNumber][(z-1)%modNumber] + voxelGreen[(x-1)%modNumber][(y+1)%modNumber][(z)%modNumber] + voxelGreen[(x-1)%modNumber][(y+1)%modNumber][(z+1)%modNumber] + voxelGreen[(x-1)%modNumber][(y+1)%modNumber][(z-1)%modNumber] + voxelGreen[(x-1)%modNumber][(y-1)%modNumber][(z)%modNumber] + voxelGreen[(x-1)%modNumber][(y-1)%modNumber][(z+1)%modNumber] + voxelGreen[(x-1)%modNumber][(y-1)%modNumber][(z-1)%modNumber] ) / 26 + voxelGreen[x][y][z])/2; newVoxelBlue[x][y][z] = ((voxelBlue[(x-1)%modNumber][(y)%modNumber][(z)%modNumber] + voxelBlue[(x)%modNumber][(y)%modNumber][(z+1)%modNumber] + voxelBlue[(x)%modNumber][(y)%modNumber][(z-1)%modNumber] + voxelBlue[(x)%modNumber][(y+1)%modNumber][(z)%modNumber] + voxelBlue[(x)%modNumber][(y+1)%modNumber][(z+1)%modNumber] + voxelBlue[(x)%modNumber][(y+1)%modNumber][(z-1)%modNumber] + voxelBlue[(x)%modNumber][(y-1)%modNumber][(z)%modNumber] + voxelBlue[(x)%modNumber][(y-1)%modNumber][(z+1)%modNumber] + voxelBlue[(x)%modNumber][(y-1)%modNumber][(z-1)%modNumber] + voxelBlue[(x+1)%modNumber][(y)%modNumber][(z)%modNumber] + voxelBlue[(x+1)%modNumber][(y)%modNumber][(z+1)%modNumber] + voxelBlue[(x+1)%modNumber][(y)%modNumber][(z-1)%modNumber] + voxelBlue[(x+1)%modNumber][(y+1)%modNumber][(z)%modNumber] + voxelBlue[(x+1)%modNumber][(y+1)%modNumber][(z+1)%modNumber] + voxelBlue[(x+1)%modNumber][(y+1)%modNumber][(z-1)%modNumber] + voxelBlue[(x+1)%modNumber][(y-1)%modNumber][(z)%modNumber] + voxelBlue[(x+1)%modNumber][(y-1)%modNumber][(z+1)%modNumber] + voxelBlue[(x+1)%modNumber][(y-1)%modNumber][(z-1)%modNumber] + voxelBlue[(x-1)%modNumber][(y)%modNumber][(z+1)%modNumber] + voxelBlue[(x-1)%modNumber][(y)%modNumber][(z-1)%modNumber] + voxelBlue[(x-1)%modNumber][(y+1)%modNumber][(z)%modNumber] + voxelBlue[(x-1)%modNumber][(y+1)%modNumber][(z+1)%modNumber] + voxelBlue[(x-1)%modNumber][(y+1)%modNumber][(z-1)%modNumber] + voxelBlue[(x-1)%modNumber][(y-1)%modNumber][(z)%modNumber] + voxelBlue[(x-1)%modNumber][(y-1)%modNumber][(z+1)%modNumber] + voxelBlue[(x-1)%modNumber][(y-1)%modNumber][(z-1)%modNumber] ) / 26 + voxelBlue[x][y][z])/2; voxel[x][y][z] = Color(newVoxelRed[x][y][z],newVoxelGreen[x][y][z],newVoxelBlue[x][y][z]); return; } void randDot() { int i = random(0,8), j = random(0,8), k = random(0,8); voxelRed[i][j][k]=random(0,125); voxelGreen[i][j][k]=random(0,125); voxelBlue[i][j][k]=random(0,125); voxel[i][j][k]=Color(voxelRed[i][j][k],voxelGreen[i][j][k],voxelBlue[i][j][k]); return; } void blackDot() { int i = random(0,8), j = random(0,8), k = random(0,8); voxelRed[i][j][k]=0; voxelGreen[i][j][k]=0; voxelBlue[i][j][k]=0; voxel[i][j][k]=Color(voxelRed[i][j][k],voxelGreen[i][j][k],voxelBlue[i][j][k]); return; } void update() { for(int i=1; i<9; i++) { for(int j=1; j<9; j++) { for(int k=1; k<9; k++) { voxelRed[i][j][k] = newVoxelRed[i][j][k]; voxelGreen[i][j][k] = newVoxelGreen[i][j][k]; voxelBlue[i][j][k] = newVoxelBlue[i][j][k]; } } } } void setup() { cube.begin(); for(int i=0; i<cube.size; i++) { for(int j=0; j<cube.size; j++) { for(int k=0; k<cube.size; k++) { voxel[i][j][k] = Color(0,0,0); voxelRed[i][j][k] = 0; voxelGreen[i][j][k] = 0; voxelBlue[i][j][k] = 0; cube.setVoxel(i,j,k,voxel[i][j][k]); } } } cube.show(); } void loop() { for(int i=1; i<9; i++) { for(int j=1; j<9; j++) { for(int k=1; k<9; k++) { average(i,j,k); cube.setVoxel(i-1,j-1,k-1,voxel[i][j][k]); } } } update(); cube.show(); delay(20); randDot(); blackDot(); blackDot(); blackDot(); blackDot(); blackDot(); }
love it
super schön, gefällt mir :-))
this is absolutely beautiful
this is absolutely beautiful