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 Oberfläche darstellen/plotten, Daten nicht kontinuierlic

 

Mythilos

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.01.2012, 18:49     Titel: 3D Oberfläche darstellen/plotten, Daten nicht kontinuierlic
  Antworten mit Zitat      
Hi, meine Daten liegen als (x,y,z Matrix; mit bis zu 400 3D Zeilenvektoren) bspw. so vor:

66,4571494175362 -0,406981171668633 -0,0177123316769610
66,3974471601786 -0,131786616469014 -1,09028213056919
65,6503808789640 0,147179159349832 -0,779077573861486
65,9968026135309 0,808698694296467 -1,86472772273980
66,5547354368339 -0,488513898131771 -1,29497319305456
64,6877722492508 0,249319572105561 -0,608440058476958
64,0208724849580 -0,991505065990452 -1,21592360881156
63,9514577631092 -1,09422900206313 -1,82931603413245
64,7719132576568 -0,0986279135410655 -0,484413373756581
63,7999102017040 0,237220362522592 -4,39091996688913
63,5383834615189 -0,0428928228811287 -3,01959201146343
62,9493113485800 -0,0842189133381766 -1,94609555375783
63,0232097031943 -0,413273912691125 -0,429142912760042
64,7006057287377 1,21939662381253 -4,83955105912274
65,8993984913286 1,52149086561323 -5,17228541147144
65,5811297042520 2,28840536153059 -5,88309711349104
65,0966731035136 1,79755382250025 -5,78908070743776
65,1797143093398 2,03695424715013 -6,47484053310404
63,4317183342628 0,855494001837144 -4,63353605750439
62,7075359262709 1,53304524124155 -5,57420848280351
62,7147515463645 1,53943415861301 -7,03707561916278
62,9566727532285 1,70194315801285 -5,99978844869793
59,3329547807304 0,879120387440629 -6,01303849466343
59,7897516717198 0,749794362506407 -5,24188245181385
61,3526290784611 0,646215588446728 -4,82228495180906
59,4482318100625 0,846666616517172 -5,49596397890798
60,5025025604260 0,393401635152998 -4,30578391029610
61,5598345207117 -0,452905349486905 -3,65334168281677
62,7452121469926 -0,636090195356914 -2,18273741129589
62,4850388939172 -0,726310882225086 -3,09837692448951
61,8645846239651 -0,312951820276027 -3,30876176210442
62,7501189061939 -0,895048237012901 -0,970943135675739
58,0412651395981 0,453396442133805 -7,29831804929023
57,2675281598110 0,233335549360866 -8,41766525168653
56,5206826819314 0,660618258580747 -7,85099631547287
57,1594900463698 1,09161419885497 -6,86011169309987


Daten möchte ich einen Oberfläche plotten. Mit dem Befehl surf bin ich nicht weit gekommen und mit meshgrid auch nicht. Dieses Gitternetz brauche ich auch nicht, ich benötige eigentlich nur die Fläche.

Die Koordinaten liegen nicht homogen in einer Ebene und die am Rand liegenden äußersten Punkte schließen auch nicht "gerade" oder bündig ab. Daher würde die Fläche "ausgefranst" aussehen können und das ist auch vollkommen ok so.


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.01.2012, 18:52     Titel:
  Antworten mit Zitat      
Hallo,

und warum bist du mit surf und meshgrid nicht weitergekommen?

Schau dir mal das Beispiel in
Code:
doc TriScatteredInterp  % bzw.
doc griddata

an; vielleicht hilft dir das.

Grüße,
Harald

P.S.: In MATLAB ist das Dezimaltrennzeichen der Punkt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Mythilos

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.01.2012, 19:06     Titel:
  Antworten mit Zitat      
die punkte wurden dabei in einer Ebenen angezeigt und auch leider nicht mit Gitternetzlinien verbunden. (aber die brauche ich auch nicht).

Das mit dem Punkt und Komma stimmt schon, spielt aber keine Rolle, weil ich die Daten so einlese:

