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