【问题标题】:particle brownian motion with directions带方向的粒子布朗运动
【发布时间】:2012-03-25 04:41:04
【问题描述】:

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

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

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

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

【问题讨论】:

  • 如果你真的在使用蜜蜂,我只需要一组非常不稳定并让一群蜂群跟随领导者。
  • 您可以稍微操纵一下赔率,使其并非完全随机。就像 85% 随机和 15% 最后一个方向或类似的东西。我认为这会让它更向前发展一点

标签: javascript math artificial-intelligence raphael particles


【解决方案1】:

这很漂亮!

您的做法是正确的,但您实际上应该使用 atan2 函数。这消除了任何 0 检查的需要。

atan2 函数为您提供一个从正 x 向量逆时针方向的角度

(1, 0) --->

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

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

我实际上会通过在 -pi/8 和 pi/8 弧度之间生成一个角度以及一个随机长度来实现它。基本上使用极坐标。然后将这个新的随机极坐标偏移添加到 x 和 y 位置,如

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

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

更新:

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

时设置旋转

有 2 个选项可以解决此问题。

  1. 按前一个角度和当前角度的差值旋转

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

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

【讨论】:

  • 感谢 me232 的帮助,我想到了拉斐尔旋转,但我开始认为布朗运动可能不适合这种情况。使蜜蜂有点不稳定。我会在你的其他方法之前!再次感谢
  • 我其实很喜欢他们飘忽不定的动作,看起来他们在嗡嗡作响:)
  • Fiddle 无法正常工作,因为它缺少 Raphaël js 和图像。这是一个快速更新:jsfiddle.net/brunoimbrizi/c5A2A/54
猜你喜欢
  • 2021-09-22
  • 2016-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多