Поверните вокруг точки, отличной от начала координат в C#
Вы можете использовать объект Matrix для поворота, масштабирования, перевода или искажения чертежа. Его метод RotateAt добавляет поворот вокруг определенной точки к Matrix.
Следующий метод RotateAroundPoint возвращает новую Matrix, которая представляет вращение вокруг определенной точки.
// Возвращаем матрицу вращения для поворота вокруг точки. private Matrix RotateAroundPoint(float angle, Point center) { // Переведите точку в начало. Matrix result = new Matrix(); result.RotateAt(angle, center); return result; }
Следующий код показывает, как программа использует этот метод для рисования стрелки, сначала в своем нормальном положении и затем повернутого.
// Нарисуйте стрелку как обычно и поверните ее вокруг точки. private void picCanvas_Paint(object sender, PaintEventArgs e) { e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; // Нарисуем основную стрелку. DrawArrow(Pens.Blue, e.Graphics); // Нарисуем точку вращения. Point center = new Point(50, 70); e.Graphics.FillEllipse(Brushes.Red, center.X - 3, center.Y - 3, 6, 6); // Поворот на 30 градусов вокруг точки. e.Graphics.Transform = RotateAroundPoint(30, center); // Нарисуем стрелку. DrawArrow(Pens.Green, e.Graphics); }
Метод DrawArrow, показанный в следующем коде, просто рисует многоугольник, который определяет стрелку.
// Нарисуйте стрелку. private void DrawArrow(Pen pen, Graphics gr) { Point[] pts = { new Point( 50, 50), new Point(150, 50), new Point(150, 20), new Point(200, 70), new Point(150, 120), new Point(150, 90), new Point( 50, 90) }; gr.DrawPolygon(pen, pts); }