我想寫一個C#和XNA中的乒乓球,用摩擦力和反彈。我試圖實施碰撞作爲described by Garet Rees in a previous question。乒乓球中的「現實」碰撞
下面是基本的算法,我使用的乒乓球:
- 單獨的碰撞對象,使他們不再發生碰撞。
- 獲取碰撞響應的表面法線。
- 計算新的速度 - 這是我的問題。
這是我目前使用的碰撞響應代碼:
Vector2 normalizedVelocity = Velocity;
normalizedVelocity.Normalize();
Vector2 u = -Velocity * Vector2.Dot(normalizedVelocity, normal);
Vector2 w = Velocity - u;
Velocity = w - u;
出於測試目的,我不承擔任何摩擦和完美的彈性。這段代碼工作正常,只是在一個方向上移動物體,如:
Velocity.X = 100;
Velocity.Y = 0;
或
Velocity.X = 0;
Velocity.Y = 100;
但是,當我與對角線移動球,如測試:
Velocity.X = 100;
Velocity.Y = 40;
由此產生的速度不是我所假設的。