Вопрос

Я хочу знать, как определить новые координаты точки при повороте на угол относительно другой точки.

У меня есть стрелка-блок, и я хочу повернуть ее на угол тета относительно точки в середине основания стрелки.

Это необходимо, чтобы я мог нарисовать многоугольник между двумя экранными элементами управления.Я не могу использовать и вращать изображение.

Из того, что я рассмотрел до сих пор, дело еще больше усложняется тем, что начало экрана находится в верхнем левом углу.

Это было полезно?

Решение

Если повернуть точку (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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top