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

Источник: http://csharphelper.com/blog/2015/05/rotate-around-a-point-other-than-the-origin-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector