Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Simulación de Partículas en Una Esfera Contenedora
Simulación de Partículas en Una Esfera Contenedora
Análisis Matemático
1. Fuerza del Resorte: La fuerza ejercida por el resorte se calcula utilizando la ley de Hooke
donde k es la constante del resorte y x es la elongación o compresión del resorte. Esta fuerza
restauradora asegura que las partículas oscilen alrededor de su posición de equilibrio.
3. Colisión con la Esfera: Se utilizan principios de colisiones elásticas para simular la interacción de
las partículas con la esfera contenedora. Cuando una partícula choca con la esfera, se calcula el
vector de reflexión para rebotar la partícula en la dirección opuesta, conservando la energía
cinética total del sistema.
Análisis Físico
2. Conservación de la Energía: La simulación garantiza que la energía total del sistema se conserve,
lo que significa que la suma de la energía cinética y potencial de las partículas se mantiene
constante a lo largo del tiempo. Esto es crucial para asegurar una representación física precisa del
movimiento de las partículas.
Maria Paula Osorio Santamaria - 1202448
3. Estabilidad del Sistema: La estabilidad del sistema se mantiene mediante el control de las
fuerzas aplicadas y la precisión del método de integración numérica. Hay que asegurar que las
fuerzas de resorte y amortiguación estén equilibradas permite que las partículas oscilen de manera
controlada sin perder estabilidad.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
float masa;
float h;
float ke;
float kb;
float tiempo;
GameObject[] misEsferas;
Vector3 gravedad;
float radioEsfera = 5.0f; // Radio de la esfera contenedora (la escala será x=10, y=10, z=10)
void Start()
misEsferas[0] = GameObject.Find("Sphere1");
misEsferas[1] = GameObject.Find("Sphere2");
misEsferas[0].transform.position = posicionInicial1;
misEsferas[1].transform.position = posicionInicial2;
longitudInicial = 10.0f; // Longitud inicial del resorte según las condiciones iniciales
Inicializar();
Vector3 ObtenerDireccionMovimientoAleatoria()
{
Maria Paula Osorio Santamaria - 1202448
Random.Range(-1f, 1f),
Random.Range(-1f, 1f),
Random.Range(-1f, 1f)
).normalized;
return direccionAleatoria;
Vector3 ObtenerPosicionAleatoriaDentroEsfera()
);
);
return posicionAleatoria;
Maria Paula Osorio Santamaria - 1202448
void Inicializar()
df = new float[N, 6]; // Derivadas del estado de las partículas (velocidades y aceleraciones)
f[n, 0] = posicionInicial.x;
f[n, 1] = posicionInicial.y;
f[n, 2] = posicionInicial.z;
Maria Paula Osorio Santamaria - 1202448
f[n, 3] = velocidadInicial.x;
f[n, 4] = velocidadInicial.y;
f[n, 5] = velocidadInicial.z;
ActualizarVista();
Este método inicializa las variables de estado de las partículas y calcula la constante del
resorte comprimido.
Luego, asigna posiciones y velocidades iniciales aleatorias dentro de la esfera a las
partículas.
Finalmente, llama al método ActualizarVista() para actualizar la representación visual en la
escena.
Código Completo
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
float masa;
float h;
float ke;
float kb;
float tiempo;
GameObject[] misEsferas;
Vector3 gravedad;
Maria Paula Osorio Santamaria - 1202448
float radioEsfera = 5.0f; // Radio de la esfera contenedora (la escala será x=10, y=10, z=10)
void Start()
misEsferas[0] = GameObject.Find("Sphere1");
misEsferas[1] = GameObject.Find("Sphere2");
misEsferas[0].transform.position = posicionInicial1;
misEsferas[1].transform.position = posicionInicial2;
longitudInicial = 10.0f; // Longitud inicial del resorte según las condiciones iniciales
Inicializar();
Vector3 ObtenerDireccionMovimientoAleatoria()
Random.Range(-1f, 1f),
Random.Range(-1f, 1f),
Maria Paula Osorio Santamaria - 1202448
Random.Range(-1f, 1f)
).normalized;
return direccionAleatoria;
Vector3 ObtenerPosicionAleatoriaDentroEsfera()
);
);
return posicionAleatoria;
void Inicializar()
Maria Paula Osorio Santamaria - 1202448
df = new float[N, 6]; // Derivadas del estado de las partículas (velocidades y aceleraciones)
f[n, 0] = posicionInicial.x;
f[n, 1] = posicionInicial.y;
f[n, 2] = posicionInicial.z;
f[n, 3] = velocidadInicial.x;
f[n, 4] = velocidadInicial.y;
f[n, 5] = velocidadInicial.z;
ActualizarVista();
}
Maria Paula Osorio Santamaria - 1202448
void CalcularVariables()
if (n == particulaDominante)
// Asignar las fuerzas calculadas a las derivadas del estado de las partículas
df[n, i] = velocidad[n][i];
f[n, 0] = posicion[n].x;
f[n, 1] = posicion[n].y;
Maria Paula Osorio Santamaria - 1202448
f[n, 2] = posicion[n].z;
f[n, 3] = velocidad[n].x;
f[n, 4] = velocidad[n].y;
f[n, 5] = velocidad[n].z;
void ResolverEcuaciones()
tiempo += h;
void ActualizarVista()
}
Maria Paula Osorio Santamaria - 1202448
void Update()
CalcularVariables();
ResolverEcuaciones();
ActualizarVista();
Conclusiones