这是代码:
function boid1(n,eta)
%generates boids in a field
n=input( 'input n ') ;eta=input(' input eta' );
range=0.2;
speed =0.03;
TIME= 300;
density=10;
RUNS= 1;
fieldsize= sqrt (n/density) ;
pos = fieldsize*rand(n,2) ;
heading= 2*pi*rand(n,1) ;
relposX= zeros (n) ;
relposY= zeros (n) ;
neighbours = zeros (n) ;
RelHead= zeros (n,1) ;
B = zeros(n,1) ;
newHeading = zeros (n,1) ;
newPos = zeros(n,2);
meanHeading = zeros (TIME,1) ;
deviationMean = zeros (n,TIME) ;
for run=1:RUNS
for time=1:TIME
for i=1:n
for j=1:n
relposX(i,j)= abs(pos(i,1)-pos(j,1));
relposY(i,j)= abs(pos(i,2)-pos(j,2));
if(sqrt(relposX(i,j)^2 + relposY(i,j)^2) <= range)
neighbours (i,j)=1;
end
end
end
for i=1:n
for j=1:n
if (neighbours (i,j)==1)
relheading (i,j)= heading(j,1)-heading (i,1) ;
end
end
end
RelHead= sum (relheading,2) ;
for i=1:n
while RelHead(i,1) <-pi
RelHead(i,1)= RelHead(i,1) + pi;
end
while RelHead(i,1) > pi
RelHead(i,1)= RelHead(i,1)-pi;
end
end
noise = (rand(n,1)*eta)-eta/2;
newHeading(:,1)= heading(:,1) + RelHead(:,l)./sum(neighbours,2)+noise(:,1);
newPos(:,1)= pos(:,1) + cos(newHeading(:,l))*speed;
newPos(:,2)= pos(:,2) + sin(newHeading(:,1) )*speed;
for k=1:n
while newPos(k,1) < 0
newPos(k,1)= newPos(k,1) + fieldsize;
end
while newPos(k,1) >= fieldsize
newPos(k,1)= newPos(k,1)- fieldsize;
end
while newPos(k,2) < 0
newPos(k,2)= newPos(k,2) + fieldsize;
end
while newPos(k,2) >= fieldsize
newPos(k,2) = newPos(k,2)-fieldsize;
end
end
heading=newHeading;
pos = newPos;
meanHeading(time,1)= mean(heading,1);
deviationMean(time,1) = mean(abs(meanHeading(time,l)-heading( :,1))) ;
scatter(pos(:,1),pos(:,2),'xr');
axis([0 fieldsize 0 fieldsize] ); xlabel(time );
M(time) = getframe;
end
runDev(:,run)= deviationMean(:,1);
end
%plot (runDev)
movie2avi(M,'boidtest.avi','quality',100)