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

Vertices (Eckpunkte) mit NaN aus Faces (Flächen) entfernen

 

simsalakim
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 20.10.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.02.2015, 08:31     Titel: Vertices (Eckpunkte) mit NaN aus Faces (Flächen) entfernen
  Antworten mit Zitat      
Hallo,

ich habe größere komplex Flächen, aus welchen ich mir einen Bereich zur weiteren Verarbeitung herausgreifen möchte. Mein Ansatz wäre, Punkte (vertices), welche außerhalb eines bestimmten Bereichs liegen, NaN zu setzten.

Code:

% zwei Dreicke definieren
fv.vertices = [0 0 0;0 1 0;0 0 1;0 -1 0]; % Punkte
fv.faces = [1 2 3;1 3 4]; % Flaechen
% Dreiecke darstellen
trimesh(fv.faces,fv.vertices(:,1),fv.vertices(:,2),fv.vertices(:,3))
% Punkte ausserhalb eines Bereichs NaN setzen
fv.vertices(fv.vertices<0) = NaN;
 


Wie kann ich jetzt (effektiv!) die entsprechenden Flächen (und Punkte), welche Punkte mit NaN-Werten beinhalten löschen? Das bedeutet eine neue Nummerierung der Punkte...

Vielen Dank für eure Hilfe!

Simon
Private Nachricht senden Benutzer-Profile anzeigen


Sigggi
Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 27.01.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.02.2015, 12:46     Titel:
  Antworten mit Zitat      
Hallo,

Code:

fv.vertices(fv.vertices<0) = [];
 


entfernt den Datenpunkt aus dem Vektor. Ist es das, was Du suchst?

Gruß, Siggi.
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
simsalakim
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 20.10.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.02.2015, 12:58     Titel:
  Antworten mit Zitat      
Hallo Siggi,

danke für deine Antwort. Leider hilft mir das nicht. Wenn ich den Datenpunkt entferne, passt die Nummerieung in Flächen nicht mehr zu den Punkten. Sobald ich einen Punkt lösche, müssen alle nachfolgenden Punkte in der Matrix fv.faces eine Nummer kleiner gezählt werden.

Ich hoffe, das Problem ist etwas verständlicher geworden.

Simon
Private Nachricht senden Benutzer-Profile anzeigen
 
Sigggi
Forum-Anfänger

Forum-Anfänger


Beiträge: 46
Anmeldedatum: 27.01.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.02.2015, 13:09     Titel:
  Antworten mit Zitat      
Hallo Simon,

vielleicht so?

Code:

ind = find(fv.vertices<0);
fv.vertices(ind) = [];
fv.faces(ind) = [];
 


Gruß, Siggi.
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
simsalakim
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 20.10.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.02.2015, 13:42     Titel:
  Antworten mit Zitat      
Hallo Siggi,

die Punkanzahl hat nahezu nichts mit der Länge meiner Flächenmatrix zu tun und Punkt 1 kann in der Flächenmatrix an beliebig vielen Stellen (je nachdem, wie viele Dreicke diesen Punkt "nutzen") auftauchen - siehe Beispiel hier: http://de.mathworks.com/help/matlab/ref/triangulation-class.html.

Die Indizierung in der Punktmatrix hilft mir also nicht weiter.

Danke trotzdem.

Simon
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: 12.02.2015, 17:08     Titel: Re: Vertices (Eckpunkte) mit NaN aus Faces (Flächen) entfer
  Antworten mit Zitat      
Hallo simsalakim,

Code:
fv.vertices = [0 0 0;0 1 0;0 0 1;0 -1 0]; % Punkte
fv.faces = [1 2 3;1 3 4]; % Flaechen

% Zeilen, die entfernt werden sollen:
remove = any(fv.vertices < 0, 2);
keep = ~remove;

newVertices = fv.vertices(keep, :);

% Remove faces, which have any deleted point:
removeInd = find(remove);
newFaces = fv.faces(any(ismember(fv.faces, removeInd), 2), :);

% Clean up the indices of faces:
keepInd = cumsum(keep);
newFaces = keepInd(newFaces);

Ich kann es gerade nicht ausprobieren. Die Idee dahinter ist es, zuerst einen logical Vektor zu erstellen mit einsen, wenn ein Punkt erhalten bleibt. Nach CUMSUM werden dann die Indices nur raufgezählt, wenn ein erhaltner Punkt kommt. Und dann verwendet man die Original-Faces als Index dieses Vektors.

Gruß, Jan
Wie kann ich jetzt (effektiv!) die entsprechenden Flächen (und Punkte), welche Punkte mit NaN-Werten beinhalten löschen? Das bedeutet eine neue Nummerierung der Punkte...

Vielen Dank für eure Hilfe!

Simon[/quote]
Private Nachricht senden Benutzer-Profile anzeigen
 
simsalakim
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 20.10.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.02.2015, 08:00     Titel:
  Antworten mit Zitat      
Hallo Jan,

an cumsum hatte ich nicht gedacht - das war hier ein sehr guter Hinweis. Ich habe noch eine kleine Tilde bei der Auswahl der neuen Flächen eingefügt (und die unerwünschten Punkte mit NaN in Spalte 2 gekennzeichnet):

Code:

fv.vertices = [0 0 0;0 1 0;0 0 1;0 NaN 0]; % Punkte
fv.faces = [1 2 3;1 3 4]; % Flaechen

% Zeilen mit NaN, die entfernt werden sollen:
remove = any(isnan(sf.vertices(:,2)),3);
keep = ~remove;
newVertices = sf.vertices(keep, :);

% Remove faces, which have any deleted point:
removeInd = find(remove);
newFaces = sf.faces(~any(ismember(sf.faces, removeInd), 2), :);

% Clean up the indices of faces:
keepInd = cumsum(keep);
newFaces = keepInd(newFaces);
 


Super, das reduziert die Punktewolke erheblich...

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