Verfasst am: 12.01.2016, 16:21
Titel: Streckenberechnung aus x-y-Koordinaten
Hallo liebe Forengemeinde,
ich hoffe der Beitrag ist im Richtigen Bereich, es ist mein erster.
zur Idee meiner Funktion. Ich möchte die Länge einer Strecke kummulativ in einen Vektor speichern und in einem Plot die x oder y Koordinaten des Weges, die ich gegeben habe als Funktion der Strecke ausgeben.
Code:
function[ s_rand ] = s_rand( x , y )
%s_rand Berechnet kummulativ einen Vektor der die Strecke für die
%Randpunkte der Strecke ausgibt.
% Detailed explanation goes here
%s_rand = zeros(size(x)); % Erstellung des Vektors in geeigneter Größe
%Erstellung des Vektors
for k = 1:size(x)
k=1;
%Unterscheidungen ob x,y wächst oder sinkt um die Summe für den Weg
%korrkt zu bilden
if(x(k+1)>x(k))%x wächst
if(y(k+1)>y(k))%y wächst
s_rand = cumsum(sqrt((x(k+1)-x(k))^2+(y(k+1)-y(k))^2));
break end if(y(k+1)< y(k))% y sinkt
s_rand = cumsum(sqrt((x(k+1)-x(k))^2+(y(k)-y(k+1))^2));
break end end if(x(k+1)< x(k))%x sinkt
if(y(k+1)< y(k))%y wächst
s_rand = cumsum(sqrt((x(k)-x(k+1))^2+(y(k)-y(k+1))^2));
break end if(y(k+1)>y(k))%y sinkt
s_rand = cumsum(sqrt((x(k)-x(k+1))^2+(y(k+1)-y(k))^2));
break end end
s_rand;
end
was immer zu folgender Fehlermeldung führt:
>> s_rand (x,y)
Subscript indices must either be real positive integers or logicals.
ich verstehe jetzt leider nicht ganz wo mein Fehler liegt. Die Eingaben für x_rand und y_rand sollten doch integers sein oder?
Die if-Bedingungen habe ich so geschrieben, dass der die Strecke auch tatsächlich immer größer wird...
Vielen Dank schonmal für das auseinandersetzen mit meinem Code. Falls euch Verbesserungen an meiner "Schreibweise" beim Code einfallen bin ich dafür ebenfalls sehr dankbar.
da hast du recht. Habe ich nun vor die Schleife gesetzt, da es initiert werden muss oder?
Error using s_rand
Too many output arguments.
Error in x_s (line 7)
sx = s_rand(x_rand, y_rand);
Code:
function[] = s_rand( x , y )
%s_rand Berechnet kummulativ einen Vektor der die Strecke für die
%Randpunkte der Strecke ausgibt.
% Detailed explanation goes here
weg = zeros(size(x), 1) ; % Erstellung des Vektors in geeigneter Größe
%Unterscheidungen ob x,y wächst oder sinkt um die Summe für den Weg
%korrkt zu bilden
if(x(k+1)>x(k))%x wächst
if(y(k+1)>y(k))%y wächst
weg = cumsum(sqrt((x(k+1)-x(k))^2+(y(k+1)-y(k))^2));
break end if(y(k+1)< y(k))% y sinkt
weg= cumsum(sqrt((x(k+1)-x(k))^2+(y(k)-y(k+1))^2));
break end end if(x(k+1)< x(k))%x sinkt
if(y(k+1)< y(k))%y wächst
weg = cumsum(sqrt((x(k)-x(k+1))^2+(y(k)-y(k+1))^2));
break end if(y(k+1)>y(k))%y sinkt
weg = cumsum(sqrt((x(k)-x(k+1))^2+(y(k+1)-y(k))^2));
break end end
weg;
end
function[ weg ] = s_rand( x , y )
%s_rand Berechnet kummulativ einen Vektor der die Strecke für die
%Randpunkte der Strecke ausgibt.
weg = zeros(size(x),1) ; % Erstellung des Vektors in geeigneter Größe % Belegung des Vektors
k=0;
for k = 1:size(x) if(k>1)
weg(k) = weg(k-1) + sqrt((x(k)-x(k-1))^2+(y(k)-y(k-1))^2);
end if(k==1)
weg(k) = sqrt((x(k))^2+(y(k))^2);
end
weg;
end
Gibt es eine Möglichkeit, wie ich die zwei if's entfernen könnte, einfach um den Code weiter zu verkürzen? denn auf x(k-1) kann ich ja nicht zugreifen bei k==1
um die x und y Werte als Funktion des bis dahin zurückgelegten Weges anzeigen zu lassen. Diese mach ich dann zu Splines um die Krümmung und weiteres zu berechnen
Wenn ich die Funktion mit diff verwende bekomme ich mehrere Fehlermeldungen
Warning: Input arguments must be scalar.
> In s_rand at 4
In x_s at 6 Error using chckxy (line 89)
The number of sites, 6, is incompatible with the number of values, 7.
Error in spline (line 54)
[x,y,sizey,endslopes] = chckxy(x,y);
function[ weg ] = s_rand( x , y )
%s_rand Berechnet kummulativ einen Vektor der die Strecke für die
%Randpunkte der Strecke ausgibt.
weg = zeros(size(x),1) ; % Erstellung des Vektors in geeigneter Größe % Belegung des Vektors
k=0;
for k = 1:size(x)
so sieht es bei mir aus.
eigentlich sieht es bei dir gar nicht so schlecht aus. schreibst du in den t vektor den weg vektor aus der funktion?
wusste ich nicht, dass es so funktioniert wie du das gemacht hattest.
aber bei dir stimmt es ja mit dem überein was du willst oder! Du hast auf der y-Achse deine x-Werte - auf der x-Achse den Weg und den spline schön durch gezogen!
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.