필터 지우기
필터 지우기

Time updated plot has a triangle instead of square

조회 수: 1 (최근 30일)
Marios Christofides
Marios Christofides 2020년 7월 30일
답변: Marios Christofides 2020년 7월 30일
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

답변 (1개)

Marios Christofides
Marios Christofides 2020년 7월 30일

카테고리

Help CenterFile Exchange에서 Vector Fields에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by