Verfasst am: 14.11.2007, 13:01
Titel: variable Spaltenanzahl von Matrizen
Servus,
hätte mal eine Frage:
in folgender Schleife werden die ID's jener Punkte eines 2-D-Punkthaufens, die sich in einem gewissen Teststreifen mit Breite 2*'thr_range' zwischen 2 vordefinierten Eckpunkten E1(a(1),b(1)) und E2(a(2),b(2)) befinden, gesucht und in der Variable 'idxpkt' gespeichert.
Zur schnelleren Suche der Punkte über den 'find'-Befehl werden die Punkte mit der Rotationsmatrix 'R' [Dimension: 2x2] in ein neues Koordinatensystem gedreht, dessen x-Achse der Richtung der Achse E1 nach E2 entspricht.
Die Koordinaten des Punkthaufens im neuen System befinden sich in den Vektoren 'xN' und 'yN' (vorab berechnet), die Koordinaten der Eckpunkte im neuen System in 'abN'.
Code:
j=1;
o=1;
for i=1:k
% Transformation der Eckpunkte ins neue System % abN [2x2] enthält die x- und y-Koordinaten der Eckpunkte
abN=R(j:j+1,:)*[a(o) a(o+1); b(o) b(o+1)];
if((abN(2,1)-abN(2,2)) > 1e-10) disp('evtl. ERROR in Trafo!!!') return end % check for right order: p1 = left, p2 = right % idxpkt: ids der im Bereich befindlichen Koordinaten if( abN(1,1) > abN(1,2))
idxpkt = find((xN(o,:) >= abN(1,2) & xN(o,:) <= abN(1,1)) & (yN(o,:) >= abN(2,1)-thr_range & yN(o,:) <= abN(2,1)+thr_range));
else
idxpkt = find((xN(o,:) >= abN(1,1) & xN(o,:) <= abN(1,2)) & (yN(o,:) >= abN(2,1)-thr_range & yN(o,:) <= abN(2,1)+thr_range));
end % idx=[idxpkt, NaN];
j=j+2;
o=o+1;
end
Das Problem ist nun dass 'idxpkt' mit jedem Durchlauf eine jeweils unterschiedliche Länge besitzt und daher nicht so leicht mit 'idxpkt ( i , : )=...' zu deklarieren ist.
Wie kann ich also alternativ dazu:
- für jeden Schleifendurchlauf der Variable 'idxpkt' einen anderen Namen vergeben? Also z.B. idxpkt1, idxpkt2, idxpkt3,... und sie später wieder dynamisch ansprechen.
oder
- für jeden Schleifendurchlauf je eine Reihe der Matrix 'idxpkt' reservieren, wobei fehlende Elemente (aufgrund der variablen Spaltenanzahl) mit 'NaN' oder '0' aufgefüllt werden?
oder
- alle ID's aller Schleifendurchläufe in einen Vektor 'idxpkt' speichern wobei die einzelnen Schleifendurchläufe durch z.B. 'NaN' voneinander zur späteren Trennung markiert werden?
Oder gibts noch andere Lösungsmöglichkeiten?
Eine würd mir schon reichen ...
Das sind mir die liebsten, die ihre Fragen selbst beantworten
Dynamische Variablennamen haben wir hier schon öfter besprochen (vielleicht mal die Suchfunktion nutzen), aber Deine Lösung ist gewiss die eleganteste. Das mit der Suche wäre also eher ein Tipp für's nächste Mal.
Herzliche Grüße
Bijick
_________________
>> why
Einstellungen und Berechtigungen
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.