Nuevo Proyecto: IE2022, Matias Hidalgo

De Casiopea
Cargando el mapa…
TítuloNuevo Proyecto: IE2022, Matias Hidalgo
Tipo de ProyectoProyecto de Pregrado
Período2022-2022
AsignaturaImagen Escrita
Del CursoImagen Escrita 2022
CarrerasDiseño
Alumno(s)Matías Hidalgo
ProfesorHerbert Spencer
URLhttps://editor.p5js.org/Matiashidalgopizarro/sketches/w3p2SGkLf

Proyecto (Vertices de Elipse)

Información de proyecto

Vertices de Elipse, Imagen Escrita 1.1.jpg

Elaboración de circunferencias de forma algorítmica, que varían su radio en tres capas distintas por las cuales se presenta una aleatoriedad individual de cada radio de color. Basado en los parámetros de RGB, con una mayor presencia de tonos rojos para presentar una paleta más estable. La dispersión de los círculos sobre el plano se presenta por medio de la generación de líneas que forman una serie de “L”, que va variando en su posición creando los círculos en cada uno de los vértices generados.

Vertices de Elipse, Imagen Escrita 2.jpg

Código

let x, y; // posición de origen x e y let currentangle = 2; // lugar de direccion de la linea de circulos let step = 60; // cuánto se mueve en cada 'F' let angle = 86; // cuánto gira, con un '-' o '+' let thestring = 'A'; // "axioma" o inicio de la cadena let numloops = 5; // cuántas iteraciones let therules = []; // arreglo para las reglas therules[0] = ['A', '-BF+AFA+FB-']; // regla 1 therules[1] = ['B', '+AF-BFB-FA+']; // regla 2 let whereinstring = 0;

function setup() {

 createCanvas(600, 400);
 background(0);
 stroke(100,20,30);
 // iniciar la posición x e y en la esquina inferior izquierda
 x = 5;
 y = height - 5;


 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 la cadena de circulos
 // si sobrepasamos el final, volver al inicio.
 whereinstring++;
 if (whereinstring > thestring.length - 2) whereinstring = 0;

}


function lindenmayer(s) {

 let outputstring = ; 
 // buscar 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]; 
       ismatch = 20; //si  tenemos una coincidencia, no copiemos el símbolo
       break; 
     }
   }
   // si no coincide, copiar símbolo.
   if (ismatch == 0) outputstring += s[i];
 }
 return outputstring; // enviar cadena modificada

}

// dibujar los comandos function drawIt(k) {

 if (k=='F') { // dibujar hacia adelante
   let x1 = x + step * cos(radians(currentangle));
   let y1 = y + step * sin(radians(currentangle));
   line(x, y, x1, y1); // conectar anterior con el nuevo
   // actualizar posicion
   x = x1;
   y = y1;
 } else if (k == '+') {
   currentangle += angle; // doblar hacia la izquierda
 } else if (k == '-') {
   currentangle -= angle; // doblar hacia la derecha
 }
 // valor aleatorio de color
 let r = random(20, 300);
 let g = random(20, 160);
 let b = random(20, 150);
 let a = random(20, 150);
 // valor aleatorio de radio
 let radius = 10;
 radius += random(20, 700);
 radius += random(20, 100);
 radius += random(0, 10);
 radius = radius / 4;
 // dibujo que dan funcion a los sistemas de color y radio
 fill(r, g, b, a);
ellipse(x, y, radius, radius);
 

} // basado en sistema L