Повернуть точку на другую точку в 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);