Перейти к основному содержанию
EDU-MMCS
  • В начало
  • Дополнительно
Вы используете гостевой доступ
Вход
В начало
  1. Prog_3
  2. Лабораторная работа 5-6. Визуализация в C#

Лабораторная работа 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. Построение фрактала «Дерево Пифагора»


Что такое фрактал?

Фрактал — это объект, состоящий из повторяющихся частей.

Примеры:

  • снежинка Коха;
  • множество Мандельброта;
  • дерево Пифагора.

Принцип работы фрактала

Каждая ветвь:

  1. делится на две новые;
  2. уменьшается;
  3. поворачивается под углом.

Код программы

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 дерево становится сложнее.

Задания

  1. Изменить цвета фигур.
  2. Добавить текст.
  3. Изменить толщину линий.

Вы используете гостевой доступ (Вход)
Сводка хранения данных
Скачать мобильное приложение Яндекс.Метрика
На платформе Moodle