Unidad 3
Introducción 📜
Sección titulada «Introducción 📜»En esta unidad, explorarás el concepto de fuerzas y cómo se aplican en la creación de sistemas interactivos dinámicos. Partiendo de la manipulación de la aceleración vista en la unidad anterior, aprenderás a utilizar las leyes de Newton para simular el movimiento de objetos en un entorno virtual. A través de ejercicios prácticos, comprenderás cómo las fuerzas influyen en la aceleración, velocidad y posición de los elementos visuales, y cómo modelar diferentes tipos de fuerzas, incluyendo la fricción, la resistencia y la gravedad. Además, explorarás la narrativa como un elemento clave para dar sentido y propósito a las interacciones entre los elementos de la simulación. Finalmente, integrarás la interactividad del usuario para enriquecer la experiencia y el control sobre el sistema.
Set: ¿Qué aprenderás en esta unidad? 💡
Sección titulada «Set: ¿Qué aprenderás en esta unidad? 💡»En esta fase inicial, establecerás las bases para comprender las fuerzas en sistemas interactivos. Despertarás la curiosidad y establecerás conexiones con conocimientos previos.
Actividad 01
Sección titulada «Actividad 01»Inspiración
Sección titulada «Inspiración»Iniciemos observando un video acerca del artista Alexander Calder
Actividad 02
Sección titulada «Actividad 02»Más inspiración
Sección titulada «Más inspiración»Te voy a presentar el estudio de diseño SOSO. Observa el proyecto Data Structure.
Tomando como inspiración el proyecto de Data Structure, explora cómo las experiencias digitales pueden manifestarse en el mundo físico. Esto puede lograrse mediante la creación de instalaciones interactivas que fusionen elementos digitales y físicos, utilizando técnicas como la proyección, la realidad aumentada y la fabricación digital.
Por ejemplo, se podría desarrollar una instalación donde los jugadores interactúen con proyecciones en superficies físicas, creando una experiencia de juego que trascienda la pantalla tradicional. Otra posibilidad es diseñar esculturas cinéticas controladas por algoritmos generativos, donde la animación digital influya directamente en el movimiento físico de la obra.
Seek: Investigación 🔎
Sección titulada «Seek: Investigación 🔎»En esta fase, profundizarás en la comprensión de las leyes de Newton y cómo se aplican en la simulación de fuerzas. Analizarás ejemplos de código y resolverás problemas para afianzar el conocimiento.
Actividad 03
Sección titulada «Actividad 03»¿Qué capítulo del libro guía vamos a trabajar?
Sección titulada «¿Qué capítulo del libro guía vamos a trabajar?»Exploremos juntos el siguiente capítulo del texto guía que trabajaremos. Se trata de la unidad 2 del libro The nature of code.
Actividad 04
Sección titulada «Actividad 04»Marco Motion 101
Sección titulada «Marco Motion 101»Rerpasemo rápido de qué se trata:
let mover;
function setup() { createCanvas(640, 240); mover = new Mover();}
function draw() { background(255); mover.show(); mover.update(); mover.checkEdges();}
...
update() {
// Aquí calculo la aceleración . . . this.velocity.add(this.acceleration); this.velocity.limit(this.topSpeed); this.position.add(this.velocity);}...
Actividad 05
Sección titulada «Actividad 05»¿Y qué relación tiene esto de las leyes de Newton con al arte generativo?
Sección titulada «¿Y qué relación tiene esto de las leyes de Newton con al arte generativo?»Antes de comenzar, disfruta esta simulación donde puedes experimentar de manera creativa las leyes de la atracción. Ahora si, volviendo al lío de Monte Pío (pero no tanto).
La ecuación vectorial de la segunda ley de Newton se expresa como:
Donde:
-
La fuerza neta o la sumatoria de todas las fuerzas que actúan sobre un objeto:
-
Masa del objeto:
-
Aceleración del objeto:
Nota entonces que:
Y lo siguiente lo dejaré a tu criterio, finalmente tu eres quien toma las decisiones en tu mundo de arte generativo ¿Qué tal si la masa es igual a 1? Yo no veo por qué no, finalmente, en el mundo de los pixeles el artista manda (¿O no?) 😉.
Entonces ya tenemos la relación. En la unidad anterior tu definías en cada frame de la simulación un algoritmo para la aceleración. Ahora, la aceleración en cada frame la calcularemos como la influencia de todas las fuerzas sobre nuestros elementos gráficos 😹.
Si volvemos a nuestro texto guía: The Nature of code, verás que un elemento gráfica que se mueva en el canvas tendrá mínimo estas propiedades:
class Mover { constructor() { this.position = createVector(); this.velocity = createVector(); this.acceleration = createVector(); }}
Ahora, considera que en un frame actúan sobre este elemento dos fuerzas: viento y gravedad. Por tanto, en ese frame aplicarás las dos fuerzas:
mover.applyForce(wind);
y luego:
mover.applyForce(gravity);
Finalmente, en el método applyForce
de la clase Mover
tendrás algo como:
applyForce(force) { this.acceleration = force;}
Y listo ¿Cierto? (No olvides que queremos calcular la aceleración en cada frame como la sumatoria de todas las fuerzas que actúan sobre un objeto.)
- ¿Qué problema le ves a este planteamiento?
- ¿Qué solución propones?
- ¿Cómo lo implementarías en p5.js?
Actividad 06
Sección titulada «Actividad 06»La fuerza neta debe ser acumulativa
Sección titulada «La fuerza neta debe ser acumulativa»Ya te diste cuenta entonces que la fuerza neta es la sumatoria de todas las fuerzas que actúan sobre un objeto. Ahora, ¿Qué pasa si en un frame actúan sobre un objeto dos fuerzas? ¿Cómo calculas la aceleración resultante?
mover.applyForce(wind);mover.applyForce(gravity);...
applyForce(force) { // Segunda ley de Newton, pero con acumulación de fuerza, sumando todas las fuerzas de entrada a la aceleración this.acceleration.add(force);}
⚠️
Te diste cuenta qué pasó aquí con respecto a la actividad anterior? Vuelve a mirar.
Entonces en cada frame, la aceleración se calcula como la sumatoria de todas las fuerzas que actúan sobre un objeto:
mover.applyForce(wind);mover.applyForce(gravity);mover.update();
Y en el método update() se actualiza la velocidad y la posición del objeto:
update() { this.velocity.add(this.acceleration); this.position.add(this.velocity); this.acceleration.mult(0);}
Pero calma 🧘. Notaste algo raro al final de update()?
- ¿Por qué es necesario multiplicar la aceleración por cero en cada frame?
- ¿Por qué se multiplica por cero justo al final de update()?
Actividad 07
Sección titulada «Actividad 07»En mi mundo los pixeles si tienen masa
Sección titulada «En mi mundo los pixeles si tienen masa»Como en tu mundo los pixeles tienen masa, entonces, ¿Qué pasa si en un frame actúan sobre un objeto dos fuerzas? ¿Cómo calculas la aceleración resultante?
mover.applyForce(wind);mover.applyForce(gravity);
applyForce(force) { // Asume que la masa es 10 force.div(10); this.acceleration.add(force);}
¿Y listo cierto? Pues ¡No! 🤣
¿Qué ves raro?
(Recuerda, ¿Cuándo se pasa algo a un función por valor y cuándo por referencia? En este caso, force es
objeto de la clase p5.Vector, es decir, es un objeto que se pasa por referencia. ¿Qué implica esto?)
Actividad 08
Sección titulada «Actividad 08»Paso por valor y paso por referencia
Sección titulada «Paso por valor y paso por referencia»En el siguiente código:
let friction = this.velocity.copy();let friction = this.velocity;
- ¿Cuál es la diferencia entre las dos líneas?
- ¿Qué podría salir mal con let friction = this.velocity;
De nuevo, toca repasar. ¿Cuál es la diferencia entre copiar por VALOR y por REFERENCIA?
- En el fragmento de código ¿Cuándo es por VALOR y cuándo por REFERENCIA.
Actividad 09
Sección titulada «Actividad 09»Modelando fuerzas
Sección titulada «Modelando fuerzas»En tu mundo de pixeles tu puedes crear las fuerzas o las puedes modelar.
Vamos a probar con lo segundo, modelar una fuerza. Ve a la sección Modeling forces del texto guía.
Apply: Aplicación 🛠
Sección titulada «Apply: Aplicación 🛠»En esta fase, aplicarás los conceptos aprendidos creando una obra generativa interactiva en tiempo real que involucren diferentes tipos de fuerzas.
Actividad 10
Sección titulada «Actividad 10»El problema de los n-cuerpos
Sección titulada «El problema de los n-cuerpos»Vas a diseñar e implementar una obra generativa interactiva en tiempo real inspirada en el problema de los n-cuerpos. En el texto guía tienes una sección que te puede ayudar a entender cómo modelar este problema, pero la idea es que uses tu creatividad para crear algo diferente basado en ese concepto y en las esculturas cinéticas de Alexander Calder.
Reflect: Consolidación y metacognición 🤔
Sección titulada «Reflect: Consolidación y metacognición 🤔»Actividad 11
Sección titulada «Actividad 11»Autoevaluación
Sección titulada «Autoevaluación»Actividad 12
Sección titulada «Actividad 12»Coevaluación
Sección titulada «Coevaluación»Analiza el trabajo de un compañero para ayudarle a mejorar y para aprender de sus soluciones.
Actividad 13
Sección titulada «Actividad 13»Feedback
Sección titulada «Feedback»Gracias por ayudarme a mejorar esta unidad para tus futuros compañeros.