Рисуем произвольный многоугольник

 
Давайте рассмотрим еще один способ (более универсальный) как нарисовать прямоуглоьник используя функцию отрисовки полигона (DrawPolygon)
// создадим массив точек
PointF points = new PointF [] {
     new PointF (0, 0),
     new PointF (100, 0),
     new PointF (100, 50),
     new PointF (0, 50)
};

// теперь  выведем его на экран
gr.DrawPolygon (Pens.White, points);

Использование функции DrawPolygon позволяет выводить любые фигуры 

Давайте сдвинем наш прямоугольик для этого можно воспользоваться двумя способами:

1. В-ручную прибать к точкам нужное смещение либо в самом массиве , напримрер вот так

float offsetX = 100;
float offsetY = 100;

// создадим массив точек
PointF points = new PointF [] {
     new PointF (offsetX, offsetY),
     new PointF (100 + offsetX, offsetY),
     new PointF (100 + offsetX, 50 + offsetY),
     new PointF (offsetX, 50 + offsetY)
};

Чтобы не прописывать смещения вручную в каждую точку можно получить из исходного массива смещенный массив точек разными способами, например вот так c помощью Linq

float offsetX = 100;
float offsetY = 100;

// создадим массив точек
PointF points = new PointF [] {
     new PointF (0, 0),
     new PointF (100, 0),
     new PointF (100, 50),
     new PointF (0, 50)
};

var shiftedPoints = points.Select( p => new PointF(p.X + offsetX, p.Y + offsetY)).ToArray();

// теперь  выведем его на экран
gr.DrawPolygon (Pens.White, shiftedPoints );

Либо вот так с помощью обычного цикла и массива

float offsetX = 100;
float offsetY = 100;

// создадим массив точек
PointF points = new PointF [] {
     new PointF (0, 0),
     new PointF (100, 0),
     new PointF (100, 50),
     new PointF (0, 50)
};

PointF[] shiftedPoints = neew PointF[points.Length];
for (int i = 0; i < points.Length; i++) {
    shiftedPoints[i] = new PointF(points[i].X + offsetX, points[i].Y + offsetY);
}

// теперь  выведем его на экран
gr.DrawPolygon (Pens.White, shiftedPoints );

2. Второй способ сдвинуть с помощью функции TranslateTransform объекта Graphics (как он устроен внутри мы рассмотрим в разделе Матрицы)

// создадим массив точек
PointF points = new PointF [] {
     new PointF (0, 0),
     new PointF (100, 0),
     new PointF (100, 50),
     new PointF (0, 50)
};


float offsetX = 100;
float offsetY = 100;

// в момент отрисовки
gr.ResetTransform();
gr.TranslateTransform (offsetX, offsetY);
gr.DrawPolygon (Pens.White, points);

 

Задания: 

1. Попробуйте вывести на экран ромб в любом месте экрана

2. Выведите ромб по центру экрана