Рисуем произвольный многоугольник
Давайте рассмотрим еще один способ (более универсальный) как нарисовать прямоуглоьник используя функцию отрисовки полигона (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. Выведите ромб по центру экрана