我有一组二维粒子,我想设定它的角速度,让粒子围绕它们的群心旋转。
我发现这种方法可以获得组的角速度,我尝试将逻辑反转以实际设置角度组速度。
在我的尝试中,通过以相同的方式获得组质量,组中心和组线速度,我保留了大部分逻辑。但似乎我的大多数试验和错误都没有达到预期的效果。
如果你对我如何应对这种逻辑反演有任何了解,从角速度到设定它,我很乐意听到你要说的话。
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;
}
答案 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;
}
这将保持组的线速度。单个颗粒将被赋予速度,就像它们全部嵌入同一片玻璃中一样,围绕组中心旋转。 (在这些轨道上保持是其他人的问题。)