質問: 10 * np.outer(np.ones(np.size(u)), np.cos(v)) # Plot the surface ax.plot_surface(x, y, z, color='b') plt.show() ``` ### 補足情報(言語/FW/ツール等のバージョンなど) より詳細な情報
回答: 推測を含めて大雑把な考えをコメントしてみます。 この例だと、極座標を使っているようです。 wikiの記号を借り、uはθで、vはφと考えますと、θの範囲を0~π、φの範囲を0~2πに変化させ中心からみた3次元的な全方位を100分割した座標値の並びをまずはu,vへそれぞれ設定していると思います。 outerでu,vのouter productを取ればθとφの全ての組み合わせ(つまり各々の方向)についての計算ができます。それを使って中心からみた各方向と球体表面の交点のx, y, z座標をそれぞれ求めると同時にθとφの組み合わせによるメッシュを表す2次元配列が出来上がります。 ここからは推測ですが、plot_surfaceにメッシュの3次元座標を最初の3つの引数に渡すと、例えば各メッシュを表す4角形を半分に分割して2つの三角形にし、それを平行投影のような投影計算により2Dに変換し、陰面処理を施すためにZバッファ法などを用いてプロットしているといった感じではないかと思います。pythonのmatplotlibの実装について知識がないのですが、ひょっとしてOpenGLなどのグラフィックライブラリーを使っているならメッシュからの2D変換はソフトウェアでちまちま計算しているのではなくGPUがやってくれているのかも知れません。 matplotlibのページをみるとOpenGLがどのプラットフォームでも使われているわけではなさそうですが、使われているプラットフォームがあるかどうかも自分にはわかりませんでした。 補足: 極座標といいましたが同じことを「地球表面の緯度、経度」と言った方がイメージがわきやすいかも知れませんね。