粒子布朗运动方向问题

9
我正在尝试使用布朗运动创建一组随机移动的粒子。 http://jsfiddle.net/J75Em/16/ 目前,我已经让粒子随机移动,但我不确定如何设置前进方向以使其看起来更自然。
我尝试使用x和y轴的变化来计算旋转角度,可以通过取消旋转注释来查看,但这似乎表现不佳。
对于这种类型的运动,这是正确的方法吗?谢谢。

如果你真的在使用蜜蜂,我建议只使用一个集群,让它表现得非常不规律,并且让一群蜜蜂跟随领袖。 - Incognito
你可以稍微调整一下机率,这样它就不会完全随机了。比如说85%的随机和15%的最后一个方向之类的。我认为这会让它朝前方移动得更多一些。 - ajax333221
1个回答

8

这很不错!

你的方法基本正确,但你应该使用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 设置旋转时实际上添加到旋转中 有两种修复这个问题的方法。
1. 通过前后角度之间的差异进行旋转。 2. 使用.transform方法设置旋转。
你可以在这里看到解决方案2的效果 http://jsfiddle.net/c5A2A/

感谢 me232 的帮助,我已经理解了 Raphael 的旋转,但我开始觉得布朗运动在这种情况下可能不太合适。这会让蜜蜂变得有些随意。我将尝试你的其他方法!再次感谢。 - michael
我其实很喜欢它们不规则的运动,看起来就像在嗡嗡作响 :) - Matt Esch
1
Fiddle无法工作,因为缺少Raphaël js和一张图片。这是一个快速的更新:http://jsfiddle.net/brunoimbrizi/c5A2A/54/。 - imbrizi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接