我已經編寫了一個代碼來模擬2d框中的圓形顆粒的運動。每當他們從箱子中移出時,我都把它們放在箱子裏面,靠近牆壁。我想在代碼中添加粒子的直徑(2R),這意味着當兩個圓的中心之間的距離變得小於2R時,它們沿着連接它們中心的直線分開,這樣圓的中心之間的距離變成等於2R。模擬在Matlab中不能碰撞到彼此的隨機步行者
任何人都可以提出一個代碼,以防止重疊的粒子?
這是我的代碼在重疊不考慮:
clear all
close all
l = 224; nn = 800; %number of particles
time = 1000; dd = 1;
x= l*rand(1,nn);
y= l*rand(1,nn);
for t = 1:time;
x= x + rand(1,nn)-0.5* ones(1,nn);
y=y+rand(1,nn)-0.5* ones (1,nn);
index = (x < 0); x(index) = abs(normrnd(0,1,1,nnz(index)));
index = (y < 0); y(index) = abs(normrnd(0,1,1,nnz(index)));
index = (x > l); x(index) = l-abs(normrnd(0,1,1,nnz(index)));
index = (y > l); y(index) = l-abs(normrnd(0,1,1,nnz(index)));
end
所以每個粒子行進在一條直線上,直到它與牆壁接觸,當「反彈」,並且要還包括顆粒的粒子碰撞? – Wolfie
每一步的方向和長度都沒有變化(我用隨機數來做)。當兩個圓的中心之間的距離變得小於2R時,它們沿着連接它們中心和距離的線分開的圓心等於@Wolfie –
你能幫忙嗎? @Wolfie –