Last active
June 23, 2016 14:42
-
-
Save tsulej/4c2ab997dfaff879dff2 to your computer and use it in GitHub Desktop.
Study for processing collab: http://generateme.tumblr.com/post/101277336060/folds-vi-processing-collab-submissions
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
PGraphics g ; | |
void setup() { | |
size(500,500); | |
smooth(8); | |
noStroke(); | |
fill(0); | |
g = createGraphics(270,270); | |
g.beginDraw(); | |
g.background(255); | |
g.noStroke(); | |
g.smooth(8); | |
g.fill(0); | |
g.ellipse(135,135,250,250); | |
g.endDraw(); | |
g.loadPixels(); | |
} | |
final color bl = color(255); | |
float posx; | |
float rot; | |
void draw() { | |
background(255); | |
posx = constrain(map(mouseX,50,450,0,1),0,1); | |
rot = map(posx,0,1,0,TWO_PI); | |
posx = cosmap(posx); | |
for(int x=0;x<270;x++) { | |
for(int y=0;y<270;y++) { | |
color c = g.pixels[x+y*270]; | |
if(c != bl) { | |
drawme(x+0.33,y,50,150); | |
drawme(x-0.33,y,c,150); | |
drawme(x,y+0.33,50,150); | |
drawme(x,y-0.33,c,150); | |
drawme(x,y,c,0); | |
} | |
} | |
} | |
} | |
void drawme(float x,float y,color c, int alpha) { | |
float xx = map(x,0,270,-3,3); | |
float yy = map(y,0,270,-3,3); | |
PVector res = transform(new PVector(xx,yy),posx); | |
xx = map(res.x,-3,3,115,385); | |
yy = map(res.y,-3,3,115,385); | |
if(alpha >0) fill(c,alpha); else fill(c); | |
rect(xx,yy,1,1); | |
} | |
final float sgn(float a) { | |
if(a == 0.0) return 0.0; | |
return a > 0.0 ? 1.0 : -1.0; | |
} | |
PVector map1(PVector p) { | |
float newx = 3*sgn(p.x) * pow(abs(p.x),0.2513); | |
float newy = 3*sgn(p.y) * pow(abs(p.y),0.2513); | |
return new PVector(newx,newy); | |
} | |
PVector sinusoidal(PVector p) { | |
return new PVector(3.0*sin(p.x),3.0*sin(p.y)); | |
} | |
PVector julia(PVector p) { | |
float r = 1.75 * sqrt(p.mag()); | |
float theta = 0.5 * atan2(p.x,p.y) + (int)(2.0 * random(0,1)) * PI; | |
float x = r * cos(theta); | |
float y = r * sin(theta); | |
return new PVector(x,y); | |
} | |
PVector spherical(PVector p) { | |
float r =2.0 / (sq(p.x)+sq(p.y) + 1.0e-10); | |
return new PVector(r * p.x, r * p.y); | |
} | |
PVector transform(PVector p, float weight) { | |
PVector res = | |
julia(spherical(sinusoidal(map1(p)))); | |
return rotate(new PVector( map(weight,0,1,p.x,res.x), | |
map(weight,0,1,p.y,res.y)),rot); | |
} | |
PVector rotate(PVector p, float angle) { | |
float ca = cos(angle); | |
float sa = sin(angle); | |
return new PVector(ca * p.x - sa * p.y, sa * p.x + ca * p.y); | |
} | |
float cosmap(float time) { | |
return 0.5*(1 - cos(map(time,0,1,0,TWO_PI))); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment