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 Plot von kleinen Cuben

 

Beginner
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 27.02.08
Wohnort: HD
Version: ---
     Beitrag Verfasst am: 19.08.2008, 18:32     Titel: 3d Plot von kleinen Cuben
  Antworten mit Zitat      
Hallo zusammen,

ich habe ein Problem bei der Umsetzung folgender Darstellung.

Ich habe eine Liste mit 50 Einträgen (jeweils x y und z Wert der Raumpunkte).

Diese 50 Punkte entsprechen den Mittelpunkten von kleinen Würfeln der Kantenlänge 21. Diese Würfel möchte ich in einem Raum mit überlappungen anzeigen. Vielleicht ist es möglich Überlappungen mit einer Art Farbskala intensiver anzuzeigen?

Anbei mein Ansatz
Vielen Dank für Hilfe!

Code:
this_EdgeLength = 21;
this_cube = ones(150,150,500);

list_size = size(this_CoordList,3);


for f=1:list_size
       x = this_CoordList(f,1);
       y = this_CoordList(f,2);
       z = this_CoordList(f,3);
       
       k = x-floor(this_EdgeLength/2):x+floor(this_EdgeLength/2);
       l = y-floor(this_EdgeLength/2):y+floor(this_EdgeLength/2);
       m = z-floor(this_EdgeLength/2):z+floor(this_EdgeLength/2);
   
       this_smallcube(k,l,m)= this_cube(k,l,m);

       plot3(this_smallcube);
       hold on;
       
       
end
Private Nachricht senden Benutzer-Profile anzeigen


Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 20.08.2008, 09:35     Titel:
  Antworten mit Zitat      
Hallo Beginner,

das ist eine nette Aufgabe. Ich habe die Würfel mit patch erzeugt. Dann kann man die Flächen über die Eigenschaft FaceAlpha halbtransparent machen. Überlappungen sind durch die Kanten und die intensivere Farbe gut zu sehen.

Die Liste der Ecken (vertices) und Flächen (faces) hab ich aus der Matlab-Hilfe ("Multifaceted Patches"). Wenn Dir die Farben der Flächen zu bunt sind, kannst Du statt 'FaceVertexCData',hsv(6) mal 'FaceVertexCData',ones(6,1)*[0,1,1] ausprobieren.

Code:
% Mittelpunkte (Beispiel)
x=16*[1 1 1 2 2 2 3 3 3 4 4 4];
y=16*[1 2 3 4 1 2 3 4 1 2 3 4];
z=16*[1 2 3 1 2 3 1 2 3 1 2 3];

% Zeichnen der Mittelpunkte
plot3(x,y,z,'.');
hold on

% Ecken der Würfel, siehe Hilfe zu patch und Multifaceted Patches
this_EdgeLength = 21;
d = this_EdgeLength/2;
vertices(:,1,:)=[x-d;x+d;x+d;x-d;x-d;x+d;x+d;x-d];
vertices(:,2,:)=[y-d;y-d;y+d;y+d;y-d;y-d;y+d;y+d];
vertices(:,3,:)=[z-d;z-d;z-d;z-d;z+d;z+d;z+d;z+d];

% Flächen der Würfel, siehe Hilfe zu patch und Multifaceted Patches
faces = [1 2 6 5;2 3 7 6;3 4 8 7;4 1 5 8;1 2 3 4;5 6 7 8];

% Zeichnen der Würfel
for k = 1:length(x)
    patch('Vertices',vertices(:,:,k),'Faces',faces,'FaceAlpha',0.5,...
           'FaceColor','flat','FaceVertexCData',hsv(6))
end
axis equal
hold off


Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Beginner
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 27.02.08
Wohnort: HD
Version: ---
     Beitrag Verfasst am: 20.08.2008, 15:41     Titel:
  Antworten mit Zitat      
Hallo Bijick,

danke für deine schnelle Hilfe! Die Patch-Funktikon ist ja wirklich super und erspart viel Arbeit...



Ich habe noch einmal eine Frage zur zufälligen Matrixerzeugung.
Wie kann ich eine Matrix mit z.B. (100x3) Einträgen ereugen, deren Werte in Spalte 1 zwischen 50 und 150 in Spalte 2 zwischen 30 und 200 usw. variieren?

Habe das bisher immer total umständlich mit

rand(100,3) *obere Grenze

gemacht und dann die zu kleinen WErte mit einer if-Abfrage rausgenommen, aber das geht doch bestimmt auch einfacher oder?

