Diferencia entre revisiones de «Casiopea»

De Casiopea
Sin resumen de edición
Línea 1: Línea 1:
__NOTOC__
__NOTOC__
__NOTITLE__
__NOTITLE__
'''50 años''' ~ 50 voces polifónicas del Diseño <span style="float:right">'''2020'''</span>
{{#widget:P5js
 
|url = https://hspencer.github.io/acto_del_momento_simultaneo/
{{#widget:P5
|width = 100%
|code =  
|height = 500
let sketch;
let flock;
let col = ["#ffb400", "#e58637", "#d6423b", "#b41039", "#420c30", "#fe60a1", "#c961f7", "#ff734c", "#3bc7ff", "#8089ff"];
let dash = true;
let connectors = false;
let normal = true;
let alfa = 30;
 
let swD, swC, swM, btnS;
 
function setup() {
 
  sketch = createCanvas(document.getElementById("p5").offsetWidth, 350);
  sketch.parent('p5');
  flock = new Flock();
  strokeCap(SQUARE);
  place50(5, 2, 130, 160, 32, 32);
 
  swD = createCheckbox("d", true);
  swD.changed(changeDash);
  swC = createCheckbox("c", false);
  swC.changed(changeConnectors);
  swM = createCheckbox("m", false);
  swM.changed(changeMode);
  btnS = createButton("F");
  btnS.mousePressed(saveFile);
  fixStyles();
}
 
function getCol() {
  let i = Math.floor(random(col.length));
  return col[i];
}
 
function windowResized() {
  sketch = createCanvas(document.getElementById("p5").offsetWidth, 350);
  sketch.parent('p5');
}
 
 
function place50(cols, rows, mx, my, xspacer, yspacer) {
  for (let y = 0; y < rows; y++) {
    for (let x = 0; x < cols; x++) {
      let xpos = mx + xspacer * x;
      let ypos = my + yspacer * y;
      place5(xpos, ypos, xspacer / 2.2);
    }
  }
}
 
function place5(x, y, sp) {
  for (let i = 0; i < 4; i++) {
    let b = new Boid(x + i * (sp / 4), y);
    flock.addBoid(b);
  }
  let b = new Boid(x + (sp / 2.2), y);
  b.velocity = createVector(0.5, -0.25);
  flock.addBoid(b);
 
}
 
function changeDash() {
  dash = !dash;
  if (dash) {
    swD.checked = true;
  } else {
    swD.checked = false;
  }
}
 
function changeConnectors() {
  connectors = !connectors;
}
 
function changeMode() {
  normal = !normal;
  if (normal) {
    alfa = 40;
  } else {
    alfa = 5;
  }
}
 
function draw() {
 
  background(255);
  if (normal) {
    blendMode(BLEND);
  } else {
    blendMode(DARKEST);
  }
  flock.run();
}
 
function mouseDragged() {
  flock.addBoid(new Boid(mouseX, mouseY));
}
 
 
function Flock() {
  // An array for all the boids
  this.boids = []; // Initialize the array
}
 
Flock.prototype.run = function() {
  for (let i = 0; i < this.boids.length; i++) {
    this.boids[i].run(this.boids); // Passing the entire list of boids to each boid individually
  }
}
 
Flock.prototype.addBoid = function(b) {
  this.boids.push(b);
  if (this.boids.length > 50) {
    this.boids.splice(0, 1);
  }
}
 
 
function Boid(x, y) {
  this.acceleration = createVector(0, 0);
  this.velocity = createVector(0, random(-1, 1));
  this.position = createVector(x, y);
  this.r = 8;
  this.maxspeed = 1; // Maximum speed
  this.maxforce = 0.05; // Maximum steering force
  this.c = color(getCol());
}
 
Boid.prototype.run = function(boids) {
  if (frameCount > 250) {
    this.flock(boids);
    this.update();
    this.borders();
  }
  if (dash) this.render();
}
 
Boid.prototype.applyForce = function(force) {
  // We could add mass here if we want A = F / M
  this.acceleration.add(force);
}
 
// We accumulate a new acceleration each time based on three rules
Boid.prototype.flock = function(boids) {
  let sep = this.separate(boids); // Separation
  let ali = this.align(boids); // Alignment
  let coh = this.cohesion(boids); // Cohesion
  // Arbitrarily weight these forces
  sep.mult(1.5);
  ali.mult(1.0);
  coh.mult(1.0);
  // Add the force vectors to acceleration
  this.applyForce(sep);
  this.applyForce(ali);
  this.applyForce(coh);
}
 
// Method to update location
Boid.prototype.update = function() {
  // Update velocity
  this.velocity.add(this.acceleration);
  // Limit speed
  this.velocity.limit(this.maxspeed);
  this.position.add(this.velocity);
  // Reset accelertion to 0 each cycle
  this.acceleration.mult(0);
}
 
 
Boid.prototype.seek = function(target) {
  let desired = p5.Vector.sub(target, this.position); // A vector pointing from the location to the target
  // Normalize desired and scale to maximum speed
  desired.normalize();
  desired.mult(this.maxspeed);
  // Steering = Desired minus Velocity
  let steer = p5.Vector.sub(desired, this.velocity);
  steer.limit(this.maxforce); // Limit to maximum steering force
  return steer;
}
 
Boid.prototype.render = function() {
  // Draw a triangle rotated in the direction of velocity
  let theta = this.velocity.heading();
  noFill();
  if (normal) {
    stroke(0);
  } else {
    stroke(0, 5);
  }
  strokeCap(SQUARE);
  strokeWeight(1.5);
  push();
  translate(this.position.x, this.position.y);
  rotate(theta);
  line(-this.r, 0, this.r, 0);
  pop();
}
 
// Wraparound
Boid.prototype.borders = function() {
  let t = 5;
  if (this.position.x < this.r + t) {
    this.position.x = this.r + t;
    this.acceleration = p5.Vector.mult(this.acceleration, -1);
  }
  if (this.position.y < this.r + t) {
    this.position.y = this.r + t;
    this.acceleration = p5.Vector.mult(this.acceleration, -1);
  }
  if (this.position.x > width - this.r - t) {
    this.position.x = width - this.r - t;
    this.acceleration = p5.Vector.mult(this.acceleration, -1);
  }
  if (this.position.y > height - this.r - t) {
    this.position.y = height - this.r - t;
    this.acceleration = p5.Vector.mult(this.acceleration, -1);
  }
}
 
// Separation
// Method checks for nearby boids and steers away
Boid.prototype.separate = function(boids) {
  let desiredseparation = 25.0;
  let steer = createVector(0, 0);
  let count = 0;
  // For every boid in the system, check if it's too close
  for (let i = 0; i < boids.length; i++) {
    let d = p5.Vector.dist(this.position, boids[i].position);
    // If the distance is greater than 0 and less than an arbitrary amount (0 when you are yourself)
 
    if ((d > 0) && (d < desiredseparation)) {
      // Calculate vector pointing away from neighbor
      let diff = p5.Vector.sub(this.position, boids[i].position);
 
      diff.normalize();
      diff.div(d); // Weight by distance
      steer.add(diff);
      count++; // Keep track of how many
      if (connectors) this.connect(boids[i]);
    }
  }
  // Average -- divide by how many
  if (count > 0) {
    steer.div(count);
  }
 
  // As long as the vector is greater than 0
  if (steer.mag() > 0) {
    // Implement Reynolds: Steering = Desired - Velocity
    steer.normalize();
    steer.mult(this.maxspeed);
    steer.sub(this.velocity);
    steer.limit(this.maxforce);
  }
  return steer;
}
 
Boid.prototype.connect = function(b) {
  let t1 = this.velocity.heading();
  let t2 = b.velocity.heading();
  let x1 = this.position.x + cos(t1) * this.r;
  let y1 = this.position.y + sin(t1) * this.r;
  let x2 = this.position.x + cos(t1) * -this.r;
  let y2 = this.position.y + sin(t1) * -this.r;
  let x3 = b.position.x + cos(t2) * this.r;
  let y3 = b.position.y + sin(t2) * this.r;
  let x4 = b.position.x + cos(t2) * -this.r;
  let y4 = b.position.y + sin(t2) * -this.r;
  //blendMode(MULTIPLY);
  noStroke();
  fill(this.c);
  this.c.setAlpha(alfa);
  quad(x1, y1, x2, y2, x4, y4, x3, y3, );
  //blendMode(BLEND);
}
 
// Alignment
// For every nearby boid in the system, calculate the average velocity
Boid.prototype.align = function(boids) {
  let neighbordist = 50;
  let sum = createVector(0, 0);
  let count = 0;
  for (let i = 0; i < boids.length; i++) {
    let d = p5.Vector.dist(this.position, boids[i].position);
    if ((d > 0) && (d < neighbordist)) {
      sum.add(boids[i].velocity);
      count++;
    }
  }
  if (count > 0) {
    sum.div(count);
    sum.normalize();
    sum.mult(this.maxspeed);
    let steer = p5.Vector.sub(sum, this.velocity);
    steer.limit(this.maxforce);
    return steer;
  } else {
    return createVector(0, 0);
  }
}
 
// Cohesion
// For the average location (i.e. center) of all nearby boids, calculate steering vector towards that location
Boid.prototype.cohesion = function(boids) {
  let neighbordist = 100;
  let sum = createVector(0, 0); // Start with empty vector to accumulate all locations
  let count = 0;
  for (let i = 0; i < boids.length; i++) {
    let d = p5.Vector.dist(this.position, boids[i].position);
    if ((d > 0) && (d < neighbordist)) {
      sum.add(boids[i].position); // Add location
      count++;
    }
  }
  if (count > 0) {
    sum.div(count);
    return this.seek(sum); // Steer towards the location
  } else {
    return createVector(0, 0);
  }
}
 
function saveFile() {
  let filename = "" + year() + month() + day() + "-" + hour() + minute() + second() + ".png";
  let file = createImage(width, height);
  file = get();
  file.save(filename, 'png');
}
 
function fixStyles() {
  let sd = createDiv();
  let sc = createDiv();
  let sm = createDiv();
  sd.parent('p5');
  sc.parent('p5');
  sm.parent('p5');
  swD.parent(sd);
  swC.parent(sc);
  swM.parent(sm);
  sd.style('display', 'inline-block');
  sc.style('display', 'inline-block');
  sm.style('display', 'inline-block');
  sd.style('padding', '0 2em 0 0');
  sc.style('padding', '0 2em 0 0');
  sm.style('padding', '0 2em 0 0');
  btnS.parent('p5');
}
}}
}}
'''1970'''


