Saltearse al contenido

Unidad 2

En esta unidad repasarás el concepto de vector y algunas de sus operaciones básicas y experimentarás con conceptos matemáticos y físicos, como velocidad y aceleración, para controlar el movimiento en tus proyectos interactivos.

Set: ¿Qué aprenderás en esta unidad? 💡

Sección titulada «Set: ¿Qué aprenderás en esta unidad? 💡»

En esta unidad aprenderás una técnica fundamental para controlar el movimiento de los objetos visuales de tus creaciones interactivas. Se trata del marco motion 101. Este marco no solo será útil en esta unidad, sino que también te acompañará en las siguientes unidades, ya que es una técnica esencial para el desarrollo de proyectos interactivos. Y no solo eso, sino que podrás aplicar esta técnica en cualquier lenguaje de programación, o entorno de desarrollo, ya que es un concepto universal en la programación de gráficos y animaciones. Lo mejor de todo es que para aplicar esta técnicas no necesitas un motor de físicas.

En esta actividad vamos a repasar algunos conceptos básicos de los vectores. Te propondré que analicemos juntos algunos de los ejemplos del texto de guía.

Comencemos por el ejemplo: Example 1.2: Bouncing Ball with Vectors!

Realiza este ejercicio del libro Exercise 1.1

Dale una mirada a este código:

let position;
function setup() {
createCanvas(400, 400);
position = createVector(6,9);
console.log(position.toString());
playingVector(position);
console.log(position.toString());
noLoop();
}
function playingVector(v){
v.x = 20;
v.y = 30;
}
function draw() {
background(220);
console.log("Only once");
}

Vamos a darle una mirada a la clase p5.Vector aquí.

Vas a tomar como inspiración este ejemplo de la referencia de p5.js:

function setup() {
createCanvas(100, 100);
}
function draw() {
background(200);
let v0 = createVector(50, 50);
let v1 = createVector(30, 0);
let v2 = createVector(0, 30);
let v3 = p5.Vector.lerp(v1, v2, 0.5);
drawArrow(v0, v1, 'red');
drawArrow(v0, v2, 'blue');
drawArrow(v0, v3, 'purple');
}
function drawArrow(base, vec, myColor) {
push();
stroke(myColor);
strokeWeight(3);
fill(myColor);
translate(base.x, base.y);
line(0, 0, vec.x, vec.y);
rotate(vec.heading());
let arrowSize = 7;
translate(vec.mag() - arrowSize, 0);
triangle(0, arrowSize / 2, 0, -arrowSize / 2, arrowSize, 0);
pop();
}

Vas a modificarlo para generar este resultado:

Resultado

  • Analiza cómo funciona el método lerp().
  • Nota que además de la interpolación lineal de vectores, también puedes hacer interpolación lineal de colores con el método lerpColor().

Dedica un tiempo a estudiar cómo se dibuja una flecha en el método drawArrow().

En la sección del texto guía llamada Motion with vectors, el autor propone un marco de movimiento llamado motion 101. Así mismo, el ejemplo 1.7 muetra cómo se aplica este marco en un ejemplo simple.

En el libro proponen una regla (que eventualmente se rompe cuando conviene):

The goal for programming motion is to come up with an algorithm for calculating acceleration and then let the trickle-down effect work its magic.

Para investigador el significado de esta frase te propone que construyas un experimento donde analices cómo se comporta un objeto en movimiento con:

  • Aceleración constante.
  • Aceleración aleatoria.
  • Aceleración hacia el mouse.

En esa fase vas a aplicar los conceptos investigados y vas a crear una pieza de arte generativo interactivo en tiempo real usando vectores y el marco motion 101.

Vas a crear una obra generativa interactivo en tiempo real que utilice los conceptos de motion 101, vectores y algunos algoritmos de la unidad anterior. Vas a probar un algorimo para calcular la aceleración diferente a los que analizaste en esta unidad.

Reflect: Consolidación y metacognición 🤔

Sección titulada «Reflect: Consolidación y metacognición 🤔»

Dar feedback técnico y conceptual es una habilidad clave. Analiza el trabajo de un compañero para ayudarle a mejorar y para aprender de sus soluciones.

Tu perspectiva me ayuda a refinar y mejorar esta unidad.