Ответ 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
Я хочу знать, как выработать новые координаты для точки при повороте на угол относительно другой точки.
У меня есть стрелка блока и вы хотите повернуть его на угол тета относительно точки в середине основания стрелки.
Это требуется, чтобы разрешить рисовать многоугольник между двумя экранными элементами управления. Я не могу использовать и поворачивать изображение.
Из того, что я рассмотрел до сих пор, то, что еще более усложняет проблему, заключается в том, что происхождение экрана находится в верхнем левом углу.
Если вы поворачиваете точку (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);