Я знаю, что это, вероятно, очень простой вопрос, но я не могу понять это. Прежде всего, я хочу указать, что я просматривал Google и SO в течение получаса или около того, не найдя ответа на свой вопрос (да, я серьезно).
По сути, я хочу повернуть Vector2 вокруг точки (которая, в моем случае, всегда является вектором (0, 0)). Итак, я попытался сделать функцию, чтобы сделать это с параметрами, являющимися точкой поворота и углом (в градусах), на который можно повернуть.
Вот быстрый рисунок, показывающий, чего я пытаюсь достичь:
Я хочу взять V1 (красный вектор), повернуть его на угол A (синий), чтобы получить новый вектор (V2, зеленый). В этом примере я использовал один из самых простых случаев: V1 на оси и угол 90 градусов, но я хочу, чтобы функция обрабатывала также больше случаев " сложных ".
Итак, вот моя функция:
public static Vector2 RotateVector2(Vector2 point, float degrees)
{
return Vector2.Transform(point,
Matrix.CreateRotationZ(MathHelper.ToRadians(degrees)));
}
Итак, что я делаю не так? Когда я запускаю код и вызываю эту функцию с вектором (0, -1) и углом 90 градусов, я получаю вектор (1, 4.371139E-08) ...
Кроме того, что, если я хочу принять точку для поворота в качестве параметра тоже? Так что вращение не всегда происходит вокруг (0, 0) ...