Programación creativa con P5.js

Programación creativa con P5.js
programación creativa con P5.js

Programación creativa con P5.js

¡p5.js es una biblioteca de JavaScript para la programación creativa, que busca hacer que programar sea accesible e inclusivo para artistas, diseñadores, educadores, principiantes y cualquier otra persona! p5.js es gratuito y de código abierto y tiene su origen en Processing: un lenguaje de programación y entorno de desarrollo integrado de código abierto basado en Java, de más o menos fácil utilización, y que todavía sirve como medio para la enseñanza y producción de proyectos multimedia e interactivos de diseño digital.

Volviendo a P5.js y usando la metáfora de bosquejear, p5.js tiene un conjunto completo de funcionalidades para dibujar. Sin embargo, no estás limitado solo a dibujar en tu lienzo. Puedes tomar toda la página del navegador como tu bosquejo, incluyendo los objetos HTML5 para texto, entrada, video, cámara web y sonido.

Sístemas-L

Este bosquejo crea un dibujo automatizado basado en un sistema Lindenmayer o sistema-L. Los sistemas-L son utilizados a menudo en gráfica procedural para hacer patrones naturales, geométricos o de tipo fractal.
Ejemplo creado por R. Luke DuBois.
https://en.wikipedia.org/wiki/L-system


// SECCIÓN TORTUGA:
let x, y; // la posición actual de la tortuga
let currentangle = 0; // hacia dónde apunta la tortuga
let step = 20; // cuánto se mueve la tortuga en cada 'F'
let angle = 90; // cuánto gira la tortuga con un '-' or '+'

// SECCIÓN LINDENMAYER (SISTEMAS-L)
let thestring = 'A'; // "axioma" o inicio de la cadena
let numloops = 5; // cuántas iteraciones a pre-computar
let therules = []; // arreglo para las reglas
therules[0] = ['A', '-BF+AFA+FB-']; // primera regla
therules[1] = ['B', '+AF-BFB-FA+']; // segunda regla

let whereinstring = 0; // dónde estamos en el sistema-L

function setup() {
createCanvas(710, 400);
background(255);
stroke(0, 0, 0, 255);

// inicializar la posición x e y en la esquina inferior izquierda
x = 0;
y = height - 1;

// CALCULAR EL SISTEMA-L
for (let i = 0; i < numloops; i++) { thestring = lindenmayer(thestring); } } function draw() { // dibujar el caracter actual en la pantalla drawIt(thestring[whereinstring]); // incrementar el punto de donde leemos la cadena. // si sobrepasamos el final, volver al inicio. whereinstring++; if (whereinstring > thestring.length - 1) whereinstring = 0;

}

// interpretar un sistema-L
function lindenmayer(s) {
let outputstring = ''; // inicializar una cadena de salida en blanco

// iterar a lo largo de las 'reglas' buscando coincidencias de símbolo:
for (let i = 0; i < s.length; i++) { let ismatch = 0; // por defecto, sin coincidencia for (let j = 0; j < therules.length; j++) { if (s[i] == therules[j][0]) { outputstring += therules[j][1]; //escribir substitución ismatch = 1; //si tenemos una coincidencia, no copiemos el símbolo break; // salir de este bucle for() } } // si nada coincide, simplemente copia el símbolo. if (ismatch == 0) outputstring += s[i]; } return outputstring; // enviar la cadena modificada } // esta es una función que dibuja los comandos de la tortuga function drawIt(k) { if (k=='F') { // dibujar hacia adelante // de polar a cartesiano basado en paso y ángulo actual: let x1 = x + step * cos(radians(currentangle)); let y1 = y + step * sin(radians(currentangle)); line(x, y, x1, y1); // conectar el anterior y el nuevo // actualizar la posición de la tortuga: x = x1; y = y1; } else if (k == '+') { currentangle += angle; // doblar hacia la izquierda } else if (k == '-') { currentangle -= angle; // doblar hacia la derecha } // valores aleatorios de color: let r = random(128, 255); let g = random(0, 192); let b = random(0, 50); let a = random(50, 100); // escoger una distribución gaussiana (D&D) para el radio: let radius = 0; radius += random(0, 15); radius += random(0, 15); radius += random(0, 15); radius = radius / 3; // dibujar: fill(r, g, b, a); ellipse(x, y, radius, radius); }

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *