Update a for loop with if statements

조회 수: 1 (최근 30일)
gamer
gamer 2021년 6월 14일
답변: Joseph Cheng 2021년 6월 14일
Hello community,
thanks for trying to help me! I would be so happy if this will work.
First of all I created n spheres in a 15 x 7.5 field. They should move with the speed of v, which is always reduced by 0.001
Now thr question: How is it possible to change the direction ( make the element of v negative) when the spheres hit the borders. I tried it like this but it just changes the direction for only "one moment"
a = 15;
b = 7.5;
p=[r + (a-2*r)*rand(n,1),r + (b-2*r)*rand(n,1)];
v = rand(n,2);
for f = 1:1000
temp = v - 0.001 ;
temp(temp < 0.001) = 0 ;
v = temp;
if ~any(v(:))
break
end
p = p+v;
for i = 1:n
% check if ball hit borders
if (p(i,1)<=r)
p(i,1)=r; v(i,1) = -v(i,1); % new direction of speed
end % unfortunately only for one moment
if (p(i,1)>=(a-r))
p(i,1)=(a-r); v(i,1) = -v(i,1);
end
if (p(i,2)<=r)
p(i,2)=r; v(i,2) = -v(i,2);
end
if (p(i,2)>=(b-r))
p(i,2)=(b-r); v(i,2) = -v(i,2);
end
end
end

채택된 답변

Joseph Cheng
Joseph Cheng 2021년 6월 14일
Without running your code i think you can create a sign variable of (-1)^(0 or 1) which switches between 0 or 1 depending on when it hits. then you keep using that value. This will also give you a variable that changes sign for either adding or subtracting the velocity slow down.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by