基于Desmos的欧拉法N体问题模拟
前言
本文将以由实到虚的顺序以Desmos为PoC介绍欧拉法N体问题一步步的实现,最终效果详见Demo或如下Desmos嵌入页面。不用RK4其实主要是因为技术力不够
一些给Desmos小白的啸提示
- 点击”Run”左侧的计时器以开始模拟
- 可在“属性”文件夹中修改如星体数量等数据
- 如果觉得表达式列表挡视野的话,可以点表达式列表右上角的双箭头将其收起
实现
可视元素
星体(“S”)
对于N体问题,首先需要有N个星体,即N个点并用S表示,具体数量应遵循自定义的原则,让用户自行调整。
首先应创建变量
应注意为所有元素设定定义域(包括范围、滑块步长等),避免数学错误。
例:
谁家好人设置-1颗星啊你说对吧
注:由于Desmos限制列表长度最大为10000项,故星体数量不得超过100个,否则受力列表项数 设100真的不卡吗
此处的星体作为点阵当然需要设置坐标。
任务一:找到合适的方法表示S
笔者在编写此处时想到了以下方案:
很容易能够想到令
为解决以上问题,我们需要为 这玩意在py里面不是叫循环么
Desmos函数random()用法简介
什么,你问我怎么用?字面意思,random随机数。不过有几点细节要注意:
1.写
2.在该函数的括号中写入一个自然数(记为
3.该函数生成的随机数范围为
$设随机数的范围为a,b,则r=a+random()(b-a)$ 。
Desmos列表推导式for用法简介
利用 fori=[1,2,\dots,10]$ 则会输出:
=0.0174524064373 0.0348994967025 0.0523359562429 0.0697564737441 0.0871557427477 0.104528463268 0.121869343405 0.13917310096 0.15643446504 0.173648177667
如果循环的变量有2个则可以达到“双重循环”的效果(等同于循环中再嵌套一个循环。更多变量以此类推):
上例将会输出一个有
根据以上内容便可列出 $S=(a,b)fora=random(n),b=random(n)$ 。然而当你真的输入这个式子你会发现屏幕上有一大堆不明所以的点阵(如下图)。
由于Desmos对于多重循环采用排列组合的逻辑,故该表达式输出的结果是一个含有
Desmos赋值符
简单来说:使变量变成你指定的东西。
例:
同理可得:
经过测试,把点的
综上,方案三成功 (无感情
星体属性(“m”,” “,” “)
作为恒星而非光子,星体总是有内禀质量,因而需要创建集合
更多内容尚待完善~
- 标题: 基于Desmos的欧拉法N体问题模拟
- 作者: EtherformTM
- 创建于 : 2026-07-06 08:08:57
- 更新于 : 2026-08-22 07:45:44
- 链接: https://etherform.dpdns.org/2026/07/06/n-body-problem-simulator/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。