//
// Supawat Vitoorapakorn
// Svitoora@andrew.cmu.edu
// Section E
// Petri Dish
// Create Node
function makeTurtle(tx, ty) {
var turtle = {
x: tx,
y: ty,
life_index: random(-.5, .5) //random seem for bug bheavior
};
return turtle;
}
var time = 1; // Time variable
var w = 480;
var h = 480;
var turtles = []
function setup() {
createCanvas(w, h);
background(255);
num_node = 15;
for (i = 0; i < num_node; i++) {
t = makeTurtle(random(0, w), random(0, h));
turtles.push(t);
}
}
// Ease turtles towards mouse
function turtle_move() {
speed = .045;
for (i in turtles) {
if (turtles[i].x < mouseX) {
dx = abs(turtles[i].x - mouseX)
turtles[i].x += dx * speed
} else {
dx = abs(turtles[i].x - mouseX)
turtles[i].x -= dx * speed
}
if (turtles[i].y < mouseY) {
dy = abs(turtles[i].y - mouseY)
turtles[i].y += dy * speed
} else {
dy = abs(turtles[i].y - mouseY)
turtles[i].y -= dy * speed
}
}
}
// Add Perlin noise to movement of turtle
function add_life() {
if (mouseIsPressed == false) {
SIZE = 10; //magnitude of noise movement add
} else {
SIZE = 30;
}
for (i in turtles) {
life = turtles[i].life_index
turtles[i].x += (noise(time * life) - .5) * SIZE;
turtles[i].y += (noise(time * life / 2) - .5) * SIZE;
}
}
// Draws membrane of turtles
function membrane() {
strokeWeight(1);
fill(0, 0, 0, 255 * .1);
beginShape(TRIANGLE_STRIP);
for (i in turtles) {
x = turtles[i].x
y = turtles[i].y
curveVertex(x, y);
}
endShape(CLOSE);
}
// Connect lines
function connect_lines() {
stroke(0, 0, 0, 255 * .25)
for (i in turtles) {
x_0 = turtles[i].x
y_0 = turtles[i].y
for (i in turtles) {
x_1 = turtles[i].x
y_1 = turtles[i].y
line(x_0, y_0, x_1, y_1);
}
}
}
function draw() {
time += .1;
background(255, 255, 255, 255 * .75);
turtle_move();
add_life()
for (i in turtles) {
fill(0, 0, 0, 255 * .75);
ellipse(turtles[i].x, turtles[i].y, 10, 10)
}
membrane();
connect_lines();
}
This is my first time playing with the noise() function and I absolutely love it! Try clicking and moving your mouse around the canvas. I wanted to create a digital petri dish inspired by seeing Euglena protist under the microscope: