Dev - C++ - Colisiones entre esferas duras en c++

 
Vista:
sin imagen de perfil
Val: 3
Ha disminuido su posición en 6 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Colisiones entre esferas duras en c++

Publicado por Ainhoa (2 intervenciones) el 08/12/2019 20:37:39
Buenas noches a todos,

Soy bastante nueva en el mundo de C++. Necesito hacer un programa en el que un número N de esferas duras (partículas) choquen entre ellas y contra las paredes. Las colisiones deben ser elásticas por lo que no tiene que haber ningún tipo de pérdida de energía cinética en dichas colisiones.

El programa que he escrito para calcular las posiciones es el siguiente, donde N es el número de partículas de radio R que hay en una caja (2D) de lado L y Tmax es el tiempo máximo durante el cual observamos el movimiento de las partículas.

Las funciones coord() y phii() son dos funciones definidas en el código en las que obtengo un valor aleatorio que me permite dar coordenadas aleatorias a cada partícula y un ángulo para calcular la velocidad de cada una de ellas aleatorio también.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
for (int i = 0; i < N; i++) {
    x[i] = coord();
    y[i] = coord();
    double phii = phi();
    Vx[i] = modulovelocidad*cos(phii);
    Vy[i] = modulovelocidad*sin(phii);
 
 
    /*Colisión con las paredes*/
    for (int t = 1; t < Tmax; t++) {
        x1[0] = x[i];
        y1[0] = y[i];
        x1[t] = x1[t-1] + Vx[i]*dt;
        y1[t] = y1[t-1] + Vy[i]*dt;
 
        if (x1[t] < R) {
            Vx[i] = -Vx[i];
            x1[t] = 2*R - x1[t];
            pi = pi+1;
        }
        if (x1[t] > (L-R)) {
            Vx[i] = -Vx[i];
            x1[t] = 2*(L-R) - x1[t];
            pi = pi+1;
        }
        if (y1[t] < R) {
            Vy[i] = -Vy[i];
            y1[t] = 2*R - y1[t];
            pi = pi+1;
        }
        if (y1[t] > (L-R)) {
            Vy[i] = -Vy[i];
            y1[t] = 2*(L-R) - y1[t];
            pi = pi+1;
        }
 
 
    //Collision entre partículas
        for (int j = 1+t; j < N; j++) {
            double rij = sqrt(pow(x1[t]-x1[j],2)+pow(y1[t]-y1[j],2)); //Distancia entre dos partículas
            if (rij <= 2*R) { //Si la distance es inferior a dos radios, las partículas chocarán entre ellas.
                Vx[t] = Vx[j];
                Vy[t] = Vy[j];
                Vx[j] = Vx[t];
                Vy[j] = Vy[t];
 
            }
 
        }

Creo que uno de mis errores es que debería invertir los bucles for de i y de t pero no he conseguido hacerlo bien.

Agradecería muchísimo cualquier tipo de ayuda que me hiciese salir de este bucle de dudas infinito del que no puedo salir.

Muchísimas gracias,
Ainhoa
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alfil
Val: 4.344
Oro
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Colisiones entre esferas duras en c++

Publicado por Alfil (1444 intervenciones) el 08/12/2019 21:21:06
Te faltan las bibliotecas ( #include <iostream> ), el int main(), la representación en pantalla de los datos, ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 3
Ha disminuido su posición en 6 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Colisiones entre esferas duras en c++

Publicado por Ainhoa (2 intervenciones) el 08/12/2019 21:23:47
Hola,
Gracias por tu respuesta.

Lo sé, sólo he puesto aquí la parte del código que se encarga de las colisiones. Está dentro de un int main() compuesto de otras funciones. El programa es en realidad mucho más largo pero me ha parecido innecesario copiarlo entero.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Colisiones entre esferas duras en c++

Publicado por Juan Navarrete (1 intervención) el 17/04/2021 22:11:39
Pudiste solucionarlo?¡
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar