我需要为一个简单的钟摆做一个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#中使用
有人可以帮忙吗?也许还有另一个我可以用编程方式使用的方程式,或者帮助我理解如果能真正起作用我怎么能使用最后一个方程式。
答案 0 :(得分:0)
如果你想模拟钟摆,你不需要精确的解决方案。您唯一需要的是在模拟的每个步骤都有足够好的近似值,并结合足够的步骤。这类似于近似一个具有足够大数量的线段的圆,每个线段与理想圆相切。
现在,考虑你的钟摆与theta
度(或弧度)的偏差,如下所示:
质量m
的权重为m * g
,其中g
是重力加速度。现在,让我们估计摆锤在下一个alpha
秒内移动的角度dt
(dt
是一步的持续时间,因此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
。
我自己没试过,所以请让我知道这种“模拟”方法是否适合你。祝你好运!