2017-01-27 3 views
0

Ich habe ein Problem mit Matlabs trimesh-Funktion.Ändern Sie die Trimesh-Eckpunkte von Matlab nach dem Plotten

Was ich tun muss, ist eine über die Trimesh-Funktion geplottete Form zu ändern. Das gelingt mir tatsächlich, indem ich das verwandelte Gesicht noch einmal neu plane, das gibt mir die erwartete Form. Dies ist, wie ich meine Form Grundstück:

hc = trimesh(triangles,candide3(:,1),candide3(:,2),candide3(:,3)); 

Hier candide3 ist eine 113x3 Doppel Matrix von Scheitelpunkten, während Dreiecken ist eine 184x3 Doppel Matrix von Indizes, bei denen jede Zeile ein Dreieck ist. Das zeichnet genau was ich will. Dann muss ich das Gesicht umwandeln - während Dreiecke bleibt immer die gleiche Matrix, ein paar Einträge von candide3 müssen Überstunden ändern, in Echtzeit (ca. 25 mal pro Sekunde). Wenn ich dies tun:

candidet = transform(candide3, ...); 
trimesh(triangles,candide3(:,1),candide3(:,2),candide3(:,3)); 

ich genau die Transformation die ich suche. Und das ist in Ordnung, aber nicht genug. Ich möchte vermeiden, 25 Mal pro Sekunde trimesh zu rufen und stattdessen die neuen Scheitelpunkte zu setzen. Also habe ich versucht, die gesetzt Funktion, wie folgt aus:

candidet = transform(candide3, ...); 
set(hc,'XData',candidet(:,1),'YData',candidet(:,2),'ZData',candidet(:,3)); 

Aber dies gibt nicht das erwartete Ergebnis: Es zeichnet ein Chaos von Dreiecken und Flächen, die nicht einmal geht in der Nähe zu dem, was ich suche Es fühlt sich komisch und zufällig an. So durch die Dokumentation schauen, habe ich das auch versucht:

Und das gibt den gleichen Unsinn wie die oben genannten versuchen.

Ich verwende Matlab R2016b auf Max OS X El Capitan. Danke, wer auch immer versuchen wird, mir zu helfen.

Antwort

1

Wenn Sie überprüfen, wie trimesh intern funktioniert, werden Sie feststellen, dass es die Argumente nimmt triangles, x, y, z in einen patch Befehl wie folgt aus:

h = patch('faces',triangles,'vertices',[x(:) y(:) z(:)],'facevertexcdata',c(:),...); 

Daher empfehle ich versucht, die folgenden:

hc = trimesh(triangles,candide3(:,1),candide3(:,2),candide3(:,3)); 
candidet = transform(candide3, ...); 
set(hc,'vertices',candidet);