Linie plotten: Koordinaten sortieren aber wonach/wie?
MatthiasHermann
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 27.11.2016, 20:51
Titel: Linie plotten: Koordinaten sortieren aber wonach/wie?
Hallo Leute,
ich stehe gerade vor einem (kleinen?) Problem. Und zwar habe ich mir eine Datenpunktwolke generiert, welche die x- und y-Koordinate einer Linie enthält.
Ansich ist das nun kein Problem, auf dieser Grundlage eine Linie zu plotten.
Das Problem bei der Sache ist nun, dass meine Datenpunkte unsortiert sind, und ich habe keine Ahnung wie ich diese am Vernünftigsten sortieren kann, um die Linie plotten zu können. - Ich habe nun schon einiges mit
sortrows()
versucht, aber bin letztlich nie auf einen grünen Zweig gekommen, da meine Vorstellungskraft endenwollend ist, was das/die Sortierkriterium/-en angeht, da meine Linie ziemlich gekrümmt ist und somit manche x- bzw. y-Koordinaten doppelt vorkommen ...
Das ist das Daten-Array (im Anhang findet ihr die Punkte - ohne Verbindungslinie - geplottet):
... aber wie ordnet man das nun so um, damit letzlich diese Datenpunkte einfach durch eine Linie verbunden werden. (Und nicht wild "herumzackeln", wie es momentan der Fall wäre, wenn ich die Punkte direkt so plotten würde ...)
Vielleicht kann mir jemand von Euch helfen.
Danke jedenfalls schon im Voraus dafür,
du könntest z.B. die Kurve in eine untere und eine obere unterteilen, z.B. bei median(y). Alles <= median(y) gehört zur unteren Kurve, alles >= median(y) zur oberen.
Dann die beiden Kurven nacheinander in der gleichen Farbe plotten.
Grüße,
Harald
MatthiasHermann
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 27.11.2016, 22:01
Titel:
Hallo Harald,
Zitat:
du könntest z.B. die Kurve in eine untere und eine obere unterteilen, z.B. bei median(y). Alles <= median(y) gehört zur unteren Kurve, alles >= median(y) zur oberen.
Hmm. Diese Idee hatte ich auch schon; allerdings bin ich dann an der Umsetzung gescheitert: selbst wenn ich ein Kriterium für den unteren/oberen Kurventeil festlege, bleiben die Punkte danach trotzdem noch "unsortiert", oder verstehe ich das falsch?
Ich hatte in diese Richtung gedacht:
Code:
unterer_teil = [];
oberer_teil = [];
for ii=1:size(testa,1) if testa(ii,ii) <= median(testa)
unterer_teil = [ unterer_teil; testa(ii,ii)];
end
if testa(ii,ii) >= median(testa)
oberer_teil = [ oberer_teil; testa(ii,ii)];
end end
du solltest schon die kompletten Zeilen der oberen oder unteren Kurve zuordnen, basierend auf der y-Spalte (die 2.?).
Dann die beiden Kurventeile sortieren und plotten.
Grüße,
Harald
MatthiasHermann
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 27.11.2016, 22:22
Titel:
Hallo Harald,
jetzt hab' ich mich etwas selbst verwirrt - ich muss in y/z (= x/y von vorher) Koordinaten denken. - D.h. nach der z-Koordinate zuordnen.
Ich habe nun den Code nochmals adaptiert und eigentlich funktioniert es ganz gut, allerdings fehlen mir ein paar Daten nun in der Darstellung ...
(es kann auch gelegentlich vorkommen, dass manche Punkte dieselbe z-Koordinate haben, jenachdem wie "flach" dieses "Zwetschgoid" wird ... - Das ist das, was mir ursächlich die Kopfzerbrechen bereitet hat ...)
MatthiasHermann
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 27.11.2016, 22:29
Titel:
So ...
nochmal :/ ... - also mit dem Code wie ich ihn nun habe, funktionierts ganz gut, allerdings tanzen (vor- und nach der Sortierung) immer ca. 2 Punkte "aus der Reihe" ... - wenn ich die noch irgendwie einordnen könnte. Ach. Das wär' super.
Nun müsstest Du noch erklären, von welchen "immer ca. 2 Punkten" Du meinst, dass sie "aus der Reihe tanzen". Bisher sehen wir nur den Code, der ganz genau das machjt, was man erwartet. Was möchtest Du nun anders haben?
Was bedeutet genau "herumzackeln"? Suchst Du vielleicht für jeden Punkt den nächsten Nachbarn?
dann müsste man wahrscheinlich noch einen mittleren Teil extrahieren, und den nach y-Koordinaten sortieren.
Es dürfte aber einfacher sein, wie von Jan angesprochen den jeweils nächstgelegenen Punkt zu suchen und den vorherigen Punkt dann aus dem Datenset zu entfernen.
Grüße,
Harald
MatthiasHermann
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 30.11.2016, 18:39
Titel:
Hallo,
ich war leider krank, deshalb konnte ich zwischenzeitlich nichts schreiben.
Zitat:
Es dürfte aber einfacher sein, wie von Jan angesprochen den jeweils nächstgelegenen Punkt zu suchen und den vorherigen Punkt dann aus dem Datenset zu entfernen.
Das stimmt. Das ist es eigentlich, was ich machen möchte, also den jeweils nächsten Nachbarn finden, um die Punkte so ordnen zu können, dass man einfach eine Linie Plotten kann.
Mit "zackeln", meinte ich, dass sich aus meinem Code leider eine falsche Sortierung ergibt, z.B. wenn folgende Daten sortiert werden müssen (1 spalte = y; 2-spalte = z; Rechtssystem, z nach unten positiv):
Ich verstehe nach wie vor nicht, was du versuchst. Wozu könnte hier denn der Median nützlich sein und
sortrows
sortiert doch die Reihen nach der ersten Koordinate, was mit Deinem Problem ja nichts zu tun hat.
Die geposteten Daten sind wegen der Kommas nicht verwendbar. Die Absicht Deines Codes kann ich nicht nachvollziehen.
Zitat:
Zitat:
Es dürfte aber einfacher sein, wie von Jan angesprochen den jeweils nächstgelegenen Punkt zu suchen und den vorherigen Punkt dann aus dem Datenset zu entfernen.
Das stimmt. Das ist es eigentlich, was ich machen möchte, also den jeweils nächsten Nachbarn finden, um die Punkte so ordnen zu können, dass man einfach eine Linie Plotten kann.
Ich kann in Deinem Code nichts finden, bei dem Du den Abstand zwischen den Punkten berücksichtigst.
Es gibt bestimmt im Internet veröffentlichten Code zur Bestimmung eines Polygones zu einer Punkt-Wolke. Der Code ist aber auch nicht schwierig zu schreiben: Nimm einen Start-Punkt, berechne die Entfernung zu allen anderen Punkten, wähle den nächsten und mache mit diesem weiter.
Viele Grüße, Jan
MatthiasHermann
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 30.11.2016, 19:33
Titel:
Hallo Jan S,
Zitat:
Ich verstehe nach wie vor nicht, was du versuchst. Wozu könnte hier denn der Median nützlich sein und sortrows sortiert doch die Reihen nach der ersten Koordinate, was mit Deinem Problem ja nichts zu tun hat.
Hm. Eigentlich geht es mir nur darum, dass ich die Datenpunkten, wie ich sie hier schnell im Excel geplottet habe, so sortieren kann, damit sie ein Polygon beschreiben.
Das "median" etc. hatte ich verwendet, da der erste Vorschlag von Harald kam, dass ich die Kurve in einen oberen und unteren Teil splitten könnte etc. ... - aber ich habe mich anscheinend sehr unverständlich ausgedrückt, da ich selber nicht genau wusste, wie ich das Problem beschreiben kann.
Nun denke ich ich kann es: Es geht darum, eine Punktwolke, wie sie vorliegt, so zu sortieren, dass man diese als Polygon darstellen kann.
- Das geht am Einfachsten mit deinem Vorschlag: ich starte z.B. am Punkt links unten und berechne mir jeden Abstand. etc. ...
Ich programmier das mal aus und poste dann den Code. Vielleicht ist er ja für irgendjemand anderem später einmal von Nutzen.
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.