gpt4 book ai didi

python - 创建可旋转的 3D 地球

转载 作者:太空狗 更新时间:2023-10-29 17:07:29 28 4
gpt4 key购买 nike

我知道我们可以使用 matplotlib 创建简单的 3 维球体,documentation 中包含此类球体的示例.

现在,我们还有一个 warp 方法作为 matplotlib 模块的一部分,它的用法示例是 here .

将圆柱形图像变形为球体。是否可以结合这些方法来创建 3D 可旋转地球?除非我对这个问题的思考方式偏离了方向,否则似乎要做到这一点,您必须获取图像的像素数据,然后使用沿 3D 球体表面的正弦和余弦表达式绘制每个像素在第一个示例中创建。可以找到这些圆柱形贴图的一些示例 here

我知道替代方法是通过 mayablender,但我试图留在 matplotlib 中来执行此操作,因为我想创建此图,然后能够使用数据数组将地理空间数据绘制到表面。

最佳答案

有趣的问题。我试图基本上遵循@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()

结果: bluemarble.jpg shown in 3D with plot_surface

关于python - 创建可旋转的 3D 地球,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30269099/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com