先上效果:

只有3颗恒星
3+3(3颗行星一开始重叠)

图是用Graphics画的,轨道计算采用经典力学计算(所以导致非常不准)。
以下代码仅供参考,有建议可以提出。
一、首先定义Graphics和坐标系:

Dim a As Graphics
a = Me.CreateGraphics
a.DrawLine(black, x, 0, x, 2 * y)
a.DrawLine(black, 0, y, x * 2, y)

二、然后计算。首先写三颗恒星。
1.先计算距离

r1f = (x20 - x10) * (x20 - x10) + (y20 - y10) * (y20 - y10)
r2f = (x20 - x30) * (x20 - x30) + (y20 - y30) * (y20 - y30)
r3f = (x30 - x10) * (x30 - x10) + (y30 - y10) * (y30 - y10)
r1 = Math.Sqrt(r1f)
r2 = Math.Sqrt(r2f)
r3 = Math.Sqrt(r3f)

2.计算每颗恒星的受力,以x,y轴方向的力表示。

         a1m2 = g * m2 / r1a1m3 = g * m3 / r3a2m1 = g * m1 / r1a2m3 = g * m3 / r2a3m1 = g * m1 / r3a3m2 = g * m2 / r2sina1 = (y20 - y10) / r1cosa1 = (x20 - x10) / r1sina2 = (y20 - y30) / r2cosa2 = (x30 - x20) / r2sina3 = (y10 - y30) / r3cosa3 = (x30 - x10) / r3a1x = a1m2 * cosa1 + a1m3 * cosa3a1y = a1m2 * sina1 - a1m3 * sina3a2x = a2m3 * cosa2 - a2m1 * cosa1a2y = -a2m3 * sina2 - a2m1 * sina1a3x = -a3m1 * cosa3 - a3m2 * cosa2a3y = a3m1 * sina3 + a3m2 * sina2

3.计算下一帧的位置

         x1t = x10 + v1x0 * t + 0.5 * a1x * t * ty1t = y10 + v1y0 * t + 0.5 * a1y * t * tx2t = x20 + v2x0 * t + 0.5 * a2x * t * ty2t = y20 + v2y0 * t + 0.5 * a2y * t * tx3t = x30 + v3x0 * t + 0.5 * a3x * t * ty3t = y30 + v3y0 * t + 0.5 * a3y * t * t

4.绘图a.DrawLine(red, x10 + x, y10 + y, x1t + x, y1t + y)
5.为下一帧初始化

         x10 = x1ty10 = y1tx20 = x2ty20 = y2tx30 = x3ty30 = y3tv1x0 += a1x * tv1y0 += a1y * tv2x0 += a2x * tv2y0 += a2y * tv3x0 += a3x * tv3y0 += a3y * t

然后写个for循环就行了。
接下来写行星。
按照上面同样的步骤。

                 r4 = Math.Sqrt((x40 - x10) * (x40 - x10) + (y40 - y10) * (y40 - y10))r5 = Math.Sqrt((x20 - x40) * (x20 - x40) + (y20 - y40) * (y20 - y40))r6 = Math.Sqrt((x30 - x40) * (x30 - x40) + (y30 - y40) * (y30 - y40))a1m4 = 0a4m1 = g * m1 / r4a2m4 = 0a4m2 = g * m2 / r5a3m4 = 0a4m3 = g * m3 / r6sin4 = (y10 - y40) / r4cos4 = (x10 - x40) / r4sin5 = (y20 - y40) / r5cos5 = (x20 - x40) / r5sin6 = (y30 - y40) / r6cos6 = (x30 - x40) / r6a4x = a4m1 * cos4 + a4m2 * cos5 + a4m3 * cos6a4y = a4m1 * sin4 + a4m2 * sin5 + a4m3 * sin6x4t = x40 + v4x0 * t + 0.5 * a4x * t * ty4t = y40 + v4y0 * t + 0.5 * a4y * t * ta.DrawLine(purple, x40 + x, y40 + y, x4t + x, y4t + y)x40 = x4ty40 = y4tv4x0 += a4x * tv4y0 += a4y * t

最后将这部分复制3份即可模拟3颗行星。
三、美化
1.左上角显示数据

         Dim s As Strings = iMe.Text = "现在是第" + s + "步"If i Mod 50 = 0 Then'防止运算过慢影响程序顺滑度Label2.Text = x10 & vbCrLf & x20 & vbCrLf & x30 & vbCrLf &x40 & vbCrLf & x402 & vbCrLf & x403Label3.Text = y10 & vbCrLf & y20 & vbCrLf & y30 & vbCrLf &y40 & vbCrLf & y402 & vbCrLf & y403Label4.Text = Math.Sqrt(v1x0 * v1x0 + v1y0 * v1y0) & vbCrLf &Math.Sqrt(v2x0 * v2x0 + v2y0 * v2y0) & vbCrLf &Math.Sqrt(v3x0 * v3x0 + v3y0 * v3y0) & vbCrLf &Math.Sqrt(v4x0 * v4x0 + v4y0 * v4y0) & vbCrLf &Math.Sqrt(v4x02 * v4x02 + v4y02 * v4y02) & vbCrLf &Math.Sqrt(v4x03 * v4x03 + v4y03 * v4y03)End IfApplication.DoEvents()'防止程序锁死

