Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

Если вы поворачиваете точку (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

Ответ 2

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

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

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

Ответ 3

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

    using System.Windows.Media;

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