Повернуть точку на другую точку в 2D - PullRequest
53 голосов
/ 24 апреля 2009

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

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

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

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

Ответы [ 3 ]

131 голосов
/ 24 апреля 2009

Если повернуть точку (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
8 голосов
/ 24 апреля 2009

Если для этого вы используете GDI +, вы можете использовать Transform методы объекта Graphics:

graphics.TranslateTransform(point of origin);
graphics.RotateTransform(rotation angle);

Затем нарисуйте фактический материал.

2 голосов
/ 02 августа 2014

Если у вас есть доступное пространство имен System.Windows.Media, вы можете использовать встроенные преобразования:

    using System.Windows.Media;

    var transform = new RotateTransform() {Angle = angleInDegrees, CenterX = center.X, CenterY = center.Y};
    var transformedPoint = transform.Transform(point);
...