Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带方向的粒子布朗运动_Javascript_Math_Artificial Intelligence_Raphael_Particles - Fatal编程技术网

Javascript 带方向的粒子布朗运动

Javascript 带方向的粒子布朗运动,javascript,math,artificial-intelligence,raphael,particles,Javascript,Math,Artificial Intelligence,Raphael,Particles,我试图用布朗运动来创建一组随机移动的粒子。 到目前为止,我已经让粒子随机移动,但我不知道如何设置前进方向,使其看起来更自然 我已经尝试使用x轴和y轴的变化来使用atan计算旋转,您可以通过取消注释rotate来看到这一点,但这似乎表现不好 这是这种运动的正确方法吗?谢谢, 这太好了 您的方法是正确的,但实际上应该使用atan2函数。这样就不需要进行任何0检查 atan2函数为您提供一个与正x向量逆时针的角度 (1,0)--> 蜜蜂与此起始角度相差90度,因此必须从该方向减去90度。(根据计算d

我试图用布朗运动来创建一组随机移动的粒子。

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

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

这是这种运动的正确方法吗?谢谢,

这太好了

您的方法是正确的,但实际上应该使用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在实际添加到旋转时设置旋转

有两个选项可用于修复此问题

  • 按上一个角度和当前角度之间的差值旋转

  • 使用.transform方法设置旋转


  • 你可以在这里看到解决方案2的作用

    如果你真的在使用蜜蜂,我只需要一组非常不稳定的蜜蜂,让一个蜂群跟随领头羊。你可以稍微控制几率,这样它就不完全是随机的。比如85%是随机的,15%是最后一个方向之类的。我想这会使它朝着前进的方向发展多亏了me232的帮助,我计算了拉斐尔旋转,但我开始认为布朗运动可能不适合这种情况。使蜜蜂有点不稳定。我早就用你的另一种方法了!谢天谢地,阿加尼确实喜欢他们不规则的动作,看起来他们在嗡嗡作响:)提琴不起作用,因为它缺少拉斐尔js和一幅图像。这里有一个快速更新: