问题标签 [orbital-mechanics]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
511 浏览

ios - 控制围绕球体运行的物体

我想让用户控制在静态球体表面上移动的对象。使用两个按钮来顺时针和逆时针旋转物体的方向,因为它像小行星一样不断向前移动。

在场景工具包中,SCNNode 有三个不同的方向属性,我真的不知道从哪里开始。我了解如何执行除围绕球体旋转之外的所有操作。

0 投票
2 回答
8883 浏览

c# - 是否有可能在大小和质量方面进行逼真的 n 体太阳系模拟?

重要提示:这个问题与“PhysX”完全没有关系,它是一个计算机游戏物理系统(对球类游戏等街机游戏中的物理很有用);PhysX 是 Unity3D 和其他游戏引擎内置的系统;PhysX 在这里完全无关紧要。

/////////////////更新(先读底部)//////////////////

我一直在记录值并搜索确切的问题所在,我想我找到了。我的代码中有这样的东西

现在的加速度大约是 0,0000000000000009..。随着代码的流动,速度应该会增加,浮动没有问题。但在开始时,地球的初始位置是 (0,0,23500f) 你可以在我最后给出的图表中看到这一点。

现在,当我将 speed * timedelta (此时类似于 0,00000000000000005)添加到 23500 的位置时,它基本上不会添加它。位置仍然是 (0, 0, 23500) 而不是 (0,0, 23500.00000000000005),因此地球不会移动,因此加速度不会改变。

如果我将地球的初始位置设置为 0,0,0 并且仍然将加速度设置为 0.0000000000000000009 以假设它的位置是(0,0,23500)然后“添加”速度* timedelta。它变得类似于 (0,0,000000000000000000005) 并保持增加。当 float 为 0 时,添加这么小的值是没有问题的。但如果浮点数类似于 23500,则它不会将小值相加。

我不知道这究竟是统一的问题还是c#的浮动。

这就是为什么我不能让它与小值一起工作。如果我能克服这一点,我的问题就会得到解决。

///////////////////////////////////////// /////////////////////////

我一直在开发 n 体物理学来模拟我们的太阳系,所以我一直在收集数据以使其尽可能逼真。但是数据大小存在问题。我搜索了互联网的每一点,我找不到人们如何克服这一点的单一解释。(如果他们是的话)所以我在这里尝试我的镜头。

因此,为了保持行星之间的距离、半径和“质量”的比率固定,我创建了一个 Excel 文件来计算所有数据。(因为为什么有人会在互联网上发布“如果地球上有“那个”半径图的话,地球的质量会是多少?)我会把 ss 作为附件。它基本上将行星的每个属性“标准化”或换句话说“缩放”到给定的参考。在这种情况下,我将参考作为“地球的半径”。

我在团结中工作,你知道,你不能在团结中使用“太大”或“太小”的价值观。所以我不得不把太阳系缩小,“很多!”

所以我使用牛顿万有引力定律,即 F = GMm/r^2,为了简单起见,我直接从所有其他物体中计算给定物体的 a = GM/r^2。

因此,地球“朝向太阳”的重力加速度的实际值大约为 0,000006 km/s^2,这对于统一使用来说是非常小的值,但它可以工作。然而,要获得这个值,1 我需要将地球的半径(比例)设置为 6371 单位,将太阳的比例设置为 696,342!,这太大而无法统一渲染。

所以我说,让地球的半径为 1,以单位为单位。所以,当半径发生变化时,一切都会发生变化,质量、距离……我保持了行星的密度,并从新的体积和新的半径计算质量。所有的计算都在附件中。

所以问题是,当我将地球的半径设为 1 时,对太阳的引力加速度变成了 0,0000000000009 之类的东西,这非常小。当然,Unity 不适用于该值。

所以,如果我改为增加地球的半径,那么太阳的质量和半径就会变得大得离谱,然后我就无法使用它。

我不知道其他人是如何解决这个问题的,他们做了什么来克服这个问题,但正如我从这里看到的,看起来不可能对太阳系进行逼真的 n 体模拟。(至少统一)

所以我需要有 10 个代表来发布图片-_-,我会提供链接。 http://berkaydursun.com/solar_system_simulator/data.PNG 另外一个目录是具有 n 体计算但具有 UNREALISTIC 值的工作实验太阳系模拟。它工作得很好,甚至看起来有点接近真实,但是不,它没有正确的比率^^如果你愿意,你可以在这里测试它http://berkaydursun.com/solar_system_simulator/

编辑:哇,我几乎每个段落都以“So”开头^^

