简体   繁体   English

Matlab上的3D碰撞

[英]3d collision on matlab

I'm developing a system like this: I have a sphere with many molecules inside it. 我正在开发一个像这样的系统:我有一个内部有许多分子的球体。 If the molecules collide, their new directions need to be recalculated, as well as if they collide with the walls of the sphere. 如果分子发生碰撞,则需要重新计算其新方向,以及它们是否与球体壁碰撞。
I have already two matrices: one with the coordinates of all the particles and another with the coordinates of the walls of the sphere. 我已经有了两个矩阵:一个具有所有粒子的坐标,另一个具有球体壁的坐标。 Here is a part of my algorithm. 这是我算法的一部分。

% 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

I'd be very thankful if someone helps me. 如果有人帮助我,我将非常感激。 I've been trying to solve for weeks, without success. 我已经尝试解决了数周,但没有成功。

I can just provide you with some "suggestions": 我可以为您提供一些“建议”:

  • the problem is complex, you might start with a 2D sccenario with few particles and a square or a pentagon (instead of a sphere) 问题很复杂,您可能会从一个二维场景开始,该场景只有很少的粒子和一个正方形或一个五边形(而不是球体)
  • consider elastic collision 考虑elastic collision
  • you should give the particles a mass and a speed (to be decomposed on its X and Y component) 您应该给粒子一个质量和一个速度(要在其X和Y分量上分解)
  • you should add an external loop iterating with respect to the simulation time (at each iteration t=t+dt ) 您应该添加一个相对于仿真时间进行迭代的外部循环(每次迭代t=t+dt
  • at each iteration, compute the new position of the particles 在每次迭代中,计算粒子的新位置
  • the collision condition could be defined with respect to a minimum distance between two particles (as it seems you've already done) 可以相对于两个粒子之间的最小距离来定义碰撞条件(看来您已经完成)
  • instead of defining the sphere (or, in the semplified case, the square) by points consider a set of meshes (like a soccer balls) and evaluate the distance with respect to them 而不是通过点定义球体(或在简化的情况下为正方形),而是考虑一组网格(例如足球)并评估相对于它们的距离
  • to determine the new direction of the particles, following a collision, consider the composition of the velocity vectors: You can easily find the formulas on Internet (eg http://bolvan.ph.utexas.edu/~vadim/Classes/2014s/collisions.pdf 要确定碰撞后粒子的新方向,请考虑速度矢量的组成:您可以在Internet上轻松找到公式(例如, http//bolvan.ph.utexas.edu/~vadim/Classes/2014s/ collisions.pdf

Once you have a stable solution for 2D you can add the third dimension. 一旦有了稳定的2D解决方案,就可以添加第三维。

Hope this helps. 希望这可以帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM