Tabrakan 3d di matlab

Saya sedang mengembangkan sistem seperti ini: Saya memiliki sebuah bola dengan banyak molekul di dalamnya. Jika molekul bertumbukan, arah barunya perlu dihitung ulang, begitu juga jika molekul bertumbukan dengan dinding bola.
Saya sudah mempunyai dua matriks: satu dengan koordinat semua partikel dan satu lagi dengan koordinat partikel dinding bola. Ini adalah bagian dari algoritma saya.

% Coordinates of the wall of the sphere
theta=linspace(0, 2*pi, 25);
phi=linspace(0, pi, 25);
x_sph=r_sph.*cos(theta).*sin(phi);
y_sph=r_sph.*sin(theta).*sin(phi);
z_sph=r_sph.*cos(phi);
[x_sph' y_sph' z_sph'];


itmax=100
for it=(1:itmax);
    for i3=1:500
        for j3=1:500
            if i3~=j3
               dist1(i3,j3,it)=sqrt((balls_in_sphere(i3,1)-balls_in_sphere(j3,1))^2+(balls_in_sphere(i3,2)-balls_in_sphere(j3,2))^2+(balls_in_sphere(i3,3)-balls_in_sphere(j3,3))^2);
               if dist1(i3,j3,it)<=d

                %recalculate the new directions   ???

               end
            end
        end
        for j3=1:25
            dist2(i3,j3,it)=sqrt((balls_in_sphere(i3,1)-cs(j3,1)^2)+(balls_in_sphere(i3,2)-cs(j3,2)^2)+(balls_in_sphere(i3,3)-cs(j3,3)^2)); 
%comparative between the coordinates of the balls inside the sphere and the points of the sphere

            if dist2(i3,j3,it)<=d
              %if there is a collision, recalculate the directions   ???

            end
        end
    end
    balls_in_sphere1=balls_in_sphere2;
end

Saya akan sangat berterima kasih jika ada yang membantu saya. Saya telah mencoba menyelesaikannya selama berminggu-minggu, tetapi tidak berhasil.


person mauro.0312    schedule 15.05.2015    source sumber


Jawaban (1)


Saya hanya dapat memberi Anda beberapa "saran":

  • masalahnya rumit, Anda bisa memulai dengan skenario 2D dengan sedikit partikel dan persegi atau segi lima (bukan bola)
  • pertimbangkan elastic collision
  • Anda harus memberi partikel massa dan kecepatan (untuk diuraikan pada komponen X dan Y)
  • Anda harus menambahkan iterasi loop eksternal sehubungan dengan waktu simulasi (pada setiap iterasi t=t+dt)
  • pada setiap iterasi, hitung posisi partikel yang baru
  • kondisi tumbukan dapat ditentukan berdasarkan jarak minimum antara dua partikel (seperti yang sudah Anda lakukan)
  • alih-alih mendefinisikan bola (atau, dalam kasus yang disederhanakan, persegi) dengan titik-titik, pertimbangkan sekumpulan mata jaring (seperti bola sepak) dan evaluasi jarak terhadap mata jaring tersebut.
  • untuk menentukan arah baru partikel, setelah tumbukan, pertimbangkan komposisi vektor kecepatan: Anda dapat dengan mudah menemukan rumusnya di Internet (misalnya http://bolvan.ph.utexas.edu/~vadim/Classes/2014s/collisions.pdf

Setelah Anda memiliki solusi stabil untuk 2D, Anda dapat menambahkan dimensi ketiga.

Semoga ini membantu.

person il_raffa    schedule 16.05.2015
comment
- alih-alih mendefinisikan bola (atau, dalam kasus yang disederhanakan, persegi) dengan titik, pertimbangkan sekumpulan mata jaring (seperti bola sepak) dan evaluasi jarak terhadap mata jaring tersebut. Bisakah Anda membantu saya melakukan ini? Saya benar-benar tidak tahu algoritma untuk itu! - person mauro.0312; 18.05.2015