如何在C#中模拟高振幅摆动

时间:2015-04-24 01:48:42

标签: c# math physics computational-geometry differential-equations

我需要为一个简单的钟摆做一个C#模拟器。 我已经在网上搜索了3天而且我被卡住了。

问题是我发现许多方程可以将角度位置作为时间的函数,这对于我进行视觉模拟的需要是完美的,但问题是这些函数仅适用于小于10的角度,但我应该能够从任何角度进行模拟。 仅适用于小角度的等式示例:

来源:http://hyperphysics.phy-astr.gsu.edu/hbase/pend.html#c2

并且应该适用于任何角度(振幅)的方程太复杂,因为它涉及微分方程和导数。我不知道如何在C#中实现这些。 我认为可以使用的方程示例但我不知道如何使用:

来源:http://www.sbfisica.org.br/rbef/pdf/070707.pdf (等式编号32)

最后一个等式的问题是" sn"这是Jacobi椭圆函数sn(u; m)u,我不知道如何在C#中使用

有人可以帮忙吗?也许还有另一个我可以用编程方式使用的方程式,或者帮助我理解如果能真正起作用我怎么能使用最后一个方程式。

1 个答案:

答案 0 :(得分:0)

如果你想模拟钟摆,你不需要精确的解决方案。您唯一需要的是在模拟的每个步骤都有足够好的近似值,并结合足够的步骤。这类似于近似一个具有足够大数量的线段的圆,每个线段与理想圆相切。

现在,考虑你的钟摆与theta度(或弧度)的偏差,如下所示:

enter image description here

质量m的权重为m * g,其中g是重力加速度。现在,让我们估计摆锤在下一个alpha秒内移动的角度dtdt是一步的持续时间,因此dt只是一小部分秒)。

由于切线方向上的加速度为g * cos(theta),我们可以估计钟摆在dt秒内的切线距离,就好像在此时间内加速度是恒定的一样:

d = v * dt + g * sin(theta) (dt)^2 / 2

其中v是摆位在角位置theta.的切线速度现在我们可以将alpha计算为

alpha = arcsin(d / r)

其中r是半径。因此,唯一剩下的就是更新v的值,以便我们可以在下一步重复相同的操作。这是如何

v := v + g * sin(theta) * dt

当然,当钟摆开始时,您可以初始化v = 0

我自己没试过,所以请让我知道这种“模拟”方法是否适合你。祝你好运!