0
有没有办法让多个if语句一次激活?我正在进行模拟,并且需要多个点一次在地图上移动。目前我有什么是在附加的GIF(只显示前3个点移动)。第二个点应该在第一个点行程的中途开始移动。循环在下面。Matlab - 一次激活多个if语句
for t = 1:120
pause(0.1)
if t == times(1)
while uav1.position(1) ~= event1(2)
pause(0.1)
uav1.position(1) = uav1.position(1) + 5.*(event1(2)./abs(event1(2)));
XY(:,1) = [uav1.position(1),uav2.position(1),uav3.position(1),uav4.position(1),...
uav5.position(1),];
XY(:,2) = [uav1.position(2),uav2.position(2),uav3.position(2),uav4.position(2),...
uav5.position(2),];
set(UAVs, 'XData', XY(:,1), 'YData', XY(:,2));
end
while uav1.position(2) ~= event1(3)
pause(0.1)
uav1.position(2) = uav1.position(2) + 5.*(event1(3)./abs(event1(3)));
XY(:,1) = [uav1.position(1),uav2.position(1),uav3.position(1),uav4.position(1),...
uav5.position(1),];
XY(:,2) = [uav1.position(2),uav2.position(2),uav3.position(2),uav4.position(2),...
uav5.position(2),];
set(UAVs, 'XData', XY(:,1), 'YData', XY(:,2));
end
elseif t == times(2)
while uav2.position(1) ~= event2(2)
pause(0.1)
uav2.position(1) = uav2.position(1) + 5.*(event2(2)./abs(event2(2)));
XY(:,1) = [uav1.position(1),uav2.position(1),uav3.position(1),uav4.position(1),...
uav5.position(1),];
XY(:,2) = [uav1.position(2),uav2.position(2),uav3.position(2),uav4.position(2),...
uav5.position(2),];
set(UAVs, 'XData', XY(:,1), 'YData', XY(:,2));
end
while uav2.position(2) ~= event2(3)
pause(0.1)
uav2.position(2) = uav2.position(2) + 5.*(event2(3)./abs(event2(3)));
XY(:,1) = [uav1.position(1),uav2.position(1),uav3.position(1),uav4.position(1),...
uav5.position(1),];
XY(:,2) = [uav1.position(2),uav2.position(2),uav3.position(2),uav4.position(2),...
uav5.position(2),];
set(UAVs, 'XData', XY(:,1), 'YData', XY(:,2));
end
elseif t == times(3)
while uav3.position(1) ~= event3(2)
pause(0.1)
uav3.position(1) = uav3.position(1) + 5.*(event3(2)./abs(event3(2)));
XY(:,1) = [uav1.position(1),uav2.position(1),uav3.position(1),uav4.position(1),...
uav5.position(1),];
XY(:,2) = [uav1.position(2),uav2.position(2),uav3.position(2),uav4.position(2),...
uav5.position(2),];
set(UAVs, 'XData', XY(:,1), 'YData', XY(:,2));
end
while uav3.position(2) ~= event3(3)
pause(0.1)
uav3.position(2) = uav3.position(2) + 5.*(event3(3)./abs(event3(3)));
XY(:,1) = [uav1.position(1),uav2.position(1),uav3.position(1),uav4.position(1),...
uav5.position(1),];
XY(:,2) = [uav1.position(2),uav2.position(2),uav3.position(2),uav4.position(2),...
uav5.position(2),];
set(UAVs, 'XData', XY(:,1), 'YData', XY(:,2));
end
elseif t == times(4)
while uav4.position(1) ~= event4(2)
pause(0.1)
uav4.position(1) = uav4.position(1) + 5.*(event4(2)./abs(event4(2)));
XY(:,1) = [uav1.position(1),uav2.position(1),uav3.position(1),uav4.position(1),...
uav5.position(1),];
XY(:,2) = [uav1.position(2),uav2.position(2),uav3.position(2),uav4.position(2),...
uav5.position(2),];
set(UAVs, 'XData', XY(:,1), 'YData', XY(:,2));
end
while uav4.position(2) ~= event4(3)
pause(0.1)
uav4.position(2) = uav4.position(2) + 5.*(event4(3)./abs(event4(3)));
XY(:,1) = [uav1.position(1),uav2.position(1),uav3.position(1),uav4.position(1),...
uav5.position(1),];
XY(:,2) = [uav1.position(2),uav2.position(2),uav3.position(2),uav4.position(2),...
uav5.position(2),];
set(UAVs, 'XData', XY(:,1), 'YData', XY(:,2));
end
elseif t == times(5)
while uav5.position(1) ~= event5(2)
pause(0.1)
uav5.position(1) = uav5.position(1) + 5.*(event5(2)./abs(event5(2)));
XY(:,1) = [uav1.position(1),uav2.position(1),uav3.position(1),uav4.position(1),...
uav5.position(1),];
XY(:,2) = [uav1.position(2),uav2.position(2),uav3.position(2),uav4.position(2),...
uav5.position(2),];
set(UAVs, 'XData', XY(:,1), 'YData', XY(:,2));
end
while uav5.position(2) ~= event5(3)
pause(0.1)
uav5.position(2) = uav5.position(2) + 5.*(event5(3)./abs(event5(3)));
XY(:,1) = [uav1.position(1),uav2.position(1),uav3.position(1),uav4.position(1),...
uav5.position(1),];
XY(:,2) = [uav1.position(2),uav2.position(2),uav3.position(2),uav4.position(2),...
uav5.position(2),];
set(UAVs, 'XData', XY(:,1), 'YData', XY(:,2));
end
end
end
drawnow
我已经尝试使用while循环/更ELSEIF语句等,但没有运气。 感谢
你的代码不是很容易遵循,它需要严肃的重构。考虑到这一点,在你的主要外部循环的每一次迭代中,一切都应该有机会移动一次。因此,您可以顺序检查每个对象的所有条件,并允许它们仅移动一次(可能是乘法器与速度成比例的某个距离量程的整数倍,或者可能使您的时间割草小到足以控制速度通过让对象每n次迭代跳过n-1次移动)。你每次迭代也只能有一次“暂停”。 – Dan