如何旋转Vector2?

时间:2011-04-01 07:48:44

标签: c# .net xna


我正在尝试旋转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);

2 个答案:

答案 0 :(得分:10)

Vector2.Transform()会返回结果,而不是就地应用更改。

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

答案 1 :(得分:0)

您编写的第一种方法应该可行,如此处所示:http://www.oocities.org/davidvwilliamson/rotpoint.jpg

请记住存储原始值,并使用它们来确定新值,并且不要使用新的x值来计算y。或者将产品存储在单独的变量中。