plot3=Variablenname(:,1),Variablenname(:,2),Variablenname(:,3);
 
mythilos

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.01.2012, 19:34     Titel:
  Antworten mit Zitat      
so schreibe ich das. Die Punkte/Kreise sind zwar an der richtigen Stelle, jedoch ist keine Fläche zu sehen.

Code:
ti = -2:.25:2;
[XI,YI] = meshgrid(ti,ti);
ZI = griddata(AponeuroseDist(:,1), AponeuroseDist(:,2), AponeuroseDist(:,3),XI,YI);
mesh(XI,YI,ZI),
plot3(AponeuroseDist(:,1), AponeuroseDist(:,2), AponeuroseDist(:,3),'o')
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.01.2012, 23:29     Titel:
  Antworten mit Zitat      
Hallo,

dann nimm doch surf statt mesh?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
mythilos

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.01.2012, 00:22     Titel:
  Antworten mit Zitat      
mit surf bekomm ich leider gar nix hin..
Und da versteh ich auch leider nicht, was ich falsch mache...
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.01.2012, 00:27     Titel:
  Antworten mit Zitat      
Hallo,

surf und mesh haben das gleiche Interface. Wenn dein geposteter Code mit mesh funktioniert hat, sollte er also auch mit surf funktionieren.

Ohne weitere Auskünfte kann ich dir leider auch nicht sagen, was du falsch machst.
Bekommst du eine Fehlermeldung? Welche?
Stimmt das Resultat nicht mit dem erwarteten ein? Warum nicht?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
mythilos

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.01.2012, 00:52     Titel:
  Antworten mit Zitat      
wenn ich folgendes probiere:
Code:
ti = -2:.25:2;
[XI,YI] = meshgrid(ti,ti);
ZI = griddata(AponeuroseDist(:,1), AponeuroseDist(:,2), AponeuroseDist(:,3),XI,YI);
mesh(XI,YI,ZI),
surf(AponeuroseDist(:,1), AponeuroseDist(:,2), AponeuroseDist(:,3),'o')

erhalte ich das Ergebnis:
??? Error using ==> surf at 70
Z must be a matrix, not a scalar or vector.

Wobei da auch wahrscheinlich mehr zu ändern ist, als das mesh in surf...
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.01.2012, 01:21     Titel:
  Antworten mit Zitat      
Hallo,

du hast plot3 durch surf ersetzt.
Du sollst aber mesh durch surf ersetzen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
mythilos

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.01.2012, 10:18     Titel:
  Antworten mit Zitat      
Ah, danke, ich bin aktuell etwas krank, wodurch meine Aufmerksamkeit deutlich leidet.
Ich habs jetzt "richtig" verändert, allerdings bekomme ich keine Fläche, sondern nur die Verbindungslinien zwischen den Punkten angezeigt.
Eine Fläche bekomme ich aber leider nicht...


Heute werde ich die Daten nochmal aufbereiten und evtl anders sortieren (wahrscheinlich Cell-array), wodurch die jetzt willkürlichen Verbindungslinien auch noch ausgerichtet sind. Melde mich später nochmal.
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.01.2012, 12:03     Titel:
  Antworten mit Zitat      
Hallo,

ich fürchte, ich verstehe das Problem nicht.

Code:

erzeugt doch eine nette Fläche, oder? Falls die Farbgebung durchgehend sein soll, kannst du hintendran
Code:

setzen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
mythilos

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.01.2012, 16:31     Titel:
  Antworten mit Zitat      
Ich habe jetzt meinen Datensatz besser sortiert, allerdings heißt das leider nicht, das der plot dann funktioniert. Die Daten liegen nun als cell-array vor. In jeder Zelle stehen 2x Zeilenvektoren mit (x,y,z). So kann ich die als Linien für mich schon geordnet plotten mit:
Code:
   for j=1:length(FaszikelNaNs);
plot3(Apo {j,1}(:,1),Apo {j,1}(:,2),Apo {j,1}(:,3),'g:','LineWidth',2);
hold on
end
 


