WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

3D Zeichnung mit Farbzuweisung für Punkten im Raum

 

maximinixxl

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.04.2008, 14:27     Titel: 3D Zeichnung mit Farbzuweisung für Punkten im Raum
  Antworten mit Zitat      
Hallo Freunde,

ich habe noch nie mit MatLab gearbeitet und muss aber für mein Professor mehrere Zeichnungen mit MatLab anfertigen.
Es sind immer ca. 10 000 bis 20 000 Punkten in einem Raum, welcher durch ein spezielles Programm klassifiziert wurden(Gruppenbildung). Nunn sollen die Punkten im Raum nach ihrem Klassen farbig markiert werden und bei 3 Koordinaten und von oben drauf gesehen erkennt man dann verschiedenen färbigen Flächen.

die Daten sehen Beispielhaft in Exel so aus

Farbe x y z
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4


Könnte jemand mir bitte zeigen wie das mit MatLab 7.1 geht???

Ich wäre sehr Dankbar für eure Hilfe.


tompie
Forum-Guru

Forum-Guru


Beiträge: 260
Anmeldedatum: 19.09.07
Wohnort: München
Version: immer alles
     Beitrag Verfasst am: 08.04.2008, 17:02     Titel:
  Antworten mit Zitat      
Hallo,

grundsätzlich gilt: Immer ein Plot pro Farbe. Dann vor dem nächsten Plot das Kommando
Code:
durchführen, sonst wird der Plot wieder überschrieben. Du kannst die xyz-Koordinaten z.B. in cell arrays sammeln und jeder Klasse eine entsprechende Nummer zuordnen, dann kannst Du immer ganz leicht darauf zugreifen.

Beispiel für 2 Klassen:

Code:
x{1}=[1 2 3];
y{1}=[4 5 6];
z{1}=[7 8 9];
x{2}=[10 20 30];
y{2}=[40 50 60];
z{2}=[70 80 90];
plot3(x{1},y{1},z{1},'r.');
hold on;
plot3(x{2},y{2},z{2},'b.');


... oder so ähnlich

Gruß tompie
Private Nachricht senden Benutzer-Profile anzeigen
 
maximinixxl

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.04.2008, 21:04     Titel:
  Antworten mit Zitat      
hallo tompie,

vielen Dank für deine schnelle Antwort. Ich habe nocht nichts testen können, da ich noch nicht im Labor bin. Jedoch befürchte ich, dass ich die Punkte selbst sortieren müsse und das bei 20 000 Punkten ist ein bißchen schlecht.

Es sind 4 Spalten in Excel, 3 davon sind die Daten und die 1. ist die zugehörige Klasse. nur sind die Klassen durcheinander und die zu sortieren würde Wochen dauern.

Ich habe 4 Variablen aus der Tabelle gemacht. Plotten geht auch, aber wie kann man MatLab dazu bringen, der Vektor(Variable) mit der ganzen Klassen automatisch als Farbe den Punkten zu zu ordnen.
Bei deiner Methode müsste ich selbst 9 Variablen kreieren und die punkte dazu angeben, wenn ich dich richtig verstanden habe. Aber ich möchte MatLab selbst erledigen lassen, den es ist für ein normale Mensch definitiv unmöglich so viele Daten per Hand zu sortieren.

Danke noch mals für deine Hilfe.
 
Michaela
Forum-Century

Forum-Century


Beiträge: 239
Anmeldedatum: 12.07.07
Wohnort: ---
Version: bis 2007b
     Beitrag Verfasst am: 08.04.2008, 23:09     Titel:
  Antworten mit Zitat      
Hast Du die Klasse als string oder Zahl? Das sortieren nach Spalte4 kann man in jedem Fall automatisieren..
_________________

---------------------------------------------------------------
Leider habe ich daheim zwar Internet aber kein Matlab - daher sind alle Syntaxbeispiele circa Angaben.....
Private Nachricht senden Benutzer-Profile anzeigen
 
tompie
Forum-Guru

Forum-Guru


Beiträge: 260
Anmeldedatum: 19.09.07
Wohnort: München
Version: immer alles
     Beitrag Verfasst am: 09.04.2008, 10:34     Titel:
  Antworten mit Zitat      
Hallo,

von Hand sortieren verlangt keiner von Dir. Das wäre vor 60 Jahren ein Thema gewesen, aber heute haben wir u.a. Excel und natürlich Matlab.

Trage alle möglichen Klassen-Werte und auch die Farben/Linestyles in neuen Variablen ein. Dann gehst Du alle diese Klassen-Werte der Reihe nach durch. Zum Beispiel so:


Code:
AllClasses = [1 2 3 4];
AllColors  = {'r.' 'g.' 'b.' 'k.'};

Data_Classes = [1 1 1 3 3 2 1 4 2 2];
Data_x = rand(1,10);
Data_y = rand(1,10);
Data_z = rand(1,10);

for k=1:length(AllClasses)
    selectedClass = AllClasses(k);
    s = (Data_Classes == selectedClass);
    plot3(Data_x(s),Data_y(s),Data_z(s),AllColors{k});
    hold on;
end;

box;


Da braucht man auch nix sortieren.

In Zeile 1 definierst Du alle vorkommenden Klassen, in Zeile 2 die zugehörigen Farben/Linestyles usw. Dann habe ich 10 Beispieldaten erzeugt, da stehen dann natürlich Deine Daten aus der Excel-Datei. In der for-Schleife geht man alle vorkommenden Klassen durch und sucht sich jeweils die xyz-Daten der entsprechenden Klasse zusammen. Das geschieht in der magischen Zeile
Code:
s = (Data_Classes == selectedClass);
Damit wird in s ein logical array erzeugt, das 1en an den Stellen setzt, wo der Vergleich zutrifft, ansonsten 0en. Mit diesem logical array geht's dann in den plot3-Befehl. Klasse 1 wird dann rot dargestellt, Klasse 2 grün usw. Das Progrämmchen sollte eigentlich auch mit 20000 Daten recht zügig durchlaufen.

Gruß tompie
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.