用Python画一个3D太阳系

用Python画一个平面的太阳系得到一些朋友的欣赏,然后有同学提出了绘制三维太阳系的要求。

从Python画图的角度来说,三维太阳系其实并不难,问题在于八大行星对黄道面的倾斜太小,所以尽管画个三维的图,但就观感而言,无非是把二维的嵌入到三维空间罢了。

在这里插入图片描述

来点小行星

在这里插入图片描述

代码如下

from os import cpu_count
import numpy as np
from numpy.random import rand
import matplotlib.pyplot as plt
from matplotlib import animationau,G,RE,ME = 1.48e11,6.67e-11,1.48e11,5.965e24m = np.array([3.32e5,0.055,0.815,1,0.107,317.8])*ME*G
r = np.array([0,0.387,0.723,1,1.524,5.203])*RE
v = np.array([0,47.89,35.03,29.79,24.13,13.06])*1000theta = rand(len(m))*np.pi*2
cTheta,sTheta = np.cos(theta), np.sin(theta)
xyz = r*np.array([cTheta, sTheta, 0*r])     #位置三分量,因为参数太多,所以把这三个分量写在了一起
uvw = v*np.array([-sTheta, cTheta, 0*v])    #速度三分量N_ast = 100
m_ast = rand(N_ast)*1e20
r_ast = (rand(N_ast)*3.5+1.6)*RE
v_ast = np.sqrt(G*3.32e5*ME/r_ast)  #小行星速度sqrt(GM/R)theta = rand(N_ast)*np.pi*2
phi = (rand(N_ast)-0.5)*0.3     #给一个随机的小倾角
cTheta,sTheta = np.cos(theta), np.sin(theta)
cPhi,sPhi = np.cos(phi),np.sin(phi)xyza = r_ast*np.array([cTheta*cPhi, sTheta*cPhi, sPhi])
uvwa = v_ast*np.array([-sTheta*cPhi, cTheta*cPhi, sPhi])
name = "solar.gif"fig = plt.figure(figsize=(10,10))
ax = fig.add_subplot(projection='3d')
ax.grid()
ax.set_xlim3d([-5.5*RE,5.5*RE])
ax.set_ylim3d([-5.5*RE,5.5*RE])
ax.set_zlim3d([-5.5*RE,5.5*RE])traces = [ax.plot([],[],[],'-', lw=0.5)[0] for _ in range(len(m))]
pts = [ax.plot([],[],[],marker='o')[0] for _ in range(len(m))]
pt_asts = [ax.plot([],[],[],marker='.')[0] for _ in range(N_ast)]N = 500
dt = 3600*50
ts =  np.arange(0,N*dt,dt)
xyzs,xyzas = [],[]
for _ in ts:xyz_ij = (xyz.reshape(3,1,len(m))-xyz.reshape(3,len(m),1))r_ij = np.sqrt(np.sum(xyz_ij**2,0))xyza_ij = (xyz.reshape(3,1,len(m))-xyza.reshape(3,N_ast,1))ra_ij = np.sqrt(np.sum(xyza_ij**2,0))for j in range(len(m)):for i in range(len(m)):if i!=j :uvw[:,i] += m[j]*xyz_ij[:,i,j]*dt/r_ij[i,j]**3for i in range(N_ast):uvwa[:,i] += m[j]*xyza_ij[:,i,j]*dt/ra_ij[i,j]**3xyz += uvw*dtxyza += uvwa*dtxyzs.append(xyz.tolist())xyzas.append(xyza.tolist())xyzs = np.array(xyzs).transpose(2,1,0)
xyzas = np.array(xyzas).transpose(2,1,0)def animate(n):for i in range(len(m)):xyz = xyzs[i]traces[i].set_data(xyz[0,:n],xyz[1,:n])traces[i].set_3d_properties(xyz[2,:n])pts[i].set_data(xyz[0,n],xyz[1,n])pts[i].set_3d_properties(xyz[2,n])for i in range(N_ast):pt_asts[i].set_data(xyzas[i,0,n],xyzas[i,1,n])pt_asts[i].set_3d_properties(xyzas[i,2,n])return traces+pts+pt_astsani = animation.FuncAnimation(fig, animate, range(N), interval=10, blit=True)plt.show()
ani.save(name)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/59943.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

