2014-05-12 74 views
0

我有一個2d組的粒子,我想設置它的角速度,讓粒子繞組的中心旋轉。設置角速度爲2d粒子羣

我發現這種方法得到組的角速度,我試過反轉邏輯來實際設置角組速度。

在我的嘗試中,我通過以同樣的方式獲得組質量,組中心和組線速度,使大部分邏輯完好無損。但是,似乎我的大多數試驗和錯誤都不能達到預期的結果。

如果您有任何關於如何解決從獲取角速度到設置它的邏輯反轉的知識,我很樂意聽到您要說的話。

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

你有一組粒子,你想改變一些或所有粒子的速度,以便給這個組所需的「組角速度「(我使用鬆散的術語,與此代碼相同),同時保持」組線速度「相同,是嗎?你有其他條件嗎?我問,因爲有很多方法可以做到這一點。 – Beta

+0

我希望能夠在保持組線速度的同時改變所有粒子的速度。因此,如果這組粒子在x軸和/或y軸上以恆定速度運動,我希望能夠使這組粒子圍繞它們的中心旋轉,而不會影響它們的其他運動。 – Claudia

+0

至於其他條件,我真的不能想到其他條件。但是,我可能也缺乏對這個問題的一些見解。 – Claudia

回答

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; 
} 

這將保持組的線速度。單個粒子將被賦予速度,就好像它們全部嵌入同一片玻璃中一樣,圍繞組中心旋轉。 (保持他們在這些軌道上是別人的問題。)

+0

太棒了,那有效!非常感謝你的測試版。只有一個問題可以消除任何疑問。在原始代碼中,根據慣量調整速度。在您提供的解決方案中,慣性不用於影響粒子速度。那會是什麼原因?再次感謝,Beta! – Claudia

+0

@Claudia:這個解決方案將保留線性動量,但不是角動量。 (物理意義上的「保存」,「不變」)。原始代碼*測量角動量,然後除以慣性矩以得到'particleGroupAngularVelocity';此代碼將粒子相對於彼此凍結,然後「旋轉」整個組。 – Beta

+0

我明白了。感謝您的全面回答和解釋。 – Claudia