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

Handle-Objekt in 3D-Array

 

crysel
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 15.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.09.2010, 16:15     Titel: Handle-Objekt in 3D-Array
  Antworten mit Zitat      
Hi,

ist es irgendwie möglich ein bestehendes Grafikobjekt (Handle) in einem 3D-Array abzuspeichern?
Also mal im Gesamtkontext beschrieben: Ich möchte diverse Visualisierungsverfahren wie z.B. Isoflächen anwenden. Dazu gibt es in Matlab eine Beispielfunktion

Code:
[x,y,z,v] = flow;
p = patch(isosurface(x,y,z,v,-3));
isonormals(x,y,z,v,p)
set(p,'FaceColor','red','EdgeColor','none');
daspect([1 1 1])
view(3); axis tight
camlight
lighting gouraud


x,y,z und v sind jeweils 3-dimensionale Arrays, wobei x,y,z die Punkte festlegen (Koordinaten) und in v dann der entsprechende Wert steht, z.B. x = 1, y = 2 und z = 1. Der dazugehörende Wert v wäre möglicherweise 0.5.
Der Rest des Codes ist kein Problem, das ist ja nur noch die Anwendung der Isoflächen bei gegebenem 3D-Array-Datensatz.
Das Problem ist:

Ich habe eine komplexe (nicht mathematisch komplex Very Happy ) Figur als Grafik-Handle gegeben und möchte daraus eben einen solchen 3D-Array-Datensatz bekommen ohne mir jeden Punkt einzeln angucken zu müssen und den passenden v-Wert einzutragen.

Ist das irgendwie möglich oder muss ich versuchen das ganze über ein mathematisches Modell meiner Figur selbst aufzubauen?
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 14.09.2010, 20:01     Titel:
  Antworten mit Zitat      
Hallo Crysel,

Du kannst die Properties XData, YData, ZData eines 3D-Grafik-Objektes abfragen. Hilft Dir das weiter?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
crysel
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 15.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.09.2010, 21:48     Titel:
  Antworten mit Zitat      
Hi, danke für deinen Hinweis. Leider hilft mir das nur zum Teil weiter.
Meine Figur ist nur durch die Eckpunkte gegeben (also Ecken und Flächen, wobei die Flächen durch Angabe der passenden Eckpunkte entstehen) und der von dir genannte Befehl liest eben nur die Eckpunkte aus, aber nicht die Zwischenpunkte, die "auf der Fläche" sind. Die bräuchte ich allerdings auch in meinem 3D-Array.

Kleines Beispiel:

Würfel im 3D-Raum. Den kann ich durch 8 Punkte vorgeben und zeichnen lassen, wobei eben nicht nur Verbindungslinien sondern alle Flächen, die dadurch gebildet werden. Wenn ich dann XData, usw. auslese, bekomme ich aber wieder nur die Werte der Eckpunkte und keine Zwischenpunkte in den Flächen heraus.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 14.09.2010, 22:39     Titel:
  Antworten mit Zitat      
Hallo Crysel,

ich denke daran, dass eine Fläche aus unendlich vielen Punkten besteht und frage mich, wie Du das wohl implementieren möchtest.

Vielleicht hilft es weiter, wenn Du das Problem beschreibst, das mit der Method gelöst werden soll. Einen Würfel durch seine Ecken zu beschreiben ist ene sehr effiziente Sache, aber natürlich reicht das im Allgemeinen nicht: Wenn man nur die Koordinaten der Ecken angibt, könnte das genauso gut eine Kugel sein!

Sehr häufig werden räumliche Flächen und Volumina durch Triangularisierung parametrisiert (sie QHULL, DELAUNAY). Dazu wird die Oberfläche so lange durch kleiner werdende Dreiecke angeä#hert, bis der Abstand zwischen Dreieck und Fläche einen bestimmten Wert unterschreitet. Beim Würfel wären das z.B. 12 Dreiecke.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
crysel
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 15.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.09.2010, 12:15     Titel:
  Antworten mit Zitat      
Also mal der Gesamtkontext:

Ich habe Sensoren, die ein gewisses Feld abdecken können (48° horizontal, 8° vertikal). Durch Vorgabe von Startwert (wo der Sensor sitzt) und Endwert (wo er hinguckt), erhalte ich dann eine Pyramide mit rechteckiger Grundfläche. Diese ist noch in Untergebiete eingeteilt (8 Teilflächen, durch unterschiedliche Sensorwerte), aber das soll erst mal nicht von Belang sein.
Ein Bild habe ich mal angehängt, damit ihr wisst, wie das aussieht.
Dies soll eine Darstellungsmöglichkeit sein, indem ich aufgrund der vorgegebenen Sensorgeometrie (Winkel) einfach die gesamten abgedeckten Bereiche anzeigen lasse. (Bild 1)

Eine weitere Möglichkeit sollte nun sein das Ganze etwas anders darstellen zu lassen und zwar mit Isoflächen, Slices, etc.

Am einfachsten wäre es nun diese Verfahren einfach auf das bereits dargestellte Handle zu "schmeißen". Das geht aber offenbar nicht, jedenfalls brauche ich ein 3D-Array, um die Verfahren anwenden zu können.

Allerdings werden nur die Eckpunkte dafür nicht reichen, da nur diese mit einem "Farbwert" versehen sind, aber nicht die Zwischenwerte, somit erhalte ich dann keine zusammenhängende Struktur, sondern immer nur Mini-Isoflächen an den entsprechenden Punkten.

Dazu habe ich mal ein kleines Beispiel gemacht mit einem komplett leeren 3D-Array und nur einigen Stützstellen (hier ein Würfel). (Bild 2)

Code:

grid = 1:1:10;

[x,y,z] = meshgrid(grid,grid,grid);

for i = 1:1:10
    a(i,:) = grid;
end

data = cat(3,[a],[a],[a],[a],[a],[a],[a],[a],[a],[a]);
data(:,:,:) = 0;

data(1,1,1) = 5;
data(1,4,1) = 5;
data(4,1,1) = 5;
data(4,2,1) = 5;
data(4,4,1) = 5;
data(1,1,4) = 5;
data(1,4,4) = 5;
data(4,1,4) = 5;
data(4,4,4) = 5;

p = patch(isosurface(x,y,z,data,3));
isonormals(x,y,z,data,p)
set(p,'FaceColor','red','EdgeColor','b');
daspect([1 1 1])
view(3); axis tight


Das wird dann mit den Eckpunkten meiner Figur auch so aussehen und ich bekomme kein angenähertes Sensorfeld wie in Bild 1 (auf Basis von Isoflächen).


[e] Eine ganz andere Idee: Kann ich evtl. aus dem Figure/Handle alle Koordinaten anhand des Datenwertes auslesen (also hier die Farbe, statt weißem Hintergrund)? Also in einem vorgegebenem Raster (wie meshgrid) in 1-er Schritten (x,y,z) den Farbwert auslesen?

würfel.PNG
 Beschreibung:
Bild 2

Download
 Dateiname:  würfel.PNG
 Dateigröße:  10.45 KB
 Heruntergeladen:  529 mal
sensor.PNG
 Beschreibung:
Bild 1

Download
 Dateiname:  sensor.PNG
 Dateigröße:  14.47 KB
 Heruntergeladen:  529 mal
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 - 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.