宇宙都要毁灭了你还在玩汉诺塔?(动画讲解汉诺塔问题)

CSDN话题挑战赛第2期 参赛话题:学习笔记 前言 💖作者:龟龟不断向前 ✨简介:宁愿做一只不停跑的慢乌龟,也不想当一只三分钟热度的兔子。 👻专栏:C初阶知识点 👻工具分享: …

物理研学论文MATLAB仿真——地月火箭三体问题的数值求解(平面圆形限制性三体问题的研究)

在二十世纪第一次数学家大会上,希尔伯特提出了“完美数学问题”准则,随后他举了两个例子,一个是费马猜想,另一个就是N体问题。近现代研究最多的就是三体问题。 三体问题就是三个天体在万有引力作用下的运动问题。三个天体的质量、…

关于计算机与教育的英语作文,信息技术对教育的影响英文作文

关于”信息技术对教育的影响“的英语作文范文2篇,作文题目:The influence of information technology on Education。以下是关于信息技术对教育的影响的小学英语范文,每篇作文均为真题范文带翻译。 高分英语作文1:The influence of information technology on Education Us…

维普导出参考文献

勾选需要导出参考文献的文章,点击“导出题录” 选择“参考文献”,点击“复制”或“导出”即可

同时处理知网、万方、维普数据库——CiteSpace、Ucinet、Vosviewer等

同时处理知网、万方、维普数据库——CiteSpace、Ucinet、Vosviewer等 全网独家[下文有视频教程] 《CiteSpace、Ucinet、Vosviewer、gephi等文献计量与可视化软件同时处理知网、万方、维普数据库》,结果更加客观、科学、权威! 目前,我们利用…

Zotero 导入中文数据库文献(知网、百度学术、万方和维普数据)

首先打开 github 页面。下载 zip 文件并解压。 zotero 导入中国知网等文献网站学术插件下载地址 打开 zotero 软件,依次打开 编辑 - 首选项 - 高级 - 文件和文件夹 - 打开数据文件夹。 找到本地磁盘文件夹,找到插件文件夹,将 js 文件复制到 …

会议记录管理系统(1)

A.系统分析 B.数据库设计流程 C.搭建系统架构的方法 D.ADODB类库技术的应用 E.熟悉ADODB类库操作mySql的使用方法 F.webBrowser预览与打印 G.生成excel报表 H.分类查询实现的应用 I.文件上传的实现方法 1.开发背景 2.需求分析 3.系统分析 - 系统目标 - 首页设…

小爱音箱mini无法响应的解决方法

1、按音箱的“暂停键”5秒。 2、听到“已进入设置模式”后,橙色灯常亮时在手机上打开小爱音箱app 3、重新设置网络: 选择路由器,路由器链接密码后,当语音提示已连接,说明设置完成。

BI工具如何提升工作效率:以瓴羊Quick BI、观远BI为例

最近一段时间,ChatGPT的横空出世让越来越多的人意识到了数字科技对于人们生活方式、工作方式的巨大变革作用。事实上,在企业中这样的例子早就十分常见。比如瓴羊Quick BI、观远BI等商业智能工具的出现和应用,就为现代企业的管理运营和工作效率…

【QT + OsgEarth】(一)-- 环境配置

OSG概述 OpenSceneGraph(简称OSG)使用OpenGL技术开发,是一套基于Ct平台的应用程序接口(API),它让程序员能够更加快速、便捷地创建高性能、跨平台的交互式图形程序。它作为中间件(middleware)为应用软件提供了各种高级渲染特性,IO&#xff0c…

Windows环境下配置CGAL