0 投票
0 回答
233 浏览

c# - 获取升序和降序轨道节点的位置

我正在制作一个太空模拟游戏,但我一直无法获得上升和下降轨道节点的位置。我知道如何在轨道的任何角度获得位置,但它是从轨道中心测量的,而不是轨道物体中心。

这是一张图片,显示了我正在努力实现的目标: 在此处输入图像描述

如何获得从中心到两个轨道节点的角度?这是我现在拥有的代码。它以正确的角度返回节点,但距离不正确。

0 投票
1 回答
142 浏览

ios - 如何获取对象中特定 X 位置的度数?

这是我像卫星在行星上一样围绕圆圈移动正方形的方法:

正如你所看到的,我得到了我的卫星的 x 和 y 位置,并用度 ++ 调用这个方法,我得到了围绕行星的圆周运动。

但是我对这个运动系统的问题是我需要satelite.position.x+satelite.size.width/2检测与另一个使用相同运动系统移动的物体的碰撞程度。

任何人都知道如何获得这个价值?

0 投票
0 回答
632 浏览

objective-c - Velocity Verlet 算法:似乎无法确定稳定轨道的正确速度?

像许多关于这个主题的帖子一样,我也正忙于为自己编写一个准确的模拟器,用于在 2D 引力场中的物体运动。

我很早就决定选择Velocity Verlet积分,因为我希望我的物体保持稳定的轨道并节省能量,即使时间步长相当大。那么,问题可能是什么?

好吧,到目前为止,一切似乎都正常运行,除了一个组件。当我尝试计算某个距离的稳定轨道的正确速度时,所得速度会将它们发送到奇数椭圆轨道,每次都会迅速增加幅度。

因此,首先,以下是确定对象在场景中的下一个位置、速度和加速度的方法:(目标 C)

加速度:

酷,所以基本上,我只是拿一个物体,将每个其他物体施加在它上面的所有其他力相加,然后将 X 和 Y 因子除以当前物体的质量以获得加速度!

接下来是速度。在这里,我使用以下等式:

在此处输入图像描述

它的方法也很简单:

最后,定位!这个方程是:

在此处输入图像描述

并通过以下方法确定!

这都是从下面的方法调用的!!

好的,以上这些方法决定了对象在场景中的移动方式。现在回到最初的问题,实现稳定轨道的永远存在的问题!

为了确定一个物体维持轨道的速度,我使用以下等式: 在此处输入图像描述

我实现如下:

出于某种原因,尽管如此,我得到了糟糕的结果。这是一些输出:

信息:

重力(常数)= 1000(用于测试目的)

质量(父)= 5000 单位

质量(卫星)= 1 个单位

分离 = 224 像素

它确定为了让卫星绕父轨道运行,速度为:

149.403580 像素/timeStep

是必须的。这在我的计算器上进行了检查。

所以这让我对可能出了什么问题感到有些困惑。我记录了有关新速度和位置的所有输出,它确实使用了我设置的速度,但这似乎并没有什么不同。如果有人可以帮助发现这里出了什么问题,我将不胜感激。

如果有人认为我遗漏了某些内容,请告诉我,我将立即对其进行编辑。谢谢!

0 投票
1 回答
1045 浏览

unity3d - 圆形轨道公式在统一 3D 中不起作用

我正在开发一款游戏,我必须在其中实现一些空间物理学,如轨道和重力......

我的主要问题是我无法正确围绕行星(或另一个物体)制作 GameObject 轨道,我正在尝试使用物理教科书中的一个古老的著名公式来做到这一点:

v = sqrt( G * ((m1 + m2)/r ))

其中v是轨道物体的速度,G是常数,m1和m2是轨道物体和行星的质量,r是到m1和m2中心的距离。

这是我的实现:

circularOrbit函数在FixedUpdate统一为物理脚本提供的每一帧中被调用。

现在这是一个足以解释我的问题的小 gif:http: //makeagif.com/i/-JxBG8

这里还有一些关于我的设置的信息:

  • 怪物质量为 1 个单位,行星质量为 5 个单位。
  • 怪物的重力已关闭。
  • G 的值为 1(我已经测试了许多值而没有解决问题)

最后,我知道我不是第一个这样做的人,但是我本周搜索了很多关于如何做到这一点,主要是我的代码是 Box2D 端口,并进行了一些调整和更改,我已经发布了一个问题GameDev.net在这里,但任何建议都有效。

请帮助我解释为什么它不能以物理初学者的方式工作,我整周都被困在这件事上。

