javascript - 带方向的粒子布朗运动

标签 javascript math artificial-intelligence raphael particles

我正在尝试使用布朗运动来创建一组随机移动的粒子。 http://jsfiddle.net/J75Em/16/

到目前为止,我已经让粒子随机移动,但我不确定如何设置前进方向以使其看起来更自然。

我已经尝试使用 x 和 y 轴的变化来使用 atan 计算旋转,您可以通过取消注释旋转来看到这一点,但这似乎表现不佳。

对于此类运动,这是正确的方法吗?谢谢;

最佳答案

这很漂亮!

您的处理方式有点正确,但实际上您应该使用 atan2 函数。这消除了任何 0 检查的需要。

atan2 函数为您提供一个与正 x 向量逆时针方向的 Angular

(1, 0) --->

蜜蜂偏离此起始 Angular 90 度,因此您必须从方向减去 90 度。 (取决于你进行 dy 和 dx 计算的方式,你可能需要添加)

您会发现方向变化很快,因此您可以考虑将下一次变化限制为一组导致 Angular 变化低于某个阈值的变化。这将使运动更顺畅。

我实际上会通过生成一个介于 say -pi/8 和 pi/8 弧度之间的 Angular 和一个随机长度来解决这个问题。本质上是使用极坐标。然后将这个新的随机极坐标偏移量添加到 x 和 y 位置,如

newX = currentX + (randomLength * cos(randomAngle + currentAngle)) and 
newY = currentY + (randomLength * sin(randomAngle + currentAngle))

如果您使用 Angular ,您还可以获得更自然的效果,例如,如果您希望蜜蜂停留在某个区域内,您可以在它们越来越靠近边缘时强制偏向该区域的中心。

更新:

所以我仔细看了看。问题是您期望 .rotate 在实际添加到旋转

时设置旋转

有两个选项可以解决这个问题。

  1. 旋转前一个 Angular 和当前 Angular 之间的差值

  2. 使用.transform 方法设置旋转

您可以在此处查看解决方案 2 http://jsfiddle.net/c5A2A/

关于javascript - 带方向的粒子布朗运动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9605109/

相关文章:

php - 如何将神经网络从 C 语言转换为 PHP

algorithm - 避免重复状态的搜索算法

javascript - 如何获取元素的所有CSS

c++ - 如何索引二十面体的面?

javascript - Hogan/Mustache 的持久模板(或重复使用模板)?

algorithm - 非线性计数器

math - 在做了几年程序员之后,我如何在数学上变得更好

c# - 对抗性搜索问题

javascript - Angular 2 : Injecting a service

javascript - 使按钮随着下拉菜单的动画高度变化而变化