Casey Andrea REAS

Imágenes autogenerativas creadas a partir de los comportamientos de Case Reas y las tonalidades de Andrea Chauvet Almazán.

This slideshow requires JavaScript.

****CÓDIGO*****

PROCESSING 2.2.1

****CÓDIGO principal

Imagenes imag;
float tamano;
int cambio = 1;
int contador;

Lineas linea[]; //creo objeto tipo Lineas
int cant_lineas = 400;

void setup() {
size(900, 600);
strokeWeight(2);
background(255);
frameRate(30);
imag = new Imagenes ();
smooth();
//constructor de objetos dependiendo de la cant_lineas
linea = new Lineas [cant_lineas];
for (int i=0; i<cant_lineas; i++) {
linea[i] = new Lineas();
}
}

void draw() {
//background(255, 90);

tamano = 5;
if (frameCount % 40 == 0) {
imag.esteColor();
}

for (int i=0; i<cant_lineas; i++) {
linea[i].actualiza();
//linea[i].dibuja(imag);
boolean tocada = false;
for (int j=i+1; j<cant_lineas; j++) {
if (linea[i].toca_linea(linea[j]) == true) {
linea[i].dibuja(imag);
linea[i].mira_linea(linea[j]);
tocada = true;
}
}
if (tocada) {
linea[i].alpha-=1;
if (linea[i].alpha <= 0)
linea[i].alpha = 0;
} else {
linea[i].alpha+=1;
if (linea[i].alpha >= 255)
linea[i].alpha = 255;
}
}
}

****FUNCIÓN imágenes

class Imagenes {

PImage imagen;
color esteColor;

Imagenes () {
imagen = loadImage ( “7.jpg”);
imageMode(CENTER);
}

//MÉTODO COLOR_FILL
void esteColor() {
int x = int ( random (imagen.width) );
int y = int ( random (imagen.height) );
esteColor = imagen.get( x, y ) ;
}
}

****FUNCIÓN imágenes

/*
Process 18
A rectangular surface filled with instances of Element 5, each with a different size and gray value. Draw a quadrilateral connecting the endpoints of each pair of Elements that are touching. Increase the opacity of the quadrilateral while the Elements are touching and decrease while they are not.
Element 5:
Form 2: Line
Behavior 1: Move in a straight line
Behavior 5: Enter from the opposite edge after moving off the surface
Behavior 6: Orient toward the direction of an Element that is touching
Behavior 7: Deviate from the current direction

Basado en:

*/

class Lineas { //creo la clase Lineas

//ATRIBUTOS
float x;
float y;
float x2;
float y2;
float tam_linea;
float direccion;
float dx;
float dy;
float vel;
float desviacion;
color c, esteColor;
int alpha;

//CONSTRUCTOR
Lineas() {
tam_linea = random(5, 70);
x = random(width);
y = random(height);
x2 = x + tam_linea;
y2 = y + tam_linea;
c = esteColor;
direccion = random(-PI, PI);
vel = 0.005;
desviacion = 0.000003;
//alpha = 1;
}

////MÉTODOS//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//MÉTODO ACTUALIZA//
void actualiza() {

// Desviar direccion: B7
direccion = random(direccion – desviacion, direccion + desviacion);
// Mantengo la direccion siempre dentro del rango [-PI,PI]
if (direccion < -PI) {
direccion += TWO_PI;
}
if (direccion > PI) {
direccion -= TWO_PI;
}

//Actualizo posición: B1
dx = vel * cos(direccion);
x = x + dx;
dy = vel * sin(direccion);
y = y + dy;

//Calculo la longitud en X y Y de la linea
float lx = tam_linea * cos(direccion);
float ly = tam_linea * sin(direccion);

//Creo límites: B5
if (x – lx < 0 && abs(direccion) > HALF_PI) { // hacia la izquierda
x = width;
}
if (x – lx > width && abs(direccion) < HALF_PI) { // hacia la derecha
x = 0;
}
if (y – ly < 0 && direccion < 0) { // hacia arriba
y = height;
}
if (y – ly > height && direccion > 0) { // hacia abajo
y = 0;
}

// Actualizo la posicion de la cola de la linea
x2 = x – lx;
y2 = y – ly;
}

//MÉTODO DIBUJA//
void dibuja(Imagenes _imag) {
c = _imag.esteColor;
}

//TOCA LÍNEA//
boolean toca_linea(Lineas _linea) {
float p0_x=x;
float p0_y=y;
float p1_x=x2;
float p1_y=y2;

float p2_x=_linea.x;
float p2_y=_linea.y;
float p3_x=_linea.x2;
float p3_y=_linea.y2;

float s1_x, s1_y, s2_x, s2_y;

s1_x = p1_x – p0_x;
s1_y = p1_y – p0_y;
s2_x = p3_x – p2_x;
s2_y = p3_y – p2_y;

float s, t;
s = (-s1_y * (p0_x – p2_x) + s1_x * (p0_y – p2_y)) / (-s2_x * s1_y + s1_x * s2_y);
t = ( s2_x * (p0_y – p2_y) – s2_y * (p0_x – p2_x)) / (-s2_x * s1_y + s1_x * s2_y);

if (s >= 0 && s <= 1 && t >= 0 && t <= 1) {
noStroke();
fill(c, alpha);
quad(p0_x, p0_y, p2_x, p2_y, p3_x, p3_y, p1_x, p1_y); //Dibujo cuadrilátero
return true;
} else {
return false;
}
}

//MÉTODO MIRA LÍNEA//
void mira_linea(Lineas _linea) {
float MAGNETISMO = 0.01;
if (abs(direccion – _linea.direccion) < PI) {
if (direccion < _linea.direccion) {
direccion += MAGNETISMO;
_linea.direccion -= MAGNETISMO;
} else {
direccion -= MAGNETISMO;
_linea.direccion += MAGNETISMO;
}
} else {
if (direccion < _linea.direccion) {
direccion -= MAGNETISMO;
_linea.direccion += MAGNETISMO;
} else {
direccion += MAGNETISMO;
_linea.direccion -= MAGNETISMO;
}
}
}
}

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s