Поворот точки на другую точку в 2D
Вопрос
Я хочу знать, как определить новые координаты точки при повороте на угол относительно другой точки.
У меня есть стрелка-блок, и я хочу повернуть ее на угол тета относительно точки в середине основания стрелки.
Это необходимо, чтобы я мог нарисовать многоугольник между двумя экранными элементами управления.Я не могу использовать и вращать изображение.
Из того, что я рассмотрел до сих пор, дело еще больше усложняется тем, что начало экрана находится в верхнем левом углу.
Решение
Если повернуть точку (px, py)
вокруг точки (ox, oy)
по углу theta
ты получишь:
p'x = cos(theta) * (px-ox) - sin(theta) * (py-oy) + ox p'y = sin(theta) * (px-ox) + cos(theta) * (py-oy) + oy
Другие советы
Если вы используете для этого GDI+, вы можете использовать Transform
методы Graphics
объект:
graphics.TranslateTransform(point of origin);
graphics.RotateTransform(rotation angle);
Затем нарисуйте реальные вещи.
Если у вас есть System.Windows.Media
доступно пространство имен, то вы можете использовать встроенные преобразования:
using System.Windows.Media;
var transform = new RotateTransform() {Angle = angleInDegrees, CenterX = center.X, CenterY = center.Y};
var transformedPoint = transform.Transform(point);