Mayavi: rotiere um die y-Achse

9

Ich plane ein 3D-Mesh mit der Methode triangular_mesh von mayavi. Die Daten beschreiben eine menschliche Silhouette, die verdeckt im 3D-Raum liegt (also kann cmap verwendet werden, um die Entfernung von der Kamera zu bezeichnen).

Hier ist der Code, der zum Erzeugen des Plots verwendet wurde (die Flächen und Vertices stammen von einem externen Objekt und es gibt viel zu viele, um sie hier anzuzeigen):

%Vor%

Ohne die Kamera zu bewegen, liegt die Silhouette verdeckt. Um das Modell frontal zu betrachten, verändere ich den Azimut und die Höhe der Kamera, um das Diagramm von oben nach unten zu betrachten. Dies zeigt die Silhouette wie vorgesehen.

%Vor%

Meine nächste Aufgabe besteht darin, eine Reihe von Bildern zu erstellen, bei denen die Kamera um die Zeichnung herum schwenkt, beginnend mit der Silhouette, die nach rechts zeigt, und mit ihr nach links zeigt.

Die Komplikation besteht darin, dass ich, um die Farbabbildung für die Tiefeninformation zu erhalten, bereits den Azimut und die Höhe der Ansicht (wie im obigen Code gezeigt) verschiebe. Mayavi hat mehr Möglichkeiten, die Kamera als matplotlib zu bewegen, aber es scheint keine Möglichkeit zu geben, sich um die Y - Achse zu drehen, also muss ich wohl einige komplexe Berechnungen im Azimut und in der Höhe durchführen, um das zu erreichen Das gleiche Ergebnis - aber ich weiß nicht, wo ich anfangen soll (ich bin neu im 3D-Raum zu arbeiten, und mein Gehirn denkt noch nicht so).

Kann mir jemand in die richtige Richtung zeigen?

    
MassivePenguin 05.08.2016, 13:38
quelle

2 Antworten

1

Es stellt sich heraus, dass es ein kleines Problem gibt.

Sie können die Schauspieler unabhängig von der Kamera auf ihren Achsen drehen. (Dadurch wird die Visualisierung nicht mit der Datenbeschriftung verglichen, aber da ich die Achsen der Figur verberge, ist das in diesem Fall egal.)

Alles, was Sie tun müssen, ist:

%Vor%

... und du bist gut zu gehen.

    
MassivePenguin 11.08.2016, 11:24
quelle
2

Sie brauchen hier etwas Mathe. Ok, hier ist, wie es in Bezug auf Code zu tun ist, es ist nicht der beste Code, aber ich wollte es selbsterklärend machen. Ich benutze die Rodrigues-Formel für die Rotation in 3D, um dies zu erreichen, az_new und el_new sind deine neuen Betrachtungswinkel. Ändern Sie den Wert von Theta, um einen anderen Betrachtungswinkel in Ihrem Bezugssystem zu erhalten, ich habe 45 Grad im folgenden Code verwendet:

%Vor%     
Gaurav Dhama 05.08.2016 15:03
quelle

Tags und Links