<p style="margin: 1em 0 1.5em 0">
<p style="margin: 1em 0 1.5em 0">

Revisión del 12:30 14 sep 2020


Casiopea es una carpeta abierta y colectiva, bitácora de todos y lenguaje común de la Escuela de Arquitectura y Diseño, PUCV; donde se expone, trabaja y documenta el estudio de los diversos talleres y cursos, además de albergar material del archivo patrimonial, tanto de la Escuela como de la Ciudad Abierta.

Esta wiki es mantenida y administrada por un grupo abierto de colaboradores.

Si es la primera vez que estás acá por favor sigue las reglas básicas para colaborar
  1. Para editar y crear páginas debes estar registrado/a y haber iniciado sesión. Es importante que tengas una página con tu nombre (persona) para que puedas vincularla a los proyectos, publicaciones, tareas, etc; que crees.
  2. Al crear una página (proyecto, tarea, etc), utiliza un nombre específico. Nunca debes crear una página con un nombre genérico, como "Proyecto de Título", "Taller 7ª Etapa", etc. Debes definir un nombre único.
  3. Debes preparar los archivos antes de subirlos, no debes subir archivos innecesariamente pesados, fotos directamente de la cámara sin dimensionarlas para la pantalla. Las fotos originales son de muy alta resolución, más de lo necesario para visualizarlas en pantalla al 100%. Al igual que las páginas, los archivos deben tener un nombre específico; no llamarlo foto.jpg sino algo mejor como JPerez_maqueta_proyAlmendral_01_2016.jpg
  4. No crear páginas huérfanas, que no queden vinculadas por otras (chatarra espacial). Es aconsejable que se pueda llegar a ellas vía vínculo de hipertexto. La mejor forma es crearla como un objeto semántico donde puedas definir autor, taller al que pertenece, etc.
  5. Si creas proyectos, publicaciones, tareas participas en cursos o talleres debes agregar tu nombre (escrito de forma consistente) para que después puedas llamarlos desde tu página usando {{Mis Proyectos}} o {{Mis Talleres}} o {{Mis Travesías}}


