Python实现绘制3D地球旋转效果

 更新时间:2023年02月28日 08:43:40   作者:微小冷  
这篇文章主要为大家详细介绍了如何利用Python实现绘制出3D地球旋转的效果,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以参考一下

画一个地球

想画一个转动的地球,那么首先要有一个球,或者说要有一个球面,用参数方程可以表示为

x​=rcosϕcosθ

y=rcosϕsinθ

z=rsinϕ​

然后要有一个地球,或者说要有一个地图,用来作为贴图,映射到球面上。

import numpy as np
import matplotlib.pyplot as plt
path = "earth1.jpg"
img = plt.imread(path)
h, w, c = img.shape
ys, xs = np.indices([h, w])
th = xs/w*np.pi*2
phi = np.pi/2 - ys/h*np.pi

x = np.cos(phi)*np.cos(th)
y = np.cos(phi)*np.sin(th)
z = np.sin(phi)

cs = [tuple(c/255) for c in img.reshape(-1,3)]
ax = plt.subplot(projection='3d')
ax.scatter(x, y, z, marker='.', c=cs)
plt.axis('off')
plt.show()

其中scatter画的是散点图,c=cs为颜色映射参数,所以温馨提示,选取的地球图片不宜过大,否则点太多会让电脑爆掉。

最后得到的效果如下

让地球转起来

三维空间中的旋转矩阵如下表所示,具体讲解可参考这两篇博客:旋转坐标轴💎旋转正方体

有了旋转矩阵,接下来就是让地球转起来。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import animation

cos = lambda th : np.cos(np.deg2rad(th))
sin = lambda th : np.sin(np.deg2rad(th))

Rz = lambda th : np.array([
    [cos(th) , -sin(th), 0],
    [sin(th), cos(th), 0],
    [0       , 0,       1]])

xyz = np.array([x,y,z]).reshape(3,-1)

fig = plt.figure(figsize=(5,5))
ax = fig.add_subplot(projection='3d')
ax.grid()

lines = ax.scatter(x, y, z, marker='.', c=cs)

def animate(n):
    # 按照xyz顺序旋转
    axis = [2,1,0]
    shape = xyz.shape
    lines._offsets3d = Rz(n)@xyz
    return lines,

ani = animation.FuncAnimation(fig, animate, 
    range(0, 360, 2), interval=25, blit=True)

#plt.show()
ani.save("zyx.gif")

效果如下

以上就是Python实现绘制3D地球旋转效果的详细内容,更多关于Python3D地球旋转的资料请关注脚本之家其它相关文章!

相关文章

  • python实现web应用框架之增加响应对象

    python实现web应用框架之增加响应对象

    这篇文章主要介绍了python利用web应用框架如何增加响应对象的,文中有相应的代码示例,对大家的学习或工作有一定的参考价值,需要的同学可以参考下
    2023-05-05
  • 利用Python第三方库实现预测NBA比赛结果

    利用Python第三方库实现预测NBA比赛结果

    今天给大家带来的是关于Python的相关知识,文章围绕着利用Python实现预测NBA比赛结果展开,文中有非常详细的介绍,需要的朋友可以参考下
    2021-06-06
  • python调用dll出现精度问题解决

    python调用dll出现精度问题解决

    本文主要介绍了python调用dll出现精度问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • Python实现简单字典树的方法

    Python实现简单字典树的方法

    这篇文章主要介绍了Python实现简单字典树的方法,实例分析了Python字典树的定义、实现与使用技巧,需要的朋友可以参考下
    2016-04-04
  • 如何利用Python+Vue实现简单的前后端分离

    如何利用Python+Vue实现简单的前后端分离

    因为python开发的高效性,python web开发也受到越来越多人的关注,下面这篇文章主要给大家介绍了关于如何利用Python+Vue实现简单的前后端分离的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • 打包Python代码的常用方法实现程序exe应用

    打包Python代码的常用方法实现程序exe应用

    Python是一门强大的编程语言,但在将Python代码分享给其他人时,让他们安装Python解释器并运行脚本可能有点繁琐,这时,将Python代码打包成可执行的应用程序(.exe)可以大大简化这个过程,本文将介绍几种常用的方法,轻松地将Python代码变成独立的可执行文件
    2023-12-12
  • Python Flask 搭建微信小程序后台详解

    Python Flask 搭建微信小程序后台详解

    这篇文章主要介绍了Python Flask 搭建微信小程序后台,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • Python上传package到Pypi(代码简单)

    Python上传package到Pypi(代码简单)

    这篇文章主要介绍了Python上传package到Pypi(代码简单)的相关资料,需要的朋友可以参考下
    2016-02-02
  • window环境pip切换国内源(pip安装异常缓慢的问题)

    window环境pip切换国内源(pip安装异常缓慢的问题)

    这篇文章主要介绍了window环境pip切换国内源(pip安装异常缓慢的问题),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • PyQt5+QtChart实现绘制极坐标图

    PyQt5+QtChart实现绘制极坐标图

    QChart是一个QGraphicScene中可以显示的QGraphicsWidget。本文将利用QtChart实现极坐标图的绘制,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-12-12

最新评论