2016-12-20 5 views
0

plot_trisurf関数からポリゴンデータ(三角形エッジ)を取得する方法はありますか? x、y、zデータを取り、Delaunay三角形分割を作成するので、このデータはどこかにあるはずです... ...?python matplotlib plot_trisurfポリゴンデータ

以下の例で使用できるものは素晴らしいでしょう。

from mpl_toolkits.mplot3d import Axes3D 
from matplotlib import cm 
import matplotlib.pyplot as plt 
import numpy as np 

n_angles = 36 

n_radii = 8 

radii = np.linspace(0.125, 1.0, n_radii) 

angles = np.linspace(0, 2*np.pi, n_angles, endpoint=False) 

angles = np.repeat(angles[..., np.newaxis], n_radii, axis=1) 

x = np.append(0, (radii*np.cos(angles)).flatten()) 
y = np.append(0, (radii*np.sin(angles)).flatten()) 


z = np.sin(-x*y) 

fig = plt.figure() 
ax = fig.gca(projection='3d') 

ax.plot_trisurf(x, y, z, cmap=cm.jet, linewidth=0.2) 


plt.show() 

これは、3Dデータに適したDelaunayアルゴリズムを使用しているので、matplotlibを使用したいと思います。私が練習できることから、それを2Dにパラメトリングすることはなく、マヤビとは違って、同じ量のファフに近いものがなくても、幅広いハードウェアで簡単に利用できます。 Plotlyもオプションになる可能性がありますが、これはデータが2Dにパラメータ化されている必要があると考えていますが、これは私のアプリケーションにとって理想的ではありません。 私はpython scipyにこれを行うDelaunayライブラリがあることを知っていますが、データのパラメータ化も問題です。

答えて

0

source code of plot_trisurfを見ると、matplotlibがどのように三角測量を行うのかを調べることができます。
基本的には、2Dグリッド上で三角測量を実行し、入力からz成分を引き継ぎます。
2D三角測量は、matplotlib.tri.triangulation.Triangulationクラスによって行われます。

以下は、頂点の配列を与える、あなたが望むことを行うことができます。

from matplotlib.tri.triangulation import Triangulation 
import numpy as np 

n_angles = 36 
n_radii = 8 

radii = np.linspace(0.125, 1.0, n_radii) 
angles = np.linspace(0, 2*np.pi, n_angles, endpoint=False) 
angles = np.repeat(angles[..., np.newaxis], n_radii, axis=1) 

x = np.append(0, (radii*np.cos(angles)).flatten()) 
y = np.append(0, (radii*np.sin(angles)).flatten()) 
z = np.sin(-x*y) 


tri, args, kwargs = Triangulation.get_from_args_and_kwargs(x, y, z) 
triangles = tri.get_masked_triangles() 
xt = tri.x[triangles][..., np.newaxis] 
yt = tri.y[triangles][..., np.newaxis] 
zt = z[triangles][..., np.newaxis] 

verts = np.concatenate((xt, yt, zt), axis=2) 

print verts 
+0

お返事ありがとうございます。 –

+0

自分のコメントを編集したり、自分のF'ing投稿で他人の編集に反応することはできません....とにかく。 plot_trisurfが2Dにパラメタイズされていることに気づいていませんでしたが、それでも動作する可能性があります。 おかげで再び! –

+0

問題ありません。問題が解決しない場合(答えられていないリストから消えるように)、またはこの回答で問題が解決しない場合は質問を更新することを忘れないでください。 – ImportanceOfBeingErnest