圆形matlab中的移动粒子

时间:2016-03-17 07:00:42

标签: matlab loops for-loop particles

所以我需要在圆圈内的随机位置每步生成10个粒子,以便在随机方向上移动,当它撞到主圆的墙壁时,它会反弹而不会改变速度。

我定义了大圆圈:

yc=0;
rc=5;
ang_c=0:0.01:2*pi; 
xpc=rc*cos(ang_c);
ypc=rc*sin(ang_c);
plot(xc+xpc,yc+ypc,'k'); 

现在只绘制一个粒子:

r=0.05;
x=rand;
y=rand;

ang=0:0.01:2*pi; 
xp=r*cos(ang);
yp=r*sin(ang);
plot(x+xp,y+yp,'b'); 

现在如何让粒子在圆圈中移动?

1 个答案:

答案 0 :(得分:0)

以下是算法概要

  • 定义圆(原点,半径)
  • 创建一个nParticles-by-2数组particlePositions。用圈内的随机坐标填充
  • 绘制粒子位置,保持plot
  • 返回的手柄
  • 创建一个nParticles-by-2数组particleSpeeds。用随机速度向量(即x-和y-分量)填充它。确保向量的范数远小于圆的半径,至少最初是这样。
  • 编写一个更新粒子位置的循环:
    • particlePositions = particlePositions + particleSpeeds;
    • 对于任何particlePosition将位于圆外,计算粒子与圆相交的位置,并反映该粒子的particleSpeed。这需要一些摆弄三角法。
    • 更新情节:set(plotHandle,'xData',particlePositions(:,1),'yData',particlePositions(:,2))