【发布时间】:2015-06-17 18:54:02
【问题描述】:
我正在使用 Haskell 开发一个粒子模拟程序。对于其中一个函数,我试图根据所有周围粒子的质量和速度来确定模拟中所有粒子的新速度。
函数是这样的形式:
accelerate :: Float -> [Particle] -> [Particle]
粒子是一种包含质量、位置向量和速度向量的数据类型,'Float' 参数表示模拟中各个时间步长的增量时间
我想要一些关于可能的函数的建议,我可以用来遍历列表,同时计算每个粒子相对于列表中其他粒子的速度。
我能想到的一种可能的方法:
-
假设有另一个函数“velocityCalculator”,其定义如下:
velocityCalculator :: Particle -> Particle -> (Float,Float)
这需要两个粒子并返回第一个粒子的更新速度向量。
-
应用折叠;使用上述函数作为二元运算符,粒子和粒子列表作为参数,即
foldl velocityCalculator particle particleList 遍历粒子列表,将 foldl 应用于每个元素并构建包含具有更新速度的粒子的新列表
我不确定这是否是最有效的方法,因此非常感谢任何建议和改进。
请注意 -> 正如我所说,我只是在寻找建议而不是答案!
谢谢!
【问题讨论】:
-
你想应用velocity verlet算法还是类似的东西?我的意思是,你想用一些解析势或数值势来整合牛顿的运动方程吗?
-
没什么特别的,我只是在 haskell 中寻找可能的高阶函数,以便在跨列表应用 velocityCalculator 函数时更快地完成工作
标签: algorithm haskell functional-programming simulation particle-system