更新:
plot_trisurf传颜色时要用0-1的三维数组。
如果追求速度可以考虑pyvista里的plotter,那个好像底层用了c/c++,比plt快好多。
下面的方法是最简单的采样,当然追求精度需用更好的方法。
可视化的时候一般可以不用加坐标轴,不然会有点点丑~。
三角形剖分强烈推荐一般作业那种用个大圆弧二等分,简单又轻松。
---------------------------------------------------------
采用matplotlib+cv2+地球圆柱投影图(即长方形的一张地球,颜色代表地貌?)
注意cv2为gbr通道,需要反转一下,A[a:b,c:d,::-1],不然好多棕色 !~!
纹理获取时可以将像素变为经纬度:
【
a*b像素的图片,(theta=c,phi=d)位置(经纬度)的像素值:
earth_map[c/经度范围*a][b/经度范围*d]
】
注意很多坑:
画三角形的话,注意极点或theta/phi 为 0时进行特殊处理,如果用的是plot_trisurf,triangles是二维的数组,color应为由三个0-1的小数组成的元组(归一化一下)。
方法比较简陋,自己用的是三角形剖分的方法,细节不展示了,贴一下关键部位(羞羞)。
ps:gpt坑真的蛮多的,麻麻子。
# 创建3D图形对象
fig = plt.figure()
ax = fig.add_subplot(111, projection="3d")
# 绘制三角形
# midheart:求重心用的theta、phi用的
rgb_cur_triangle = []
for i in triangle_set:
t, p = midheart(point_set[i[0]], point_set[i[1]], point_set[i[2]])
rgb_cur_triangle.append(
(
map[int(t * width/ np.pi )][int(p * lenth/ (2 * np.pi) )]/255
)
)
for i in range(len(rgb_cur_triangle)):
ax.plot_trisurf(
x,
y,
z,
triangles=[triangle_set[i]],
color=rgb_cur_triangle[i],
shade=False,
)
# 设置坐标轴标签
ax.set_xlabel("X")
ax.set_ylabel("Y")
ax.set_zlabel("Z")
# 显示图形
plt.show()