Ejercicios Processing #1

Actualización: Teneis los ejercicios haciendo click aquí (día 1) y aquí (día 2)

De momento, y a falta de otros canales más eficientes, os pongo aquí el código de los ejercicios que hemos visto en las dos primeras clases de processing (27 de enero y 3 de febrero).

Martes 27 de enero

1. una elipse sigue al ratón y va cambiando de tamaño entre un valor mínimo y un máximo:

// Ceclec_01
// (c)avr – ene.2009
// Círculo latente vinculado al ratón

//———————————————————–
// Declaración de variables globales del programa
float dMin; // tamaño mínimo del círculo
float dMax; // tamaño máximo del círculo
float d; // tamaño ‘actual’ del círculo
boolean crecer; // indica si el círculo ha de aumentar o disminuir

//———————————————————–
// Inicialización de variables y parámetros globales
void setup() {
size(300, 300); // tamaño del sketch
smooth(); // activa el suavizado
stroke(0); // color del borde
fill(255); // color del relleno
dMin = 20; // diámetro mínimo en píxels
dMax = 200; // diámetro máximo en píxels
d = dMin; // inicializamos el tamaño del círculo
crecer = true; // empezamos creciendo
}

//———————————————————–
// Función principal, que genera la ‘evaluación contínua’
void draw() {
background(190); // fondo de pantalla de color gris
ellipse(mouseX, mouseY, d, d);
//
// comprobamos si el diámetro excede de los límites máximo y mínimo
// y cambiamos el valor de ‘crecer’ al llegar a dichos límites
if (d >= dMax) {
crecer = false;
} else if (d <= dMin) {
crecer = true;
}
//
// actualizamos el tamaño del círculo aumentando o disminuyendo
// según sea el valor de ‘crecer’
if (crecer == true) {
d += 3; // aumentar 3 píxels el diámetro
} else {
d -= 3; // reducir 3 píxels el diámetro
}
}

//———————————————————–

Martes 3 de febrero

1. array de puntos con distribución de densidad aleatoria

// Ceclec_02.a
// (c)avr – ene.2009
// Distribución aleatoria con variación de la densidad

//———————————————————–
// Declaración de variables globales del programa
float d; // diámetro de los puntos
float a; // tamaño de la celda

//———————————————————–
// Inicialización de variables y parámetros globales
void setup() {
size(800, 300); // tamaño de pantalla
smooth(); // activa el suavizado
d = 7; // puntos de 7 px.
a = 10; // centros separados 10 px.
noStroke(); // los puntos se dibujan sin borde
fill(226, 234, 12); // amarillo ácido (226, 234, 12) (#E2EA0C)
}

//———————————————————–
// Necesaria para que funcione mousePressed
void draw() {
}

//———————————————————–
// Al hacer clic con el ratón dibujamos una distribución aleatoria
void mousePressed() {
background(0);
for (float j=a/2; j<height; j += a) {
for (float i=a/2; i<width; i += a) {
// comparamos si un número aleatorio es mayor que la posición
// en altura como condición para dibujar el círculo:
// cuanto mayor sea j menos posibilidades hay de dibujarlo
float randomY = random(0, height);
if (randomY > j) {
ellipse(i, j, d, d);
}
}
}
}

//———————————————————–

2. el mismo ejercicio, pero con opciones para guardar la imagen como archivo tif

// Ceclec_02.b
// (c)avr – ene.2009
// Distribución aleatoria con variación de la densidad
// Permite grabar la imagen en un archivo tif pulsando la tecla ‘s’

//———————————————————–
// Declaración de variables globales del programa
float d; // diámetro de los puntos
float a; // tamaño de la celda
String prefijo; // prefijo para nombres de archivos tif
int contador; // contador para archivos tif sucesivos

//———————————————————–
// Inicialización de variables y parámetros globales
void setup() {
size(800, 300); // tamaño de pantalla
smooth(); // activa el suavizado
d = 7; // puntos de 7 px.
a = 10; // centros separados 10 px.
noStroke(); // los puntos se dibujan sin borde
fill(226, 234, 12); // amarillo ácido (226, 234, 12) (#E2EA0C)
prefijo = “Foto_”; // nombre para archivos tif
contador = 1; // número de archivo tif a grabar
}

//———————————————————–
// Necesaria para que funcionen mousePressed y keyPressed
void draw() {
}

//———————————————————–
// Al hacer clic con el ratón dibujamos una distribución aleatoria
void mousePressed() {
background(0);
for (float j=a/2; j<height; j += a) {
for (float i=a/2; i<width; i += a) {
// comparamos si un número aleatorio es mayor que la posición
// en altura como condición para dibujar el círculo:
// cuanto mayor sea j menos posibilidades hay de dibujarlo
float randomY = random(0, height);
if (randomY > j) {
ellipse(i, j, d, d);
}
}
}
}

//———————————————————–
// Grabar imagen si pulsamos la tecla ‘s’ o ‘S’
void keyPressed() {
if (key == ‘s’ || key == ‘S’) {
String name = prefijo + contador + “.tif”; // nombre completo del fichero a grabar
saveFrame(name); // graba el fichero tif
println(” >> Archivo ” + name + ” guardado !!”); // mensaje para el usuario
contador++; // aumenta el contador en una unidad
}
}

//———————————————————–

NOTA:

Abrir una sesión de processing, copiar con el ratón un ejercicio y pegarlo en el editor de processing. A continuación salvar el documento con un nombre. Repetir el procedimiento para los otros ejercicios.

Álvaro del Valle

Comments are closed.