环境版本 CGAL-5.5 下载地址&#xff1a;https://github.com/CGAL/cgal/releases/tag/v5.5 Tips: 在该网址下同时下载<GMP and MPFR libraries for Windows 64bits>&#xff0c;并将下载后该文件下的gmp复制到CGAL的auxiliary进行覆盖。 Boost-1-18-0 下载地址&#xff1…

面向黑马头条学习

一&#xff1a;创建项目 进去选择第三个&#xff0c;人工选择&#xff1a; 二&#xff1a;加入git版本管理 查看git日志&#xff1a; github首次创建vuecli &#xff0c;自己提交了第一次代码 第二步&#xff0c;将本地仓库添加远程仓库地址 add后的origin后面地址 的名字&…

黑马头条简述

黑马头条 技术栈&#xff1a;springcloudgateway微服务之前架构的网关服务&#xff0c;实现微服务注册的api请求路由&#xff0c;控制流速和熔断处理 Springbootalibaba Nacos作为项目中注册中心和配置中心 Mybatis-plus作为持久层提升开发效率 Kafka完成内部系统消息通知&…

黑马头条-day02

文章目录 前言一、文章列表加载1.1 需求分析1.2 表结构分析1.3 导入文章数据库1.4 实现思路1.5 接口定义1.6 功能实现 二、freemarker2.1 freemarker简介2.2 环境搭建&&快速入门2.2.1 创建测试工程 2.3 freemarker基础2.3.1 基础语法种类2.3.2 集合指令2.3.3 if指令2.3…

百度沈抖:文心一言将通过百度智能云对外提供服务

2月17日&#xff0c;在2023 AI工业互联网高峰论坛上&#xff0c;百度智能云宣布“文心一言”将通过百度智能云对外提供服务&#xff0c;为产业带来AI普惠。 百度集团执行副总裁、百度智能云事业群总裁沈抖表示&#xff0c;“文心一言”是基于百度智能云技术打造出来的大模型&a…

大模型落地比趋势更重要,NLP+金融如何看得见、摸得着?

全球很多人都开始相信&#xff0c;以ChatGPT为代表的大模型&#xff0c;将带来一场NLP领域乃至整个人工智能的技术革命&#xff0c;影响遍及各行各业。 那么&#xff0c;金融机构和科技企业&#xff0c;应该以怎样的姿态迈入新的洪流&#xff1f; 前不久&#xff0c;有“中国智…

关于算力的未来,新一代PowerEdge告诉你答案

从ChatGPT等大模型海量参数的训练&#xff0c;自动驾驶领域感知模型的训练与仿真&#xff0c;到蛋白质机构预测、流体力学仿真等AIScience&#xff0c;再到矿山、交通、能源等部署广泛的边缘计算设备…… 如今&#xff0c;我们愈发确切地认识到&#xff0c;算力在数字经济时代不…

Meta 推出大型语言模型 LLaMA,比 GPT3.5 性能更高

整理 | 禾木木 责编 | 梦依丹 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; ChatGPT 的爆火使得大家对 AI 进行了深度的讨论&#xff0c;大厂们也都在向公众展示他们所谓的 "生成性人工智能"已经准备好进入黄金时代。 近日&#xff0c;Meta 宣布…

Chat Bot(聊天机器人)自动化测试脚本来解决人工测试的问题

问题描述&#xff1a;有一个Oliver Cafe Shop聊天机器人&#xff0c;如何实现自动化脚本自动测试这个聊天机器人的功能。 实现效果&#xff1a;通过代码来实现客户端发送请求来代替Bot Framework Emulator输入Tea,然后客户端监听和接收服务器端(Bot)发来的回复(图片中选择drin…

postman发送需要登录验证的请求

使用postman 发送后台需要登录验证的请求 postman需要填写的参数 Authorization的获取方式 打开前台发送一个成功的请求 找到里面的Authorization粘贴到postman参数那里就可进行请求了