C # Поворот многоугольника (треугольник) - PullRequest
4 голосов
/ 18 августа 2011

У меня есть метод, который состоит в том, чтобы нарисовать многоугольник, а затем повернуть этот многоугольник на 90 градусов вправо так, чтобы его исходная верхняя точка теперь указывала вправо.

Это код для рисованиямногоугольник (треугольник) как бы я ни терялся от того, как это повернуть.

Point[] points = new Point[3];
points[0] = new Point((int)top, (int)top);
points[1] = new Point((int)top - WIDTH / 2, (int)top + HEIGHT);
points[2] = new Point((int)top + WIDTH / 2, (int)top + HEIGHT);
paper.FillPolygon(normalBrush, points);

Заранее спасибо.

Ответы [ 3 ]

5 голосов
/ 18 августа 2011

http://msdn.microsoft.com/en-us/library/s0s56wcf.aspx#Y609

public void RotateExample(PaintEventArgs e)
{
    Pen myPen = new Pen(Color.Blue, 1);
    Pen myPen2 = new Pen(Color.Red, 1);

    // Draw the rectangle to the screen before applying the transform.
    e.Graphics.DrawRectangle(myPen, 150, 50, 200, 100);

    // Create a matrix and rotate it 45 degrees.
    Matrix myMatrix = new Matrix();
    myMatrix.Rotate(45, MatrixOrder.Append);

    // Draw the rectangle to the screen again after applying the

    // transform.
    e.Graphics.Transform = myMatrix;
    e.Graphics.DrawRectangle(myPen2, 150, 50, 200, 100);
}

Вы можете использовать TransformPoints метод класса Matrix, чтобы просто вращать точки

2 голосов
/ 18 августа 2011

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} * * * * * * * * * * * * * * * * * * * * * * * * * * * *} *} *При повороте на 90 градусов мы отмечаем, что cos 90 сворачивается в ноль, приводя к следующему простому преобразованию, где x ' и y' - ваши повернутые координаты, а x и y - предыдущие координаты.

x' = -y
y' = x

Применение этой простой замены в вашем примере приводит к следующему коду.Я также использовал сокращенное выражение инициализатора коллекции для дополнительной читаемости.

var points = new[]
{
    new Point(-(int) top, (int) top),
    new Point((int) -(top + HEIGHT), (int) top - WIDTH/2),
    new Point((int) -(top + HEIGHT), (int) top + WIDTH/2)
};

paper.FillPolygon(normalBrush, points);

Я также рекомендую прочитать по линейной алгебре, используя, например, Антон Роррес, и др. .

0 голосов
/ 18 августа 2011

Вы можете вращать свой многоугольник, если вы вращаете каждую точку .Вы также должны узнать свой центр вращения O. Возможно, вы хотите использовать свой центр многоугольника в качестве центра вращения.

...