Para aprender cómo formatear los textos y ubicar las imágenes, por favor lee cómo se edita una página.

Talleres

Taller de Amereida 2024

Talleres de Arquitectura 2024

Talleres de Título de Arquitectura


Asignaturas y Ramos Optativos


Proyectos

Proyectos de Título 2024

Proyectos de Título 2019

... más resultados

Proyectos de Investigación Activos

  1. Amereida first volume
  2. Apoyos Visuales para la Plena Inclusión de las Personas con Discapacidad Intelectual en los Servicios Públicos en Chile
  3. Arquitectura en cohabitación: La construcción formal del diálogo entre el ser humano y la naturaleza
  4. Artefactos de diseño para la objetualización del vacío expresivo
  5. Atributos fundamentales del hacer proyectual de la Escuela de Arquitectura de la Universidad Finis Terrae
  6. Barrera mixta de mitigación y de evacuación para riesgos de inundación en Laguna Verde, Valparaíso
  7. Bitácoras de Percepción Móvil: Repensando el espacio público olvidado desde la movilidad activa. Laboratorio urbano en Avenida Brasil, Valparaíso.
  8. Borde territorial adaptativo y de evacuación para riesgos de inundación en Laguna Verde, Valparaíso.
  9. El Paladar de la V Región - Reconocer el Territorio desde los Sabores
  10. El Paladar de la V Región: Reconocer el Territorio desde los Sabores / 2° SEM 2021
  11. El desplazamiento humano y la multiterritorialidad: de una zona de frontera a un lugar transfronterizo en la desembocadura del Aconcagua.
  12. El enjambre del oficio: Configuración taxonómica de un corpus disciplinar
  13. El grabado en la formación del diseño gráfico: La tonalidad del fotograbado en la investigación del color bajo el mar
  14. Espacialidad Gráfica y el Acto de Leer: Desde el Registro a la Obra
  15. Expertos por Experiencia. El proceso de investigación inclusiva: un desafío para los nuevos tiempos
  16. Exploración de la levedad que da lugar a la inclusión en espacios públicos
  17. Exploración de la levedad que da lugar a la inclusión: reconocimiento de elementos arquitectónicos leves como unidad mínima que da cabida a espacios inclusivos hospitalarios en contextos de vulnerabilidad social
  18. Fenomenología de la maqueta de arquitectura: la experiencia abstracta de los procesos de proyección y edficación hacia el entendimiento de la obra
  19. Iluminaciones para una aproximación a las letras: Conjunto de objetos gráficos que permiten intencionar la alfabetización inicial en la primera infancia.
  20. Investigación interdisciplinaria para pregrado: PiX como lenguaje y método accesible para el codiseño
  21. La obra como sistema de moldajes: Casa en Jean Mermoz (1956-1961)
  22. Materia, Forma y Despliegue: Diseño y aprendizaje recíproco, en experiencias de inmersión rizomática
  23. Modelado paramétrico interpretativo en el diseño expresivo de envolventes arquitectónicas en pregrado
  24. Módulo de estimulación sonora para la primera infancia
  25. Objeto lúdico Laberinto Coreográfico - Experiencia kinestésica del espacio arquitectónico
  26. Partituras de Interacción PiX como lenguaje y método accesible para el co-diseño
  27. Pensiero del Abrazo-Rafaella Osorio Corvetto
  28. Proyecto, resistencia y exploración tipológica en edificios escolares modernos (Chile 1940-1980)
  29. Re pensando el ‘entre’ de lo público: Hacia la reactivación en espacios de uso público olvidados a través de la percepción del habitante y su movilidad activa
  30. Re-consolidación tipológica de las periferias patrimoniales obsolescentes: El caso del Cerro Monjas, Valparaíso.
  31. Resiliencia y adaptación espontánea de la forma arquitectónica ante inundaciones costeras.
  32. Resiliencia y adaptación espontánea de la forma arquitectónica ante inundaciones costeras. Informalidad y riesgo en Laguna Verde, Valparaíso.
  33. Rizoma: Composiciones escénicas colectivas en el territorio
  34. Secuencia Lúdica, la condición creativa del relato en el desarrollo de una identidad territorial.
  35. Seminario de la traducción de Amereida
  36. Serie de Iluminaciones para una aproximación a las letras
  37. Un territorio sub-antártico de innovación ecológico-cultural: Propuesta conceptual y arquitectónica del Complejo étnico, científico y turístico de Jetarkte
  38. Vislumbrar - Proposición de un método interactivo para pensar el territorio desde imaginarios barriales

Archivo de Proyectos


Magíster en Arquitectura y Diseño