der oben verwendete Code:
Code:
ti = -2:.25:2;
[XI,YI] = meshgrid(ti,ti);
ZI = griddata(Apo {:,1}(:,1),Apo {:,1}(:,2),Apo {:,1}(:,3),XI,YI);
surf(XI,YI,ZI),
plot3(Apo {:,1}(:,1),Apo {:,1}(:,2),Apo {:,1}(:,3),'o')
   
xlabel('x-Achse');
ylabel('y-Achse');
zlabel('z-Achse');
axis equal;
??? Bad cell reference operation.


funktioniert jetzt leider nicht mehr.

Mein Ziel ist es immer noch die Fläche zu plotten.
Aktuell gehen die wie im oberen code angegeben geplotteten Linien Strahlenförmig von einem Punkt aus zu ihren Endpunkten (wie aufgefächert). Mir würde es schon reichen, wenn ich eine Fläche zwischen jedem dieser Strahlen erzeugen könnte....
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.01.2012, 17:47     Titel:
  Antworten mit Zitat      
Hallo,

da ich deine Daten nicht habe, kann ich das schlecht nachvollziehen.

Erste Frage wäre: in welcher Zeile tritt die Fehlermeldung auf?

Zitat:
In jeder Zelle stehen 2x Zeilenvektoren mit (x,y,z).

Ich bin nicht sicher, ob ich das verstehe. Eine 2x3-Matrix?

Funktioniert folgendes für sich genommen?
Code:
test = Apo{:,1}(:,1);


Wenn nicht, dann fürchte ich, dass du dir durch die "Datenorganisation" mehr Probleme einhandelst als dass sie etwas bringt.

Kann es sein, dass du nur zu diesen Strahlenpunkten Daten hast? Der Befehl griddata interpoliert nur; er extrapoliert nicht. Wenn er extrapolieren müsste, setzt er NaN.

Oder willst du am Ende eine Regressionsebene durch alle Punkte legen?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
mythilos

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.01.2012, 18:10     Titel:
  Antworten mit Zitat      
erstmal vielen Dank für Dein Interesse, Harald.

Meine Daten liegen in einem cell-array vor: Apo{1:273,4}.
Mich interessieren insbesondere die in der 1. Spalte dieser cellen stehen, also: Apo{1:273,1}.
In den Zellen dieser Spalte steht jeweils eine Matrix von 3Spalten und 2Zeilen, welche 2x 3D (Zeilen-)Vektoren (x,y,z) enthalten.
Diese Vektoren beschreiben einen "Start" und ein "Ende" einer Strecke.

Also habe ich 273 x 2x 3D Vektoren, also 273 Strecken.

Diese sind in etwa so angeordnet wie die Finger an der Hand. Sie verfügen über einen gemeinsamen Startpunkt und einen individuellen Endpunkt (stehen in dieser Matrix, in jeder Celle wiederrum eine "Strecke").

Das ganze sieht dann in etwa so aus:
[img]http://imageshack.us/photo/my-images/62/apoim.jpg/[/img]

Ich möchte jetzt die Fläche die durch diesen "Fächer" gebildet wird darstellen. Am besten auch mit 'nem niedrigeren 'alpha'.
Wenn es dafür notwendig ist die Daten wieder in ein anderes Format zu bringen, dann soll das kein Hindernis sein.
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.01.2012, 18:27     Titel:
  Antworten mit Zitat      
Hallo,

bitte achte darauf, die Rückfragen zu beantworten.

1.
Zitat:
in welcher Zeile tritt die Fehlermeldung auf?


2.
Zitat:
Funktioniert folgendes für sich genommen?
Code:
test = Apo{:,1}(:,1);


3.
Zitat:
Oder willst du am Ende eine Regressionsebene durch alle Punkte legen?

(Eine Fläche kann gekrümmt sein, eine Ebene nicht)

Mit deinem Beitrag bin ich nicht wirklich schlauer geworden.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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 - 2025 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.