Modelado b谩sico 3D
En este ejercicio debes simular un cubo con una esfera dentro de este. Actualmente, la esfera sale del
cubo 馃槗馃槗.
Tu misi贸n es utilizar tus conocimientos para que la esfera colisione con el cubo y
pueda rebotar dentro de este.
Explicaci贸n
La simulaci贸n que se presenta muestra la colisi贸n entre una esfera m贸vil y un cubo est谩tico en un
entorno tridimensional, lo que ofrece una experiencia interactiva fascinante. Este programa, creado con
la biblioteca p5.js, utiliza las habilidades de renderizaci贸n 3D para crear un lienzo virtual en el que
una esfera navega por el espacio a una velocidad aleatoria y responde din谩micamente a las interacciones
con las diferentes caras del cubo.
Al simular el comportamiento f铆sico de la esfera dentro del cubo mediante la constante actualizaci贸n
de su posici贸n y la detecci贸n precisa de colisiones, el c贸digo subyacente a esta simulaci贸n crea una
experiencia visual cautivadora y educativa.
Antes de comenzar a implementar esta simulaci贸n, se deben establecer tres variables globales
fundamentales: la posici贸n de la esfera, la velocidad de la esfera y las dimensiones del cubo.
La posici贸n de la esfera se almacena en un objeto llamado spherePos en el espacio virtual. Este
objeto almacena las coordenadas de la esfera en tres dimensiones. La posici贸n se establece inicialmente
en el centro de la esfera, es decir, en el punto (0, 0, 0).
El vector sphereSpeed es utilizado para calcular la velocidad de la esfera. La funci贸n
p5.Vector.random3D() se utiliza para generar este vector, que proporciona una direcci贸n aleatoria para
el movimiento de la esfera. Para proporcionar una experiencia de simulaci贸n m谩s controlada y realista,
la magnitud del vector se multiplica por 0,9 despu茅s.
Finalmente, se utiliza una variable de inicializaci贸n de 70 unidades para determinar las dimensiones
del cubo dentro del cual se desenvuelve la esfera. Esta medida mide el tama帽o del cubo en el espacio
tridimensional y establece los l铆mites dentro de los cuales la esfera puede moverse y colisionar.
Estas variables en conjunto y c贸mo se utilizan en la simulaci贸n permiten crear una experiencia
interactiva envolvente que no solo cautiva visualmente, sino que tambi茅n ense帽a los principios f铆sicos
fundamentales de la din谩mica de colisiones en un entorno tridimensional.
Variables Globales
- spherePos: Es un objeto que almacena la posici贸n de la esfera en el espacio tridimensional. Inicialmente, se encuentra en el centro del espacio, en las coordenadas (0, 0, 0).
- sphereSpeed: Representa la velocidad de la esfera. Se inicializa como un vector aleatorio en tres dimensiones utilizando p5.Vector.random3D(), lo que significa que su direcci贸n es aleatoria, pero su magnitud es 1. Luego, este vector se multiplica por 0.9 para reducir su velocidad.
- boxSize: Define el tama帽o del cubo en el que se encuentra la esfera. Este valor se establece en 70 unidades.
Funci贸n setup()
- Esta funci贸n se llama una vez al principio del programa. Dentro de esta funci贸n, se define el lienzo utilizando createCanvas(), creando un lienzo de 600x600 p铆xeles con una vista en perspectiva (WEBGL).
- La funci贸n perspective() establece la perspectiva de la escena tridimensional. Toma cuatro argumentos: el campo de visi贸n (en radianes), la relaci贸n de aspecto (en este caso, 1 para una relaci贸n de aspecto cuadrada), el plano cercano y el plano lejano de la escena.
Funci贸n draw()
- Esta funci贸n se ejecuta continuamente despu茅s de setup(), representando cada cuadro en la animaci贸n.
- background(200) establece el color de fondo del lienzo en gris claro en cada cuadro, eliminando el contenido anterior.
- orbitControl() habilita el control de 贸rbita, lo que permite al usuario rotar la vista de la escena utilizando el rat贸n.
- rotateX() y rotateY() rotan la escena seg煤n el n煤mero de cuadros (frameCount) multiplicado por una peque帽a cantidad. Esto crea una animaci贸n de rotaci贸n continua de la escena.
- La posici贸n de la esfera se actualiza sumando la velocidad actual de la esfera en cada cuadro, lo que le permite moverse a trav茅s del espacio.
- Se verifica si la esfera colisiona con el cubo. Esto se hace iterando sobre las seis caras del cubo y calculando la distancia entre el centro de la esfera y el centro de cada cara del cubo. Si la distancia es menor o igual a 10 unidades (considerada la "zona de colisi贸n"), se ejecuta una colisi贸n.
- Si hay una colisi贸n, se calcula el vector normal de la cara del cubo con la que colisiona la esfera. Se utiliza este vector normal para reflejar la velocidad de la esfera, como si estuviera rebotando en la superficie del cubo.
- Adem谩s, se verifica si la esfera est谩 chocando con los bordes del cubo. Si lo hace, su velocidad se invierte para simular una colisi贸n el谩stica.
- Finalmente, se dibuja un cubo transparente utilizando box() y se dibuja la esfera dentro del cubo con sphere(). La funci贸n fill() establece el color de la esfera.
En cada frame, la posici贸n de la esfera se actualiza sumando su velocidad actual a su posici贸n anterior.
El objetivo de este procedimiento es simular el movimiento continuo de una esfera a trav茅s del espacio
tridimensional definido por un cubo est谩tico.
Despu茅s de ajustar la posici贸n de la esfera, se verifica si se encuentra en contacto con el cubo.
Para lograrlo, se realiza una prueba de colisi贸n con cada cara del cubo. Se considera que ha ocurrido
una colisi贸n entre la esfera y la cara del cubo si la esfera se encuentra a una distancia menor o igual
a 10 unidades de la cara.
Se calcula el vector normal de la cara con la que colisiona la esfera para reflejar esta colisi贸n.
Este vector normal muestra la direcci贸n que est谩 perpendicular a la superficie del cubo. Luego, este
vector normal se utiliza para actualizar la velocidad de la esfera para reflejar el impacto de la
colisi贸n. Esto se logra aplicando una transformaci贸n a la velocidad de la esfera utilizando principios
de f铆sica como la ley de reflexi贸n para simular c贸mo la esfera rebotar铆a despu茅s de golpear una
superficie.
Adem谩s, si la esfera sale del cubo en alg煤n momento, su velocidad cambiar谩 de direcci贸n. Esta
comprobaci贸n garantiza que la esfera permanezca dentro de los l铆mites del cubo y no salga del espacio de
simulaci贸n.
Intente realizar lo siguiente en el programa a continuaci贸n:
- Intente simular la colisi贸n de la esfera con el cubo.
Aqu铆 te dejamos algunos pasos para lograrlo馃槑馃槑:
- Calcular el vector normal de la cara de colisi贸n: Despu茅s de verificar la colisi贸n entre la esfera y el cubo, calcula el vector normal de la cara del cubo con la que colisiona la esfera.
- Reflejar la velocidad de la esfera: Utiliza el vector normal calculado para reflejar la velocidad de la esfera como si estuviera rebotando en la superficie del cubo.
Recuerda: siempre puedes restaurar el programa original oprimiendo el bot贸n Restaurar.