xxxxxxxxxx
104
var points = [];
var EPSILON = 0.001;
var density = 100;
var mult
function preload(){
img = loadImage('kathak.png');
}
function setup() {
createCanvas(1000, 1000);
img.resize(canvas.width/1.1/1.8, canvas.height/1.1/1.8);
pg = createGraphics(1000, 1000);
pg.image(img, 0, 0);
pg.filter(BLUR, 10);
img = pg;
image(img, 0, 0);
background(10);
angleMode(DEGREES)
noiseDetail(1)
var space = width /density;
for (var x=0; x<width; x+= space){
for (var y=0; y<height; y+= space){
var particle = new Object();
particle.pos = createVector(x + random(-10,10), y + random(-10,10));
particle.vel = createVector(random(-3, 3), random(-3, 3));
particle.speed = random(-1, 1)>0?2:-2;
particle.size = random(1, 5);
particle.col = color(img.get(particle.pos.x, particle.pos.y));
points.push(particle);
}
}
mult = random(0.002, 0.01)
}
function curl(x, y){
var n1 = brightness(color(img.get(x + 1, y)));
var n2 = brightness(color(img.get(x - 1, y)));
var a = (n1 - n2)/(2 * EPSILON);
n1 = brightness(color(img.get(x, y + 1)));
n2 = brightness(color(img.get(x, y - 1)));
var b = (n1 - n2)/(2 * EPSILON);
return new createVector(b, -a);
}
function draw() {
fill(0, 4);
rect(0, 0, width, height);
noStroke()
for(var i=0; i<points.length; i++){
var p = points[i];
var c = color(img.get(p.pos.x, p.pos.y));
var r = red(c); //map(points[i].x, 0, width, r1, r2)
var g = green(c); //map(points[i].y, 0, height, g1, g2)
var b = blue(c); //map(points[i].y, 0, width, b1, b2)
var a = map(dist(width /2, height /2, p.pos.x, p.pos.y), 0, 380, 255, 0)
var pc = p.col;
var pr = red(pc)/255.0;
var pg = green(pc)/255.0;
var pb = blue(pc)/255.0;
var pa = alpha(pc)/255.0;
var cvec = curl(p.pos.x,p.pos.y);
var cvecMag = cvec.mag();
var vec = cvec.normalize();
if(!mouseIsPressed){
p.color = color(r,g,b, a*pa);
p.col = c;
if(cvecMag > 500){
p.vel = (vec)
}
else{
var angle = map(noise(p.pos.x * mult, p.pos.y * mult),0,1, 0, 720)
p.vel = (createVector(cos(angle)*p.speed, sin(angle)*p.speed))
}
}
p.pos.add(p.vel);
if (dist(width/2, height/2, p.pos.x, p.pos.y) < 800){
fill(p.col);
ellipse(p.pos.x, p.pos.y, p.size*brightness(c)/255.0*4);
}
if(random(1000)<1){
}
}
}