2011-04-01 629 views
2


我想旋轉一個Vector2但沒有任何工作。
我已嘗試以下步驟 - >沒有工作:如何旋轉Vector2?

x' = cos(angle)*x - sin(angle)*y & y' = sin(angle)*x + cos(angle)*y 

我試着用旋轉矩陣 - >沒有工作

我在做什麼錯? :/

angle = MathHelper.Pi; 
direction.X = (int)((direction.X) * Math.Cos(angle) - direction.Y * Math.Sin(angle)); 
direction.Y = (int)((direction.X) * Math.Sin(angle) + direction.Y * Math.Cos(angle)); 

float angle = MathHelper.PiOver2; 
Vector2 dir = new Vector2(direction.X, direction.Y); 
Vector2.Transform(dir, Matrix.CreateRotationX(angle)); 
direction = new Point((int)dir.X, (int)dir.Y); 

回答

10

Vector2.Transform()返回結果而不是原地應用更改。

var transformed = Vector2.Transform(dir, Matrix.CreateRotationX(angle)); direction = new Point((int)dir.X, (int)dir.Y); 
+4

不要對自己太苛刻。這是一類錯誤,你會發現自己每年重複一次(每次都有相同的混淆),在剩下的編程時間裏重複一次。 – 2011-04-01 08:01:43

+0

我認爲它應該是'CreateRotationZ',因爲你想圍繞Z軸旋轉。 – 2017-11-20 04:38:45

0

你寫的第一個方法應該工作,因爲它在這裏也顯示:http://www.oocities.org/davidvwilliamson/rotpoint.jpg

記得要保存原始值,並使用它們來確定新的價值觀,並且不使用新的x值來計算y。或者將產品存儲在單獨的變量中。

+0

我做過了(粘貼的代碼是舊版本),但它無法工作:/ – darky89 2011-04-01 07:59:06