Что вам нужно сделать, это создать Vector2
от начала координат до повернутой точки до того, как его повернут, а затем повернуть этот вектор.
Например, скажем, у нас естьспрайта с точкой начала в центре, и мы хотим знать, где будет находиться передняя точка при повороте спрайта.
Сначала создайтевектор от начала координат до точки, которую вы хотите повернуть на необращенном спрайте.В этом случае это, вероятно, будет примерно 20 пикселей справа от центра:
var vector = new Vector2(20, 0);
Теперь мы можем вращать наш вектор с помощью этой простой функции (заимствовано из MonoGame.Extended )
public static Vector2 Rotate(Vector2 value, float radians)
{
var cos = (float) Math.Cos(radians);
var sin = (float) Math.Sin(radians);
return new Vector2(value.X*cos - value.Y*sin, value.X*sin + value.Y*cos);
}.
Теперь мы можем получить наш повернутый вектор следующим образом:
var radians = MathHelper.ToRadians(degrees: -33);
var rotatedVector = Rotate(vector, radians);
Чтобы вернуть этот вектор в «спрайтовое» пространство, мы можем добавить его обратно в нашу исходную точку:
var point = origin + rotatedVector;
Или, если хотите, в «мировом» пространстве, вы также можете добавить его в позицию своих спрайтов.
var worldPoint = position + origin + rotatedVector;
Счастливого кодирования!