Skip to content

Instantly share code, notes, and snippets.

@fjenett
Created March 31, 2010 07:01
Show Gist options
  • Save fjenett/350028 to your computer and use it in GitHub Desktop.
Save fjenett/350028 to your computer and use it in GitHub Desktop.
Simple pixel tracer
// simple-trace pixel-images
//
int w2,h2;
int[] values;
int[][] pairs;
void setup ()
{
size( 200, 200 );
w2 = width/10;
h2 = height/10;
values = new int[w2*h2];
pairs = new int[values.length][];
for ( int i =0; i<values.length; i++ )
{
values[i] = random(1000) > 500 ? 1 : 0;
pairs[i] = new int[]{
-1,-1,-1,-1 };
}
}
void draw()
{
noStroke();
for ( int i = 0; i< values.length; i++ )
{
fill( values[i] == 0 ? 0xFF000000 : 0xFFFFFFFF );
int y = i/w2;
int x = i - (y*w2);
rect( x*10, y*10, 10, 10 );
if ( values[i] == 0 )
{
int iRight = i+1;
boolean r = false;
if ( x < w2-1 && values[i] == values[iRight] )
{
pairs[i][1] = iRight;
r = true;
}
if ( y < h2-1 )
{
boolean rb = false;
int iRightBelow = iRight + w2;
if ( x < w2-1 && values[i] == values[iRightBelow] )
{
rb = true;
pairs[i][2] = iRightBelow;
}
int iBelow = i + w2;
if ( values[i] == values[iBelow] )
{
pairs[i][3] = iBelow;
}
int iBelowLeft = iBelow-1;
if ( x != 0 && pairs[i-1][2] != iBelow && values[i] == values[iBelowLeft] )
{
pairs[i][0] = iBelowLeft;
}
}
}
}
noFill();
stroke(0xFF00FF00);
for ( int i = 0; i< pairs.length; i++ )
{
if ( pairs[i][0] != -1 ) drawLine( i, pairs[i][0] );
if ( pairs[i][1] != -1 ) drawLine( i, pairs[i][1] );
if ( pairs[i][2] != -1 ) drawLine( i, pairs[i][2] );
if ( pairs[i][3] != -1 ) drawLine( i, pairs[i][3] );
}
}
void drawLine ( int i1, int i2 )
{
int y1 = i1/w2;
int x1 = i1 - (y1*w2);
int y2 = i2/w2;
int x2 = i2 - (y2*w2);
line( x1*10+5, y1*10+5, x2*10+5, y2*10+5 );
}
void keyPressed ()
{
switch ( key )
{
case '1':
values = new int[w2*h2];
pairs = new int[values.length][];
for ( int i =0; i<values.length; i++ )
{
values[i] = random(1000) > 500 ? 1 : 0;
pairs[i] = new int[]{
-1,-1,-1,-1 };
}
break;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment