Поверните вокруг точки, отличной от начала координат в 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);
}
