鱼C论坛

 找回密码
 立即注册
查看: 2581|回复: 6

有人能写出这个二体系统的稳定一些的解吗

[复制链接]
发表于 2023-3-4 17:30:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码如下
  1. # -*- coding:utf-8 -*-
  2. """
  3. @Author: 歌者文明清理员1410382
  4. @Datetime: 2023-03-04 16:26:16
  5. @Name: 双星系统.py
  6. @OriginLink:
  7. """
  8. from calc import *

  9. a = obj(1, 0.5, vec(0.2, 0, 0), color.yellow, True, vec(0, 0, -10))
  10. b = obj(1, 0.5, vec(-0.2, 0, 0), color.cyan, True, vec(0, 0, 10))
  11. earth = obj(0.000000000000000000000000000000000001, 0.2, vec(0.2, 0.295, 0.01), color.blue, False, vec(0, 15, 0))
  12. mainloop(1)
复制代码

calc.py内容如下
  1. # -*- coding:utf-8 -*-
  2. """
  3. @Author: 歌者文明清理员1410382
  4. @Datetime: 2023-03-04 16:21:03
  5. @Name: calc.py
  6. @OriginLink:
  7. """
  8. from vpython import *


  9. def obj(mass, radius, momentum, color, emissive, pos, lock=False):
  10.     a = sphere(color=color, make_trail=True, retain=150, trail_width=radius / 10)
  11.     a.mass = mass
  12.     a.radius = radius
  13.     a.momentum = momentum
  14.     a.trail_color = color
  15.     a.emissive = emissive
  16.     a.pos = pos
  17.     a.locked = lock
  18.     if a.emissive:
  19.         attach_light(a)
  20.     stars.append(a)
  21.     return a


  22. def move(g=1):
  23.     for sa in stars:
  24.         sa.pos += sa.momentum * (not sa.locked)
  25.         for sb in stars:
  26.             if sa == sb:
  27.                 continue  # samestar
  28.             distance = mag2(sa.pos-sb.pos)**1.5
  29.             if distance < limit:
  30.                 distance = limit
  31.             force = g * sa.mass / \
  32.                 distance * (sa.pos-sb.pos)
  33.             sb.momentum += force


  34. def mainloop(dt=1, g=1):
  35.     scene.width, scene.height = 1900, 1050
  36.     scene.range = 100

  37.     while True:
  38.         rate(dt * 100)
  39.         move(g)


  40. stars = []
  41. limit = 0.001
复制代码

每次都是甩出去,而且两个恒星慢慢的总是会相撞弹开
我知道弹开是因为,它们撞在一起时,距离的平方突然上升导致速度上升
准备工作
  1. pip install vpython -i https://mirrors.aliyun.com/pypi/simple
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-3-4 18:44:40 | 显示全部楼层
本帖最后由 歌者文明清理员 于 2023-3-4 18:46 编辑

只需要改参数就行了,10-12行第三个参数(速度)最后一个参数(初始位置)
因为模拟中的二体系统中的行星轨迹极不规律,到处乱飞,有三体星系那么难以生存
改一点点参数(0.001)整个轨迹就完全不一样了

  1. obj(质量, 半径, 速度, 颜色, 是否发光, 位置[, 位置是否锁定])
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-5 10:14:18 | 显示全部楼层
歌者文明清理员 发表于 2023-3-4 18:44
只需要改参数就行了,10-12行第三个参数(速度)最后一个参数(初始位置)
因为模拟中的二体系统中的行星 ...

这难道就是芝士的力量吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-5 10:17:18 | 显示全部楼层
wyhpylc 发表于 2023-3-5 10:14
这难道就是芝士的力量吗

你说哪个,公式我是从 glowscript 的例子上复制的(已做出太阳系,正在完善,有轨道倾角,离心率也有)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-5 10:27:33 | 显示全部楼层
歌者文明清理员 发表于 2023-3-5 10:17
你说哪个,公式我是从 glowscript 的例子上复制的(已做出太阳系,正在完善,有轨道倾角,离心率也有)

az,粘贴的也厉害啊,我甚至看不懂这个公式]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-5 10:31:31 | 显示全部楼层
wyhpylc 发表于 2023-3-5 10:27
az,粘贴的也厉害啊,我甚至看不懂这个公式]

我也看不懂
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-5 10:35:00 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-24 18:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表