mic*_*ael 9 javascript math artificial-intelligence particles raphael
我正在尝试使用布朗运动来创建一组随机移动的粒子. http://jsfiddle.net/J75Em/16/
到目前为止,我已经让粒子随机移动但我不确定如何设置前进方向以使其看起来更自然.
我试图使用x和y轴的变化来计算使用atan的旋转,你可以通过取消注释旋转来看到这一点,但这似乎表现不佳.
这是这种运动的正确方法吗?谢谢;
这很漂亮!
你是正确的方式,但你应该实际使用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))
Run Code Online (Sandbox Code Playgroud)
如果您使用角度,您也可以获得更自然的效果,例如,如果您希望蜜蜂留在某个区域内,您可以在它们越来越靠近边缘时向区域中心施加偏向.
所以我仔细看了一下.麻烦的是你希望.rotate在实际添加到旋转时设置旋转
有两种方法可以解决这个问题.
旋转前一个角度和当前角度之间的差值
使用.transform方法设置旋转
你可以在这里看到解决方案2 http://jsfiddle.net/c5A2A/