Update a for loop with if statements

1 次查看(过去 30 天)
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