Gibt es eine Möglichkeit, mehrere if-Anweisungen gleichzeitig zu aktivieren. Ich arbeite an einer Simulation und brauche mehrere Punkte, um sich gleichzeitig auf einer Karte zu bewegen. Im Moment habe ich was im Anhang gif (nur die ersten 3 Punkte bewegt sich). Der zweite Punkt sollte sich ungefähr auf halbem Weg durch die erste Punktefahrt bewegen. Schleife ist unter.Matlab - mehrere if-Anweisungen gleichzeitig aktiv
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
Ich habe versucht, mit While-Schleifen/mehr elseif-Anweisungen usw., aber ohne Glück. Dank
Ihr Code ist nicht sehr einfach zu befolgen, er benötigt ein ernsthaftes Refactoring. Bedenken Sie, dass bei jeder Iteration Ihrer äußeren Hauptschleife alles eine Chance haben sollte, sich nur einmal zu bewegen. Also überprüfst du alle Bedingungen für jedes Objekt sequentiell und erlaubst ihnen, sich nur einmal zu bewegen (vielleicht um ein ganzzahliges Vielfaches eines Entfernungsquantums, wo der Multiplikator proportional zur Geschwindigkeit ist, oder du magst deine Diskretisierung klein genug, um die Geschwindigkeit zu kontrollieren indem man Objekte macht, springt n-1 bewegt sich alle n Iterationen). Sie sollten auch nur einen einzigen Aufruf pro Pause "anhalten". – Dan