Повернуть точку на другую точку в 2D

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

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

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

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

4 ответа

Решение

Если вы вращаете точку (px, py) вокруг точки (ox, oy) под углом theta ты получишь:

p'x = cos (theta) * (px-ox) - sin (theta) * (py-oy) + ox
p'y = sin (тета) * (px-ox) + cos(тета) * (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);

Это берет команду преобразования макета для вашего изображения в WPF и поворачивает его в нужном вам направлении.

      progress_image.LayoutTransform = new RotateTransform(90);
Другие вопросы по тегам