最近在做一個打磚塊游戲時遇到一個小問題,就是小球有可能會在左右兩個邊界之間做循環往返運動而導致游戲無法繼續進行下去,於是我打算讓小球在垂直撞向邊界時改變一下方向,但是速度不變,嘗試了一些方法但是沒有達到效果。後來想到,速度是一個向量,問題就變成了改變一個向量的方向而不改變它的大小,Google一下找到了這個旋轉矩陣Wiki頁面。
用原向量矩陣[x,y]乘以旋轉矩陣 /// <summary>
/// 旋轉向量,使其方向改變,大小不變
/// </summary>
/// <param name="v">需要旋轉的向量</param>
/// <param name="angle">旋轉的角度</param>
/// <returns>旋轉後的向量</returns>
private Vector2 RotationMatrix(Vector2 v, float angle)
{
var x = v.x;
var y = v.y;
var sin = Math.Sin(Math.PI * angle / 180);
var cos = Math.Cos(Math.PI * angle / 180);
var newX = x * cos + y * sin;
var newY = x * -sin + y * cos;
return new Vector2((float)newX, (float)newY);
}