Лабораторная работа 5-6. Визуализация в C#
Требуемые условия завершения
Открыто с: вторник, 19 мая 2026, 00:00
Срок сдачи: вторник, 26 мая 2026, 00:00
Основы WinForms-графики
Пространство имен
using System.Drawing;
Главный объект рисования
Graphics g;
Через объект Graphics выполняется:
- рисование линий;
- кругов;
- прямоугольников;
- текста;
- изображений.
3. Основные методы Graphics
| Метод | Назначение |
|---|---|
| DrawLine() | Линия |
| DrawRectangle() | Прямоугольник |
| FillRectangle() | Закрашенный прямоугольник |
| DrawEllipse() | Эллипс |
| FillEllipse() | Закрашенный эллипс |
| DrawPolygon() | Многоугольник |
| Clear() | Очистка формы |
4. Событие Paint
Рисование обычно выполняется в обработчике:
private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
}
Система вызывает Paint каждый раз при обновлении окна.
Практическая часть
Задание 1. Рисование примитивов
Код программы
using System;
using System.Drawing;
using System.Windows.Forms;
namespace GraphicsLab
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.Paint += Form1_Paint;
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
g.Clear(Color.White);
// Линия
g.DrawLine(Pens.Black, 20, 20, 200, 20);
// Прямоугольник
g.DrawRectangle(Pens.Blue, 50, 50, 150, 100);
// Закрашенный прямоугольник
g.FillRectangle(Brushes.LightBlue, 250, 50, 150, 100);
// Эллипс
g.DrawEllipse(Pens.Red, 50, 200, 150, 100);
// Закрашенный эллипс
g.FillEllipse(Brushes.Pink, 250, 200, 150, 100);
}
}
}
Объяснение кода
1. Получение Graphics
Graphics g = e.Graphics;
Объект используется для рисования.
2. Очистка формы
g.Clear(Color.White);
Закрашивает фон окна белым цветом.
3. Рисование линии
g.DrawLine(Pens.Black, 20, 20, 200, 20);
Параметры:
- цвет;
- x1, y1;
- x2, y2.
4. Закрашивание фигур
g.FillEllipse(...)
Используются объекты Brush.
Задание 2. Работа с мышью
Код программы
using System;
using System.Drawing;
using System.Windows.Forms;
namespace GraphicsLab
{
public partial class Form1 : Form
{
Point clickPoint;
public Form1()
{
InitializeComponent();
this.MouseClick += Form1_MouseClick;
this.Paint += Form1_Paint;
}
private void Form1_MouseClick(object sender, MouseEventArgs e)
{
clickPoint = e.Location;
Invalidate();
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
g.FillEllipse(
Brushes.Green,
clickPoint.X,
clickPoint.Y,
50,
50);
}
}
}
Объяснение
MouseClick
this.MouseClick += Form1_MouseClick;
Подключение обработчика мыши.
Координаты клика
clickPoint = e.Location;
Получаем координаты курсора.
Invalidate()
Invalidate();
Запрашивает перерисовку окна.
Задание 3. Рисование многоугольника
Код программы
private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
Point[] points =
{
new Point(100, 50),
new Point(200, 150),
new Point(150, 250),
new Point(50, 150)
};
g.DrawPolygon(
new Pen(Color.Purple, 4),
points);
}
Задание 4. Построение фрактала «Дерево Пифагора»
Что такое фрактал?
Фрактал — это объект, состоящий из повторяющихся частей.
Примеры:
- снежинка Коха;
- множество Мандельброта;
- дерево Пифагора.
Принцип работы фрактала
Каждая ветвь:
- делится на две новые;
- уменьшается;
- поворачивается под углом.
Код программы
using System;
using System.Drawing;
using System.Windows.Forms;
namespace FractalTree
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.Paint += Form1_Paint;
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
DrawTree(
g,
400, 500,
-90,
100,
10);
}
private void DrawTree(
Graphics g,
float x1,
float y1,
double angle,
float length,
int depth)
{
if (depth == 0)
return;
float x2 = x1 + (float)(Math.Cos(angle * Math.PI / 180) * length);
float y2 = y1 + (float)(Math.Sin(angle * Math.PI / 180) * length);
g.DrawLine(
Pens.DarkGreen,
x1,
y1,
x2,
y2);
DrawTree(
g,
x2,
y2,
angle - 20,
length * 0.75f,
depth - 1);
DrawTree(
g,
x2,
y2,
angle + 20,
length * 0.75f,
depth - 1);
}
}
}
Объяснение фрактала
Рекурсия
Функция вызывает сама себя:
DrawTree(...)
Условие остановки
if (depth == 0)
return;
Без этого программа уйдет в бесконечную рекурсию.
Вычисление координат
Math.Cos()
Math.Sin()
Используются для вычисления новых точек ветвей.
Результат работы
На экране появится фрактальное дерево.
При увеличении depth дерево становится сложнее.
Задания
- Изменить цвета фигур.
- Добавить текст.
- Изменить толщину линий.