การชนกันของสามมิติบน Matlab

ฉันกำลังพัฒนาระบบเช่นนี้ ฉันมีทรงกลมที่มีโมเลกุลมากมายอยู่ข้างใน หากโมเลกุลชนกัน จะต้องคำนวณทิศทางใหม่อีกครั้ง รวมทั้งชนกับผนังทรงกลมด้วย
ฉันมีเมทริกซ์สองตัวอยู่แล้ว ตัวหนึ่งมีพิกัดของอนุภาคทั้งหมด และอีกตัวหนึ่งมีพิกัดของ ผนังของทรงกลม นี่คือส่วนหนึ่งของอัลกอริทึมของฉัน

% 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

ฉันจะขอบคุณมากถ้ามีคนช่วยฉัน ฉันพยายามแก้ไขมาหลายสัปดาห์ แต่ก็ไม่ประสบความสำเร็จ


person mauro.0312    schedule 15.05.2015    source แหล่งที่มา


คำตอบ (1)


ฉันสามารถให้ "ข้อเสนอแนะ" แก่คุณได้:

  • ปัญหานั้นซับซ้อน คุณอาจเริ่มต้นด้วยสถานการณ์ 2 มิติที่มีอนุภาคน้อยและเป็นสี่เหลี่ยมจัตุรัสหรือห้าเหลี่ยม (แทนที่จะเป็นทรงกลม)
  • พิจารณา elastic collision
  • คุณควรให้อนุภาคมีมวลและความเร็ว (เพื่อสลายตัวในองค์ประกอบ X และ Y)
  • คุณควรเพิ่มการวนซ้ำภายนอกตามเวลาการจำลอง (ในการวนซ้ำแต่ละครั้ง t=t+dt)
  • ในการวนซ้ำแต่ละครั้ง ให้คำนวณตำแหน่งใหม่ของอนุภาค
  • สภาพการชนสามารถกำหนดได้ด้วยความเคารพต่อระยะห่างขั้นต่ำระหว่างอนุภาคสองตัว (ดูเหมือนว่าคุณได้ทำไปแล้ว)
  • แทนที่จะกำหนดทรงกลม (หรือในกรณีอย่างง่าย สี่เหลี่ยมจัตุรัส) ด้วยจุดต่างๆ ให้พิจารณาชุดของตาข่าย (เช่น ลูกฟุตบอล) และประเมินระยะทางด้วยความเคารพต่อพวกมัน
  • เพื่อกำหนดทิศทางใหม่ของอนุภาค หลังจากการชน ให้พิจารณาองค์ประกอบของเวกเตอร์ความเร็ว: คุณสามารถค้นหาสูตรบนอินเทอร์เน็ตได้อย่างง่ายดาย (เช่น http://bolvan.ph.utexas.edu/~vadim/Classes/2014s/collisions.pdf

เมื่อคุณมีโซลูชันที่มั่นคงสำหรับ 2D แล้ว คุณสามารถเพิ่มมิติที่สามได้

หวังว่านี่จะช่วยได้

person il_raffa    schedule 16.05.2015
comment
- แทนที่จะกำหนดทรงกลม (หรือสี่เหลี่ยมจัตุรัส ในกรณีที่อธิบายอย่างง่าย) ด้วยจุด ให้พิจารณาชุดของตาข่าย (เช่น ลูกฟุตบอล) และประเมินระยะทางด้วยความเคารพ คุณช่วยฉันทำสิ่งนี้ได้ไหม ฉันไม่มีความคิดเกี่ยวกับอัลกอริทึมของมันเลยจริงๆ! - person mauro.0312; 18.05.2015