当前位置: 首页 > 知识库问答 >
问题:

用迭代函数和时间步长对物理模拟进行编码

袁赞
2023-03-14

我想要创建一个物理模拟,其中的初始值是所有物体的初始位置矢量,所有物体的初始速度矢量,所有物体的质量,所有物体的电荷,在经过的初始时间为0。

模拟中计算两体之间距离的距离公式应与欧几里得空间中的距离公式相同。

任何另一个物体对任何物体的力矢量取决于两个物体的电荷乘以两个物体之间的距离f(距离)乘以(该物体的位置矢量减去另一个物体的位置矢量)除以两个物体之间的距离的函数的乘积。任何物体上的力向量的总和将取决于该物体上来自其他物体的力向量的总和。任何物体的加速度矢量都取决于该物体上的总力矢量除以该物体的质量。

在初始时间步长之后的每个时间步长中,每个物体的新位置向量将取决于1/2乘以先前的加速度向量乘以先前的时间步长的平方加上先前的速度向量乘以先前的时间步长加上先前的位置向量。新的速度向量将取决于先前的加速度向量乘以先前的时间步长加上先前的速度向量。而且,新经过的时间将取决于前一个经过的时间加上前一个时间步骤。

如果我改变维数、添加新物体、移除现有物体、改变现有物体的质量、改变现有物体的电荷、改变现有物体的位置向量、改变现有物体的速度向量,或者改变我前面提到的力的公式中距离的函数,这些公式需要自动调整以继续匹配我前面所说的。

模拟应该在超过三个维度的空间中工作。对于我在第三段中提到的距离函数f(距离),模拟应该支持尽可能多的距离函数,包括距离的三角函数,如距离的sin(距离)和cos(距离),距离的双曲触发器函数,如距离的cosh(距离)和sinh(距离)多项式,距离的幂,如e^distance(距离),距离的对数,距离的贝塞尔函数,距离的误差函数,以及这些函数的组合,如果可能的话,其他函数。

理想的情况是,为了使模拟快速,同时使模拟计算中的累积误差最小化,模拟应该能够每分钟运行数百万个时间步。

我如何编码一个物理模拟,遵循我以上所有的标准,什么类型的程序将是最好的这种类型的模拟?

共有1个答案

孙嘉悦
2023-03-14

让我们一次一个地解决这些问题:

要处理任意数量的维度,您必须将位置、速度和加速度向量存储为数组,然后在这些数组上映射一些函数,而不是显式地接受x、y、z或其他东西。

将位置/速度/加速度/力数组和电荷存储在某个对象或表示该对象的结构中,并将所有这些存储在一个更大的数组中,然后您可以迭代该数组来计算力向量,并相应地更新力数组。一旦所有的力都计算完毕,更新位置/速度/加速度,并重置力矢量。

为了满足您的精度和性能要求,您可能必须使用C之类的编译语言编写此模拟。此外,为了支持您列出的所有距离函数,您可能需要使用查找表和算术技巧/近似值的组合,以足够快地获得值。

试着先写出你所有的公式,看看你能应用什么代数简化,以节省额外的计算步骤(你能把所有东西加倍以避免除以二,你能平方一些东西以避免平方根,等等)。要知道除法远比乘法慢,平方根甚至更贵(想想距离数量级)。

 类似资料:
  • 我有一个项目,我需要模拟一个球道。这种模拟应该包括以下内容:碰撞检测重力速度加速度斜面滚动 这些都需要通过Java和JavaFX用数学和物理公式来实现。 到目前为止,我已经实现了重力,速度和加速度,但我不知道如何实现碰撞检测与数学和物理公式。你有什么想法或者有用的来源吗?

  • 物理模拟 即使使用了基于定时器的动画来复制第10章中关键帧的行为,但还是会有一些本质上的区别:在关键帧的实现中,我们提前计算了所有帧,但是在新的解决方案中,我们实际上实在按需要在计算。意义在于我们可以根据用户输入实时修改动画的逻辑,或者和别的实时动画系统例如物理引擎进行整合。 Chipmunk 我们来基于物理学创建一个真实的重力模拟效果来取代当前基于缓冲的弹性动画,但即使模拟2D的物理效果就已近极

  • 问题内容: 我正在使用TensorFlow训练用于医学图像应用的CNN。 由于我没有大量数据,因此我尝试在训练循环中对训练批次进行随机修改,以人为地增加训练数据集。我用其他脚本编写了以下函数,并在我的培训批次中调用它: 该代码很好地适用于对我的图像进行修改。 问题是 : 在我的训练循环的每个迭代(前馈+反向传播)之后,将相同的功能稳定地应用到我的下一个训练批次中,将比上一次稳定地花费5秒。 处理大

  • 问题内容: 在我们的Web应用程序中,用户可以进行需要大量数据库表进行更新的更改。所有内容的加载时间最长为30秒。我不希望用户在导航到另一个页面之前等待其完成。 我将长时间运行的代码放在自己的页面上(例如,“ updateinfo.aspx”),并尝试了一些解决方案,包括jQuery AJAX调用“ updateinfo.aspx”或加载调用“ updateinfo.aspx”的图像文件。在所有情

  • 我已经在 http://www.petercollingridge.co.uk/pygame-physics-simulation/ 上看到了Peter Colling Ridge编写的非常棒的教程,我正在扩展PyParticles脚本 代码可以在站点上获得(免费),我使用的是pyparticles4.py 粒子类 具有半径、质量、速度、位置的圆形2D物体 Spring类 捆绑2个物体(粒子)并利

  • 考虑一个3D太阳系模拟。 我的模拟循环: null 提升FPS 降低我的行星的速度(降低引力常数??) 与呈现循环一起运行相比,有一个单独的模拟循环,但速度更快 对于任何感兴趣的人,我使用的是three.js。