用python实现旋转地球

用python实现旋转地球

先上效果图

在这里插入图片描述

素材

本文只讲最简单也是最常见的正侧面旋转地球。
首先你得有一张360度贴图,效果如下图。在网上搜一下,这种图很多,容易获得。
在这里插入图片描述
它的特点是高度恰好是宽度的一半,因为地球一周有360度,而从南极到北极只有180度。这种360度贴图,标明了每个经纬度上地球的表面效果。仔细观察会注意到,南北两极变形剧烈,而中间地带和我们经常见到的地图比较相似。
我们称它为经纬度贴图。

基本原理

旋转地球之所以看起来是旋转的,只是因为它上面显示的内容在变。其实起点只是一个圆。我们所做的,只是把经纬度贴图中的像素以合理的方式贴到圆上去。然后再把一帧帧图片连接为GIF动图即可。

贴图的方法是:
1、选择圆内的所有点。
2、计算每一点对应的经纬度。
3、从经纬度贴图上获取该经纬度对应的xy坐标
4、获取像素写入图片
5、制作GIF

计算过程是比较简单的球面几何,下面结合代码讲解。

1 获得圆内所有的点

这个比较简单

    img= Image.new('RGBA', (300,300), 'black')
    w= img.size[0]
    h= img.size[1]
    pxList=[]
    pyList=[]
    for i in range(w):
        for j in range(h):
            r= math.sqrt((i-w/2)**2+(j-h/2)**2)
            if r<150:
                pxList.append(i)            
                pyList.append(j)

2 计算经纬度

  1. 首先从平面坐标获得三维坐标
    球面上的任意一点,有一个规律是x2 + y2 + z2 = 1
    我们就用这个原理,可以获得圆内每个点的z值

  2. 根据x,y,z计算球面的经纬度

为了让计算速度尽量快一些,这里用numpy

def calcSphereXY2XYZ(px, py, maxHeight, longOffset):
    v0x= np.array(px)
    v0y= np.array(py)
    v03= np.subtract(v0x, maxHeight)
    v04= np.subtract(v0y, maxHeight)
    v1x= np.true_divide(v03, maxHeight)
    v1y= np.true_divide(v04, maxHeight)
    v07= np.power(v1x,2)
    v08= np.power(v1y,2
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

圣手书生肖让

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值