【发布时间】:2019-02-05 21:37:16
【问题描述】:
美好的一天,我正在尝试在 javascript 中创建一个简单的 2D 太阳系模型,但在理解如何计算下一帧的行星位置以及我将要介绍的其他一些位时遇到了一些麻烦很快就会详细介绍。
在观看了this 非常好的视频和他的一大堆其他视频后,我制作了一个快速的 MS 绘画图像来尝试简化我的情况。 在第二个场景中,您可以看到新位置是使用速度、引力和这两个'方向'之间的角度计算的?
我不知道如何弄清楚这一切。
下面是我的代码的 JS 小提琴。您会注意到我正在尽最大努力使用真实的 NASA 给定数据来保持其准确性。
您需要特别查看第 138 行,这是为下一步进行所有计算的地方。
https://jsfiddle.net/c8eru7mk/9/
attraction: function(p2) {
// Distance to other body
var dx = p2.position.x - this.position.x;
var dy = p2.position.y - this.position.y;
var d = Math.sqrt(dx ** 2 + dy ** 2); // Possibly correct
// Force of attracrtion
this.f = G * (this.mass * p2.mass) / (d ** 2); // Possibly Correct
// Direction of force, If you read it hard enough you should be able to hear my screams of pain
// Not sure if this is correct, most likely not.
var theta = Math.atan2(dy, dx);
var fx = Math.cos(theta) * this.f;
var fy = Math.sin(theta) * this.f;
this.velocity.x += fx / this.mass;
this.velocity.y += fy / this.mass;
this.position.x += this.velocity.x;
this.position.y += this.velocity.y;
}
我目前面临的问题是
- 如果我要使用 NASA 值,行星之间的距离会很大,它们无法显示在屏幕上,而且我不能简单地通过将它们乘以 0.0002 或其他值来缩小距离,因为那样会与引力常数混淆,模拟将完全关闭。
- 我不知道如何计算下一个位置,我的大脑在过去一周内多次尝试尝试多次。
- 我不知道如何检查我的行星配置数据是否错误,或者模拟是否错误,所以我只是猜测。
这也是我第一次在 javascript 中实际编写比按钮更复杂的代码,欢迎对代码布局等提供反馈!
非常感谢
【问题讨论】:
-
从一个按钮到为宇宙建模是一个很大的飞跃!你可能想更零碎地处理这个问题——尝试只模拟一个有重力的物体,然后是两个没有重力的物体,然后是两个有重力的物体,等等......你还可以查看 JavaScript 中的 2d 物理库,已经实施了这些力量。
-
YouTube 上有一系列关于在 JavaScript 中使用 p5.js 库模拟力的精彩视频。 This one 与重力有关。
-
只是为了解决您的第一个要点:您需要按比例缩小质量,但不是相同的因子 0.0002 或其他。您希望行星保持相同的轨道周期。看看Kepler's 3rd law。为了保持
T不变,质量必须按照距离的立方根进行缩放。
标签: javascript math simulation physics