2017-10-23 1 views
0

Ich habe 2 Vektoren pos_x und pos_y die 1xn Form haben. Beide dieser Vektoren haben auch -1 (keine Positionsdaten) in ihnen. Ich möchte den Abstand zwischen aufeinanderfolgenden Punkten berechnen. Hier ist der Code, den ich zu tun mit, dass:Finden Sie den Abstand zwischen Koordinatenpunkten in der Liste zusammen mit fehlenden Werten

distance = [-1]; 
for i=2:length(pos_x) 
    if pos_x(i-1)==-1 || pos_x(i)==-1 
     distance = [distance -1]; 
    elseif (pos_x(i-1)~=-1) || (pos_x(i)~=-1) 
     distance = [distance sqrt((pos_x(i)-pos_x(i-1))^2 + (pos_y(i)-pos_y(i-1))^2)]; 
end 
end 

Bei einem gegebenen Eingangs-Array: pos_x=[1 2 -1 3 4 -1 5]; and pos_y=[1 2 -1 3 4 -1 5];, erhalte ich die folgende Ausgabe: [-1 1.414 -1 -1 1.414 -1 -1] während ich die folgende Ausgabe will: [-1 1.414 -1 1.414 1.414 -1 1.414]

Wie kann die Schleife geändert, um so eine Änderung unterzubringen?

Antwort

2

Sie haben ein Problem mit der Bedingung, die für jede Wiederholung, die aktuelle Position und die vorherige Position überprüft, so dass Sie nach jeder gewünschten -1 unerwünschte -1 erhalten.

Sie können es so machen:

pos_x=[1 2 -1 3 4 -1 5]; 
pos_y=[1 2 -1 3 4 -1 5]; 
distance=zeros(1,length(pos_x)-1)-1; 
m=pos_x~=-1; 
distance(m)=[-1 sqrt(diff(pos_x(m)).^2+diff(pos_y(m)).^2)] 

distance = 

    -1.0000 1.4142 -1.0000 1.4142 1.4142 -1.0000 1.4142 
Verwandte Themen