回転する3D地球をプロットする方法 質問する

回転する3D地球をプロットする方法 質問する

を使って簡単な3次元球体を作成できることは知っていますがmatplotlib、そのような球体の例はドキュメンテーション

さて、matplotlibモジュールの一部としてメソッドもありますwarp。その使用例は次のとおりです。ここ

円筒形の画像を球体に変形します。これらの方法を組み合わせて 3D 回転地球を作成できますか? この問題に関する私の考え方が間違っていない限り、これを行うには、画像のピクセル データを取得し、最初の例で作成された 3D 球体の表面に沿って sin 式と cos 式を使用して各ピクセルをプロットする必要があるようです。これらの円筒形のマップの例は、次の場所にあります。ここ

mayaこれを行う別の方法として、と を使用することはわかっていますblenderが、matplotlibこのプロットを作成し、データの配列を使用して地理空間データをサーフェスにプロットできるようにしたいため、 の範囲内でこれを行うようにしています。

ベストアンサー1

興味深い質問です。私は基本的に @Skeletor が概説した考え方に従い、次のように表示できるように画像をマッピングしようとしましたplot_surface

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

# load bluemarble with PIL
bm = PIL.Image.open('bluemarble.jpg')
# it's big, so I'll rescale it, convert to array, and divide by 256 to get RGB values that matplotlib accept 
bm = np.array(bm.resize([d/5 for d in bm.size]))/256.

# coordinates of the image - don't know if this is entirely accurate, but probably close
lons = np.linspace(-180, 180, bm.shape[1]) * np.pi/180 
lats = np.linspace(-90, 90, bm.shape[0])[::-1] * np.pi/180 

# repeat code from one of the examples linked to in the question, except for specifying facecolors:
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

x = np.outer(np.cos(lons), np.cos(lats)).T
y = np.outer(np.sin(lons), np.cos(lats)).T
z = np.outer(np.ones(np.size(lons)), np.sin(lats)).T
ax.plot_surface(x, y, z, rstride=4, cstride=4, facecolors = bm)

plt.show()

結果:plot_surface で 3D 表示された bluemarble.jpg

おすすめ記事