私はMatplotlibを学んでいるだけなので、私はステレオ視覚化のためにまっすぐに行っています。私はすでに画面を見るためにミラーを構築しており、左右の数字は適切な距離だけインタラクティブに更新しています。Matplotlib Axes3Dの3D視線方向を設定/取得する
私が今必要とするのは、一方の軸の向きを調べて、もう一方の向きを設定することです。私はRFTMを持っていて、助けを借りました(Axes3D.function)、そして残念なことにドキュメンテーションは少し薄く矛盾しているようです。
これまでに見つけたAxes3Dコールは、view_init(azim =、elev =)と4x4変換マトリックスを返すget_proj()です。
は今get_proj言う - 4x4の行列を記述されていないのdocstring
get_proj()
Create the projection matrix from the current viewing position.
elev stores the elevation angle in the z plane
azim stores the azimuth angle in the x,y plane
dist is the distance of the eye viewing point from the object point.
...と同じテキストであるPDFファイルから引用します。
私はazimとelevを与えるために行列の値をリバースエンジニアリングしようとする可能性がありますが、リバースエンジニアリングは常に間違っていると感じています。私はdistを設定する関数も見つかりませんでした。私は、表示位置を設定して調べるための例の1つに基づいて短いスクリプトを書いた。
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
plt.ion()
fig = plt.figure()
ax = fig.gca(projection='3d')
theta = np.linspace(-4 * np.pi, 4 * np.pi, 100)
z = np.linspace(-2, 2, 100)
r = z**2 + 1
x = r * np.sin(theta)
y = r * np.cos(theta)
ax.plot(x, y, z, label='parametric curve')
fig.canvas.draw()
with open('dump_proj.txt','wt') as fout:
for e in range(0, 61, 30):
for a in range(0, 61, 30):
fout.write('setting azimuth to {0}, elevation to {1}\n'.format(a, e))
ax.view_init(azim=a, elev=e)
fig.canvas.draw()
d=ax.get_proj()
for row in d:
fout.write('{0:8.4f} {1:8.4f} {2:8.4f} {3:8.4f} \n'.format(*row))
fout.write('\n')
保存されたファイルの例部分は
設定方位角60に、仰角30
-0.1060 0.0604 0.0000 -0.0519
-0.0306 -0.0523 0.2165 0.0450 0.0000
にここに示されています0.0000 0.0000 -10.0000
-0.0530 -0.0906 -0.1250 10.0779
私は10がsom見る距離のようなもの。私はむしろ30度と60度の角度を使用して0.5または0.866のエントリを期待していましたが、そう簡単ではありません。
私は行方不明、距離の設定、または仰角と方位角の取得にいくつかの機能がありますか?あるいは、私が紛失しているドキュメンテーションのビットは、4x4 proj行列がどのように構築されるかを教えてくれるでしょうか?
私は左と右の両方最終的には私より良いタイミングを与え、そしてそれは、方位角と仰角を設定するには、別のコントロールを使用していて、その後、view_initすることを使用するかもしれない問題を回避するには、()目の軸を持っています。しかし、私は最初の例では、軸の1つから方向を取得することをお勧めします。
もう一つの問題、
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
作業を行いますか?私はゆっくりとオブジェクト指向の方法を理解していますが、これは魔法のように動作するようです。 Axes3Dのインポートは、pyplotのインポートを変更するために何かをしますか?私は2Dメソッドの後に3Dメソッドをインポートすることを辛抱強く思っていました。私はそれがすべて正常に動作しなければならないかと思いますが、どうしたらいいか分かりません。
ステレオ視覚化をしたい場合は、 'mayavi'を使う方がはるかに良いでしょう。単純なプロットコマンドのための 'mlab'インタフェースを見てください。私は 'mayavi'を"シャッターグラス "と偏光ステレオ3Dシステムで使用しました。私は、あなたが作業しているような基本的な "サイドバイサイド"ステレオシステムのサポートを追加することに慣れてきたとは思えませんが、matplotlibより実装する方が簡単です。 –