Contenido principal
Programación de computadoras
Curso: Programación de computadoras > Unidad 5
Lección 5: Fuerzas- Las leyes del movimiento de Newton
- Desafío: globo flotante
- Movimiento de muchos objetos
- Desafío: pelotas en la pared
- Modelar gravedad y fricción
- Desafío: reductores de velocidad
- Resistencia del aire y de fluidos
- Desafío: troncos que se hunden
- Atracción gravitacional
- Desafio: generador de ilustraciones
- Atracción mutua
- Desafío: repulsión mutua
- Proyecto: placeres y angustias de la criatura
© 2023 Khan AcademyTérminos de usoPolítica de privacidadAviso de cookies
Movimiento de muchos objetos
En el mundo real, en el cual estamos buscando inspiración, tenemos más de un objeto en movimiento: estamos rodeados por muchos objetos de masa y posición variables. Veamos como podemos conseguir que nuestro
Mover
simule mejor ese aspecto del mundo real.Para hacer esto, necesitaremos una revisión rápida de programación orientada a objetos. De nuevo, no estamos cubriendo todos los conocimientos básicos de programación OO aquí. Sin embargo, puesto que la idea de crear un mundo lleno de objetos es fundamental para todos los ejemplos en este curso, vale la pena tomar un momento para recorrer los pasos para ir de un objeto a muchos.
Como recordatorio, así es como se ve nuestro
Mover
actual. Es idéntico al Mover
que creamos cuando introdujimos vectores por primera vez, pero con dos cosas más: masa
y un nuevo método applyForce()
:Ya que nuestro objeto está definido, podemos crear, digamos, veinte instancias de
Mover
con un arreglo, inicializándolos con un buclevar movers = [];
for (var i = 0; i < 20; i++) {
movers[i] = new Mover();
}
Pero ahora tenemos un pequeño problema. Si nos referimos de nuevo al constructor del objeto
Mover
…var Mover = function() {
this.mass = 1;
this.position = new PVector(30, 30);
this.velocity = new PVector(0, 0);
this.acceleration = new PVector(0, 0);
};
…descubrimos que cada objeto
Mover
se hace exactamente de la misma manera. Lo que queremos son objetos Mover
con masa variable que comiencen en posiciones variables. Aquí es donde tenemos que aumentar la sofisticación de nuestro constructor agregándole argumentos.var Mover = function(m, x, y) {
this.mass = m;
this.position = new PVector(x, y);
this.velocity = new PVector(0, 0);
this.acceleration = new PVector(0, 0);
};
Observa cómo la masa y la posición ya no se igualan a números predefinidos, sino más bien se inicializan mediante argumentos que se pasan a través del constructor. Esto significa que podemos crear una variedad de objetos
Mover
: grandes, pequeños, que empiezan a la izquierda de la pantalla, que empiezan a la derecha, etc.// Un Mover grande del lado izquierdo de la pantalla
var m1 = new Mover(10, 0, height/2);
// Un Mover pequeño del lado derecho de la pantalla
var m2 = new Mover(0.1, width, height/2);
Sin embargo, con un arreglo queremos inicializar todos los objetos con un bucle.
for (var i = 0; i < 20; i++) {
movers[i] = new Mover(random(0.1, 5), 0, 0);
}
Para cada mover creado, la masa se hace igual a un valor aleatorio entre 0.1 y 5, la posición inicial de x se hace igual a 0 y la posición inicial de y se hace igual a 0. Ciertamente, hay todo tipo de formas que podríamos elegir para inicializar los objetos; esta es solo una demostración de una posibilidad.
Una vez que se declara, crea e inicializa el arreglo de objetos, el resto del código es sencillo. Pasamos por todos los objetos, les damos cada una de las fuerzas en el entorno y disfrutamos del espectáculo.
draw = function() {
background(50, 50, 50);
for (var i = 0; i < movers.length; i++) {
var wind = new PVector(0.01, 0);
var gravity = new PVector(0, 0.1);
movers[i].applyForce(wind);
movers[i].applyForce(gravity);
movers[i].update();
movers[i].display();
movers[i].checkEdges();
}
};
Aquí está cómo se ve el programa ya todo junto. Observa cómo en el programa, los círculos más pequeños llegan a la derecha de la ventana más rápido que los grandes. Esto es debido a nuestra fórmula: aceleración = fuerza dividida entre la masa. Entre mayor sea la masa, menor será la aceleración.
Este curso de "Simulaciones Naturales" es un derivado de "La Naturaleza del Código" por Daniel Shiffman, usado bajo una Licencia Creative Commons Reconocimiento-NoComercial 3.0 Unported.
¿Quieres unirte a la conversación?
Sin publicaciones aún.