Viele Grüße!
Private Nachricht senden Benutzer-Profile anzeigen
 
Willa
Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 80
Anmeldedatum: 23.05.08
Wohnort: Bremen
Version: Willa v1.0
     Beitrag Verfasst am: 20.08.2008, 15:46     Titel:
  Antworten mit Zitat      
Naja, viel weniger umständlich ist meine Lösung auch nicht:
Code:
min=100;
max=666;
A=rand(100,100)*(max-min)+min;
Private Nachricht senden Benutzer-Profile anzeigen
 
Schrank
Forum-Century

Forum-Century


Beiträge: 203
Anmeldedatum: 10.07.08
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 20.08.2008, 15:49     Titel:
  Antworten mit Zitat      
Hallo Beginner,
geht das nicht einfach mit
Code:

Min = 50;
Max = 150;
A = Min + rand(100,1)*(Max-Min)
 

Grüße Schrank

P.S. warum sind die Links für die Matlab-Befehle eigentlich nicht case-sensitive?

Mist zu langsam.
Private Nachricht senden Benutzer-Profile anzeigen
 
Beginner
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 27.02.08
Wohnort: HD
Version: ---
     Beitrag Verfasst am: 20.08.2008, 16:23     Titel:
  Antworten mit Zitat      
danke euch beiden!

hatte mich nur gefragt ob matlab eine art "range"-Funktion für den rand- Befehl integriert hat...

so gehts natürlich auch ein wenig einfacher.
Private Nachricht senden Benutzer-Profile anzeigen
 
Siptar

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.05.2014, 20:07     Titel: Würfel in kleinere Würfel unterteilen und darstellen
  Antworten mit Zitat      
Hallo, ich möchte mal an diesen Thread anschließen. Und zwar habe ich ein relativ ähnliches Problem wie oben.
Und zwar möchte ich z.B einen 10x10x10 Würfel in lauter kleine Würfel (z.B 1x1x1) unterteilen und diese dann plotten.

Mit Folgendem Code erhalte ich bloß 5 kleine Würfel deren Mittelpunkte in x,y und z verschoben sind.

Code:
x=[1:2:9];
y=[1:2:9];
z=[-1:-2:-9];
this_EdgeLength = 2;
d = this_EdgeLength/2;

vertices(:,1,:)=[x-d;x+d;x+d;x-d;x-d;x+d;x+d;x-d];
vertices(:,2,:)=[y-d;y-d;y+d;y+d;y-d;y-d;y+d;y+d];
vertices(:,3,:)=[z-d;z-d;z-d;z-d;z+d;z+d;z+d;z+d];
end
% Flächen der Würfel, siehe Hilfe zu patch und Multifaceted Patches
faces = [1 2 6 5;2 3 7 6;3 4 8 7;4 1 5 8;1 2 3 4;5 6 7 8];

% Zeichnen der Würfel
for k = 1:length(x)
    patch('Vertices',vertices(:,:,k),'Faces',faces,'FaceAlpha',0.5,...
           'FaceColor','flat','FaceVertexCData',hsv(6))
end
axis equal
grid on
hold off


Wenn ich nun die Mittelpunktskoordinaten der einzelnen Würfel rechnen möchte bräuchte ich ja theoretisch 3 forschleifen über x(i),y(j), z(j)
z.B:
Code:
for i=1:length(z)
 for j=1:length(y)
  for k=1:length(x)
vertices(:,1,:)=[x(k)-d;x(k)+d;x(k)+d;x(k)-d;x(k)-d;x(k)+d;x(k)+d;x(k)-d];
vertices(:,2,:)=[y(j)-d;y(j)-d;y(j)+d;y(j)+d;y(j)-d;y(j)-d;y(j)+d;y(j)+d];
vertives(:,3,:)=[z(i)-d;z(i)-d;z(i)-d;z(i)-d;z(i)+d;z(i)+d;z(i)+d;z(i)+d]
end
end
end


Das heißt also ich würde Koordinaten für alle Mittelpunkte der 1000 Würfel (bei diesem Beispiel) kleinen Würfel erhalten. Zuerst würde die Mittelpunktskoordinaten also immer um 1 in x Richtung verschoben werden. Danach dann +1 in y usw. bis alle 1000 Würfel abgearbeitet sind.
Allerdings ist der Code noch fehlerhaft, denn ich weiß nicht wie ich diese entstehenden Koordinaten speicher kann und dann im Anschluss darstellen kann.
Funktioniert das überhaupt noch mir Arrays dann?!
 
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.