将角速度设置为2d粒子组

时间:2014-05-12 16:34:14

标签: math rotation 2d particles particle-system

我有一组二维粒子,我想设定它的角速度,让粒子围绕它们的群心旋转。

我发现这种方法可以获得组的角速度,我尝试将逻辑反转以实际设置角度组速度。

在我的尝试中,通过以相同的方式获得组质量,组中心和组线速度,我保留了大部分逻辑。但似乎我的大多数试验和错误都没有达到预期的效果。

如果你对我如何应对这种逻辑反演有任何了解,从角速度到设定它,我很乐意听到你要说的话。

getParticleGroupAngularVelocity()
{
particleCount = 30;
particleMass = 1.5;
particleGroupMass = 0;
particleGroupInertia = 0;
particleGroupAngularVelocity = 0;

particleGroupCenter = vector(0, 0);
particleGroupLinearVelocity = vector(0, 0);

for (i = 0; i < particleCount; i++)
{
    particleGroupMass += particleMass;
    particleGroupCenter += particleMass * particles[i].position;
    particleGroupLinearVelocity += particleMass * particles[i].velocity;
}

if (particleGroupMass > 0)
{
    particleGroupCenter *= 1 / particleGroupMass;
    particleGroupLinearVelocity *= 1 / particleGroupMass;
}

for (i = 0; i < particleCount; i++)
{
    pos = particles[i].position - particleGroupCenter;
    vel = particles[i].velocity - particleGroupLinearVelocity;
    particleGroupInertia += particleMass * (pos.x * pos.x + pos.y * pos.y);
    particleGroupAngularVelocity += particleMass * (pos.x * vel.y - pos.y * vel.x);
}

if (particleGroupInertia > 0)
{
    particleGroupAngularVelocity *= 1 / particleGroupInertia;
}

return particleGroupAngularVelocity;
}

1 个答案:

答案 0 :(得分:1)

好吧,这应该做到。

for (i = 0; i < particleCount; i++)
{
    pos = particles[i].position - particleGroupCenter;
    vel.x = - particleGroupAngularVelocity * pos.y;
    vel.y =   particleGroupAngularVelocity * pos.x;
    particles[i].velocity = vel + particleGroupLinearVelocity;
}

这将保持组的线速度。单个颗粒将被赋予速度,就像它们全部嵌入同一片玻璃中一样,围绕组中心旋转。 (在这些轨道上保持是其他人的问题。)