0 投票
1 回答
824 浏览

c# - Unity 3D中轨道物体和行星之间的距离大小变化

我很难理解,因为我无法理解这个问题:

我正在尝试使用维基百科上的公式使物体在围绕行星的圆形轨道上移动,这里的任何方式都是我的代码:

2D Collidercol是行星轨道的对撞机,当我的物体撞到这个对撞机时,它根据我所做的计算开始以圆形方式移动。

一切都在具有某些条件的固定更新中进行(与本主题无关),我面临的问题是我的距离幅度每帧都在变化,我需要它保持不变!

这会导致问题,因为速度会改变并且对于其他脚本我需要修复它。

r以下是距离大小的一些值:

4.602833

4.602901

4.603098

变化很小,但对我的游戏性影响太大。

那么请解释为什么会发生这种情况?

谢谢 。

0 投票
1 回答
1389 浏览

java - Accurate Circular Orbit Equation in java

Produces a double from 0 to 2, 0 being when ship.locY < planets.get(i).locY && ship.locX == (planets.get(i).locX - planets.get(i).radi). (when relative X = 0 and relative Y < 0.)

This uses the data to modify the X and Y velocities of the spacecraft.

This equation works for the majority of an orbit, but under certain circumstances has an issue in which the spacecraft undergoes a retrograde force, slowing it. Shortly afterward it begins to be repelled by the planetary body, which after a short period begins attracting it again. When the spacecraft reaches the original position at which this occurred, it begins to move in the opposite direction of its original orbit.

This continues to occur until the spacecraft begins a wavelike motion.

Is there a way to solve this, or am I simply using the wrong equation? I've been attempting to fix this for about two weeks now. I have no education in physics nor calculus at this point in time, so my understanding is limited.

Edit: The comments had questions about my math, so I'll attempt to answer them here. From what I know about atan2, it produces a number from -pi to pi. I divide by pi to produce a number from -1 to 1, then add 1 to produce 0 to 2. I then use this number as a radian measurement. My knowledge of radians (unit circle) is that a circle's radian measure is 0 to 2pi.

Edit 2: The following code has very different math but produces the desired results, save for issues of repelling rather than attracting when approaching the North and South 'poles' of the planet.

I wrote it up very quickly to see if using the slope of the line rather than that strange atan2 equation would help. Apparently it did. I also made the code a bit more readable in this section.

0 投票
1 回答
826 浏览

python - Python中的前向欧拉N体模拟没有返回正确的结果

#Forward Euler N-Body Simulation 该程序从星历中获取太阳系行星在特定日期的位置和速度,然后使用前向欧拉积分方法模拟行星的运动。

这种模拟背后的基本物理学是牛顿万有引力定律。

对于积分的每次迭代,每个 jth 行星对第 i 个行星(其中 j !=i)的影响被累积计算。

#X 中 n 的结果:打印 n

#Problem 正如我们所看到的,每颗行星的 X 位置在每次迭代中都变得非常大,实际上如此之大,以至于如果程序运行太多次迭代,数字就会变得如此之大,以至于无法再表示它们。显然有一个问题,我无法确定。

我觉得我要么没有看到简单的语法错误,要么我的列表构造的语义不正确。

需要明确的是:对于每个最终列表(X、Y、Z、VX、VY、VZ),第一个索引标识迭代,第二个索引标识行星。

所以 X[1][1] 将在第二次迭代中给出 Mercury 的 X 位置。

请帮助我确定我在这里做错了什么。

0 投票
1 回答
1074 浏览

c++ - 太阳系模拟器物理集成问题(虚幻引擎 4,C++)

所以我在 Unreal Engine 4 中使用 C++ 为大学项目制作这个太阳系模拟器,但是,我是 C++ 和 UE4 的新手,而且我的数学很烂,所以我需要一些帮助,我想使用欧拉积分器现在只是为了获得一些基本的物理学知识并让月球绕地球运行,然后继续使用 Velocity Verlet 方法并以这种方式构建整个太阳系。但是,到目前为止,即使是欧拉积分也不起作用。这是 Moon.cpp 中的代码

值可能不正确,此时我只是在进行测试。我将这段代码基于我在谷歌和多个网站上获得的不同信息,但在这一点上我很困惑。正在发生的事情是,月球只是开始朝 1 个方向移动,并且从未停止过。我知道我的问题在于地球的力/加速度/实际重力,它应该拉月球而不是推开它。但无论如何,如果有人知道我做错了什么,我会很感激听到你要说的话!谢谢