最后做一个启动器就成了。
完整程序下载://download.csdn.net/download/tanksheng545/12152877
想要源代码的可以私信我,也可以使用邮件,邮箱地址在程序的使用方法里面。

vb.net 简单的方法模拟三体(有行星)相关推荐

  1. Python基础项目实践之:面向对象方法模拟简单计算器

    Python课堂基础实践系列: Python基础项目实践之:学生信息管理系统 python基础项目实践之: 学生通讯录管理系统 Python基础项目实践之:面向对象方法模拟简单计算器 Python基础 ...

  2. html 12306页面实现,jQuery模拟12306城市选择框功能简单实现方法示例

    本文实例讲述了jQuery模拟12306城市选择框功能简单实现方法.分享给大家供大家参考,具体如下: www.jb51.net jQuery城市选择框 #parent{ width:500px; po ...

  3. php模拟表格冻结,PHPExcel冻结(锁定)表头的简单实现方法

    本文实例讲述了PHPExcel冻结(锁定)表头的简单实现方法.分享给大家供大家参考,具体如下: PHPExcel是一款功能比较强大的操作微软excel的PHP插件,在导出数据时为了方便查看,有时需要锁 ...

  4. matlab模拟三体运动_从灯泡到超级计算机,如何模拟浩瀚星空?| 赛先生

    天文学家中有这样一群人,他们既不观星,也不刷公式,而是通过模拟来研究浩瀚星空.在星团.星系这样的恒星系统中,往往包含着上百万颗恒星,规模如此惊人的恒星系统该如何处理?本期"赛先生天文&quo ...

  5. 不用恐惧AI的高速发展,论击败阿法狗(零)最简单的方法

    作者:刘锋 计算机博士,互联网进化论作者 10月19日凌晨,在国际学术期刊<自然>(Nature)上发表的一篇研究论文中,谷歌下属公司Deepmind报告新版程序AlphaGo Zero: ...

  6. 教你一招超级简单的方法快速搞定grub.conf文件的丢失及损坏

    教你一招超级简单的方法快速搞定grub.conf文件的丢失及损坏 实验环境: GRUB是大多数Linux系统默认使用的引导程序,当"/boot/grub/grub.conf"配置文 ...

  7. 在我方某前沿防守地域 matlab,蒙特卡洛方法模拟小例子

    例 在我方某前沿防守地域,敌人以一个炮排(含两门火炮)为单位对我方进行干扰和破坏.为躲避我方打击,敌方对其阵地进行了伪装并经常变换射击地点. 经过长期观察发现,我方指挥所对敌方目标的指示有50%是准确 ...

  8. python条件语句-Python中条件判断语句的简单使用方法

    最简单的条件语句: if expression: expr_true_suite 如上,if是关键字,expression是条件表达式,条件表达式支持多重条件判断,可以用布尔操作符and.or和not ...

  9. [DirectX11]Gerstner波 实现简单的水面模拟

    上一篇文章中,介绍了一个简单数值方法来模拟圆形扩散波的效果,但是这种方法对于自然中像海浪一样的波 就无能为力了.所以,这篇文章介绍用Gerstner波来模拟水面波纹效果. 一.Gerstner波介绍 ...

最新文章

  1. 使用Python和OpenCV进行拍摄截图
  2. AI安防落地靠什么?大规模生产是关键
  3. 【原创翻译】如何命名变量
  4. Linux nano编辑txt文件,Linux 文本编辑器 nano 的简单使用
  5. 如何在mysql中添加用户_如何给mysql数据库添加一个用户
  6. group by 去重_【小学英语口语】07I have to pee. 我要去尿尿
  7. ASP.NET从字符串中查找字符出现次数的方法
  8. mysql deadlock6_mysql deadlock、Lock wait timeout解决和分析
  9. [C#]用Forms.TreeView显示Icon会有黑边
  10. Spring 注解 @Controller,@Service,@Repository,@Component,重定向 与 服务端跳转
  11. mysql 标记_mysql-徽章/标记内容自用户上次看到以来已...
  12. Android智慧城市代码——登录
  13. 计算机导论的平时分多少,2020级计算机导论
  14. 前端 关于汇率的计算
  15. 2010年上半年5月份系统分析师上午试题答案(分析与解答)之十
  16. Arduino云植物自动浇水
  17. 唐纳德和他的数学老师
  18. 数据中台与场景化分析
  19. 江苏省对口单招计算机学校有哪些,2019江苏对口单招学校都有哪些?
  20. 数组,类数组相关知识点

热门文章

  1. kde4实在是太漂亮了
  2. JAVA-XMLJSON
  3. Ionic + Vue3 + Capacitor 配置应用信(App 包名、应用名、应用图标、启动动画、版本信息)
  4. Discuz对不起,您安装的不是正版应用的解决办法
  5. 你想要的免费ppt资源(我帮你准备好啦!)
  6. 人脸识别技术开发解决方案,人脸识别智慧校园应用开发
  7. 互联网人出游必备清单
  8. matlab 画心形图片
  9. Office 2019 Office 2016 下载地址
  10. 人工神经网络的工作原理,神经网络的基本原理