Math 将“角速度”设置为二维粒子组
我有一组二维粒子,我想设置它的角速度,让粒子围绕它们的群中心旋转 我找到了这个方法来得到群的角速度,并且我尝试了反转逻辑来实际设置群的角速度 在我的尝试中,通过以相同的方式获得群质量、群中心和群线速度,我保留了大部分逻辑。但似乎我的大部分尝试和错误都没有达到预期的结果 如果你知道我应该如何处理这个逻辑反转,从获得角速度到设置角速度,我很乐意听你说Math 将“角速度”设置为二维粒子组,math,rotation,2d,particles,particle-system,Math,Rotation,2d,Particles,Particle System,我有一组二维粒子,我想设置它的角速度,让粒子围绕它们的群中心旋转 我找到了这个方法来得到群的角速度,并且我尝试了反转逻辑来实际设置群的角速度 在我的尝试中,通过以相同的方式获得群质量、群中心和群线速度,我保留了大部分逻辑。但似乎我的大部分尝试和错误都没有达到预期的结果 如果你知道我应该如何处理这个逻辑反转,从获得角速度到设置角速度,我很乐意听你说 getParticleGroupAngularVelocity() { particleCount = 30; particleMass = 1.5;
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;
}
getParticleGroupAngularVelocity()
{
粒子计数=30;
粒子质量=1.5;
particleGroupMass=0;
particlegroup惯性=0;
粒子群角速度=0;
particleGroupCenter=向量(0,0);
particleGroupLinearVelocity=向量(0,0);
对于(i=0;i0)
{
粒子组中心*=1/粒子组质量;
particleGroupLinearVelocity*=1/particleGroupMass;
}
对于(i=0;i0)
{
粒子组角速度*=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;
}
for(i=0;i
这将保持组的线速度。单个粒子将被赋予速度,就好像它们都嵌在同一片玻璃中,围绕群中心旋转。(将它们保持在这些轨道上是其他人的问题。)你有一组粒子,你想改变部分或全部粒子的速度,以便给这组粒子一个所需的“群角速度”(我使用这个术语,与此代码的意义相同),同时保持“群线速度”不变,对吗?你还有其他情况吗?我问这个问题是因为有很多方法可以做到这一点。我希望能够改变所有粒子的速度,同时保持群的线速度。因此,如果这组粒子在x轴和/或y轴上以恒定速度运动,我希望能够使这组粒子围绕其中心旋转,而不影响它们的其他运动。至于其他条件,我真的想不出其他条件。但是,我可能对这个问题也缺乏一些见解。太好了,这很管用!非常感谢你。只有一个问题可以消除任何疑问。在原始代码中,有一个基于惯性的速度调整。在您提供的解决方案中,惯性不用于影响粒子速度。原因是什么?再次感谢你,贝塔@克劳迪娅:这个解会保持线动量,但不会保持角动量。(“守恒”在物理意义上是“不改变”。)原始代码测量角动量,然后除以惯性矩得到
粒子组角速度;这个代码冻结了粒子之间的相对位置,然后使整个粒子群“旋转”,我明白了。谢谢你详尽的回答和解释。