# During the moving random points, I don't see animation, instead I see re scattering?

5 views (last 30 days)
omar th on 2 Jun 2022
Commented: omar th on 8 Jun 2022
Please, would you tell me why the random points is not moving, they just re-scatter in each time step, while I am trying to animate thm or make them moving continously. if you have any help I would appreciat it , thanks in advance
% Initial direction/velocity of the points
velocity = 28.8/3.6;
% Create random starting locations within the circle
Totaltime =10;
direction = rand(npts, 1) * 2 *pi;
for Timestep=1:1:Totaltime
theta = rand(npts, 1) * 2*pi;
g = 0.5 * radius + 0.5 * radius * rand(npts,1);
X_x=center(1)+g.*cos(theta);
Y_y=center(2)+g.*sin(theta);
XY = [X_x ,Y_y];
DX = [cos(direction(:)) .* velocity,sin(direction(:)) .* velocity];
XYnew = XY + DX;
% Plot the dots as black markers
hdots = plot(XYnew(:,1), XYnew(:,1),'Marker', '.','Color', 'k','LineStyle', 'none','MarkerSize', 12);
hold on
axis equal
% Plot the circle as a reference
t = linspace(0, 2*pi, 100);
plot(radius * cos(t) + center(1),radius * sin(t) + center(2))
% Update the dot plot to reflect n ew locations
set(hdots, 'XData', XY(:,1), 'YData', XY(:,2))
% Force a r edraw
drawnow
pause (1)
end
##### 2 CommentsShowHide 1 older comment
omar th on 2 Jun 2022
actually this circle just for scattering the points inside it

Walter Roberson on 2 Jun 2022
Your code builds new random points each time step, and directly jump the old points to the new position.
In order to have them visibly move to new positions, you would need to generate intermediate positions and move the points to through those positions.
omar th on 8 Jun 2022
first, Thank you so much for your reply. regards to my question I have used While loop instead of for loop and now the points are moving in one shot, meaning each point moves each one second. the thing that I am trying to do is iterating the the while loop and try to compare the previous state with the current state. for example if i wanted to obtain X inside the loop I want compare X(i)=current state with X(i-1)=past state
% Initial direction/velocity of the points
velocity = 28.8/3.6;
velocity2 = 28.8/3.6;
theta = rand(npts, 1) * 2*pi;
g = 0.5 * radius + 0.5 * radius * rand(npts,1);
X_x=center(1)+g.*cos(theta);
Y_y=center(2)+g.*sin(theta);
XY = [X_x ,Y_y];
theta2 = rand(npts2, 1) * 2*pi;
g2 = 0.5 * radius2 + 0.5 * radius2 * rand(npts2,1);
X_x2=center2(1)+g2.*cos(theta2);
Y_y2=center2(2)+g.*sin(theta2);
XY2 = [X_x2 ,Y_y2];
hfig = figure('Color', 'w');
hax = axes('Parent', hfig);
hdots(1) = plot(XY(1,1),XY(1,2),'Parent', hax,'Marker', '.','Color', 'k','LineStyle', 'none','MarkerSize', 10);
hold(hax, 'on')
axis(hax, 'equal')
hdots(2) = plot(XY2(1,1),XY2(1,2),'Parent', hax,'Marker', '.','Color', 'r','LineStyle', 'none','MarkerSize', 10);
hold(hax, 'on')
axis(hax, 'equal')
% Plot the circl e as a reference
t = linspace(0, 2*pi, 100);
plot(radius * cos(t) + center(1),radius * sin(t) + center(2))
while all(ishghandle(hdots)) %Timestep=1:1:Totaltime
direction2 = rand(npts, 1) * 2 *pi;
direction = rand(npts, 1) * 2 *pi;
[XY2, direction2] = step(XY2, direction2, velocity2, radius2, center2);
% Plot the dots as black markers
[XY, direction] = step(XY, direction, velocity, radius, center);
% Update the dot plot to reflect n ew locations
set(hdots(2), 'XData', XY2(1,1), 'YData', XY2(1,2))
set(hdots(1), 'XData', XY(1,1), 'YData', XY(1,2))
% Force a r edraw
drawnow
%pause (1)
end

R2018a

### Community Treasure Hunt

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

Start Hunting!