猫史档案馆


【120进36】我们来啦,神奇的银河系!

用户:极光AXE极光AXE查看:1 回复:2 评论:1 创建时间:2021-05-15T22:48:09


本作品使用VPython实现了3D银河系并模拟了太阳系各种星球的自转以及围绕太阳旋转(包括月球围绕地球旋转)。

运行后,训练师们输入自己的名称,选择是否显示星球运动轨迹,之后训练师们可在VPython的世界中尽情游玩,观赏银河系。(本作品使用了本地图片,运行请下载相关图片)

运行效果图:

center_image

全部代码如下:

from vpython import *
import random
from easygui import msgbox,ynbox,enterbox

name = enterbox('请输入你的名称,训练师', '我们来啦,神奇的银河系!')
msgbox(f'欢迎,训练师:{name}。\n你是否想看一看自己居住的银河系呢?\n一起来到VPython的世界探究银河系吧!','我们来啦,神奇的银河系!')
choose = ynbox('是否显示星球转动轨迹?', '我们来啦,神奇的银河系!', ('显示', '隐藏'))
scene.width = 1500
scene.title = '我们来啦,神奇的银河系!'
scene.height = 700
scene.background = vec(0, 0, 25/255)
imglist = ['星球纹理1.png','星球纹理2.jpg','星球纹理3.png']
planet_list = []
def new_planet(radius=1, texture=None, pos=vec(0, 0, 0),status=choose):
    planet = sphere(radius=radius, texture=texture, pos=pos,make_trail=status)
    return planet
def ranpos(a,b):
    return vec(random.randint(a,b),random.randint(a,b),random.randint(a,b))
Text = text(pos=vec(-200,850,0),text='Milky Way',color=color.white,height=50)
Milkyway = new_planet(800, '宇宙.png')
Sun = new_planet(10, '太阳纹理.jpg', vec(-30, 0, 270))
Mercury = new_planet(2.1, '水星纹理.jpg', vec(-12, 0, 270))
Venus = new_planet(2.4, '金星纹理.jpg', vec(-3, 0, 270))
Earch = new_planet(2.7, textures.earth, vec(5, 0, 270))
Moon = new_planet(1.8, '月球纹理.png', vec(10.2, 2.5, 270))
Mars = new_planet(2.46, '火星纹理.jpg', vec(19, 0, 270))
Jupiter = new_planet(5, "木星纹理.jpg", vec(29, 0, 270))
Saturn = new_planet(4,'土星纹理.jpg',vec(46,0,270))
Saturn_ring = ring(radius=6,axis=vec(0,1,0),pos=vec(46,0,270))
Uranus = new_planet(4.7,'天王星纹理.jpg',vec(75,0,270))
Neptune = new_planet(4.7,'海王星纹理.jpg',vec(95,0,270))
for i in range(random.randint(5, 15)):
    temp = new_planet(random.randint(3,8),texture=random.choice(imglist),pos=ranpos(-200,300))
    planet_list.append(temp)
sleep(3)
num = 0
while True:
    rate(60)
    num += 1
    #星球的自传运动
    Sun.rotate(0.014, vec(0, 1, 0))
    Mercury.rotate(0.012, vec(0, 1, 0))
    Venus.rotate(0.009, vec(0, 1, 0))
    Earch.rotate(0.01, vec(0, 1, 0))
    Mars.rotate(0.005, vec(0, 1, 0))
    Jupiter.rotate(0.01, vec(0, 1, 0))
    Moon.rotate(0.01,vec(0,1,0))
    Saturn.rotate(0.012,vec(0,1,0))
    Saturn_ring.rotate(0.012,vec(0,1,0))
    Uranus.rotate(0.13,vec(0,1,0))
    Neptune.rotate(0.092,vec(0,1,0))
    #星球的围绕太阳旋转运动
    Mercury.rotate(0.011, vec(0, 1, 0),Sun.pos)
    Venus.rotate(0.012, vec(0, 1, 0),Sun.pos)
    Earch.rotate(0.01, vec(0, 1, 0),Sun.pos)
    Mars.rotate(0.013, vec(0, 1, 0),Sun.pos)
    Jupiter.rotate(0.014, vec(0, 1, 0),Sun.pos)
    Moon.rotate(0.01,vec(0,1,0),Sun.pos)
    Moon.rotate(0.01, vec(0, 1, 0), Earch.pos)
    Saturn.rotate(0.015, vec(0, 1, 0),Sun.pos)
    Saturn_ring.rotate(0.015,vec(0,1,0),Sun.pos)
    Uranus.rotate(0.0112,vec(0,1,0),Sun.pos)
    Neptune.rotate(0.013,vec(0,1,0),Sun.pos)
    #其他星球自传效果
    for planet in planet_list:
        planet.rotate(0.02,vec(0,1,0))
    if num == 1500:
        msgbox(f'期待我们下次共同探索银河系更多的奥秘哦!{name}', '我们来啦,神奇的银河系!')

需要的图片(与名字相对应)需下载图片较多,请耐心下载:

center_image太阳纹理.jpg

center_image

水星纹理.jpg

center_image

金星纹理.jpg

center_image

月球纹理.png

center_image

火星纹理.jpg

center_image

土星纹理.jpg

center_image

木星纹理.jpgcenter_image

天王星纹理.jpg

center_image

海王星纹理.jpg

center_image

宇宙.png

center_image

星球纹理1.png

center_image

星球纹理2.jpg

center_image

星球纹理3.png


回复

上一页1 页 / 共 1下一页
HJS_鱼缸下的我HJS_鱼缸下的我

啊这。。。不是【120进36】,而是【120强进36】啊

点赞0


评论


HJS_鱼缸下的我HJS_鱼缸下的我

你这样是统计不到的

点赞0


评论