Filter löschen
Filter löschen

Time updated plot has a triangle instead of square

1 Ansicht (letzte 30 Tage)
Marios Christofides
Marios Christofides am 30 Jul. 2020
I wrote a program to produce a time updated plot of two particles. The next position for B is a triangle instead of a square. Does anyone have a fix?
ntrail = 5000;
%tic used to time the code
for trail = 1:1:1000
nsteps = 5000;collision_flag = 0; k = 0;
%Initial Position of A and B
xa = -5; xak = xa; xb = 5; xbk = xb; %For Part D, replace xa and xb with (-4,0) or (-3,0) to simulate them closer together.
ya = 0; yak = ya; yb = 0; ybk = yb;
BC = [5,-5,-5,5];%Set a boundary position
while collision_flag == 0 && k < 1000
[xakp1, yakp1] = RandWalk_2D(xak,yak,BC);
[xbkp1, ybkp1] = RandWalk_2D(xbk,ybk,BC);
%Create Particle A on Grid for Step(k)
xakval = [xak-.5, xak+.5, xak+.5, xak-.5];
yakval = [yak-.5, yak-.5, yak+.5, yak+.5];
%Create Particle A on Grid for Step(k+1)
xakvalp1 = [xakp1-.5, xakp1+.5, xakp1+.5, xakp1-.5];
yakvalp1 = [yakp1-.5, yakp1-.5, yakp1+.5, yakp1+.5];
%Create Particle B on Grid for Step(k)
xbkval = [xbk-.5, xbk+.5, xbk+.5, xbk-.5];
ybkval = [ybk-.5, ybk-.5, ybk+.5, ybk+.5];
%Create Particle B on Grid for Step(k+1)
xbkvalp1 = [xbkp1-.5, xbkp1+.5, xbkp1+.5, xbkp1-.5];
ybkvalp1 = [ybkp1-.5, ybkp1-.5, xbkp1+.5, ybkp1+.5];
figure(1)
hold on
xlim([-5.5,5.5,])
ylim([-5.5,5.5,])
fill(xa,ya,'r')
fill(xakval,yakval,'r') %current step A
fill(xakvalp1, yakvalp1, 'b')%next step for A
fill(xbkval,ybkval,'y') %current step B
fill(xbkvalp1, ybkvalp1, 'p')%next step for B %For problem C comment
%out the next step so B stays in one place.
title('Initial Position of A and B')
title('Final Position of A and B')
hold off
%Update the New Position for Step(k+1)
xak = xakp1; yak = yakp1;
xbk = xbkp1; ybk = ybkp1; %For problem C comment out the update value for B.
k = k+1;
if xak == xbk && yak == ybk
collision_flag = 1;
niter = k;
end
end
end
medval = median(niter);
fprintf("Median = %d\n", medval);
%Time = toc
function [x,y] = RandWalk_2D(x0,y0,BC)
r = rand;
if r<0.2
x = x0;
y = y0+1;
if y >= BC(1); y = BC(1);
end
else if 0.2 < r && r <= 0.4;
x = x0;
y = y0-1;
if y <= BC(2);
y = BC(2);
end
elseif 0.4< r && r<=0.6
x = x0 - 1;
y = y0;
if x<= BC(3); x = BC(3);
end
elseif 0.6 < r && r <= 0.8
x = x0+1; y = y0;
if x >= BC(4)
x = BC(4);
end
elseif 0.8<r
x = x0; y = y0;
end
end
end

Antworten (1)

Marios Christofides
Marios Christofides am 30 Jul. 2020

Kategorien

Mehr zu Vector Fields finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by