Лабораторная работа 3
Задача
Реализовать упрощенную модель песчаной кучи, которая позволяет сохранять свои состояния в картинку в формате BMP.
Изначальное состояние задается входным файлом.
Размер сетки может изменяться в процессе работы программы.
Реализация - консольное приложение, поддерживающее следующие аргументы командной строки:
-i, –input - tsv-файл (tab-separated values) c начальными данными
-o, –output - путь к директории для сохранения картинок
-m, –max-iter - максимальное количество итераций модели
-f, –freq - частота, с которой должны сохранятся картинки (если 0, то сохраняется только последнее состояние)
Начальное состояние
Начальное состояние задается файлом со значением количества песчинок в каждой ячейке, кроме пустых. Размер сетки следует рассчитать на основании этих данных - минимальный прямоугольник в который попадают все ячейки.
Формат файла: Каждая строчка содержит информацию об одной ячейке, в виде (x-координаты, y-координаты, количество песчинок), разделенных символом табуляции. Количество песчинок гарантированно влезет в uint64_t
, координаты гарантированно влезают в int16_t
Примечания к модели
Новые песчинки добавляются только при инициализации.
Состояние следующего поколения ячеек зависит только от предыдущего состояния сетки.
В случае если песчинки пытаются обвалиться за границу сетки, ее размер увеличивается на 1 в соответствующую сторону.
Результат работы - программа
Программа должна пересчитывать состояние модели согласно начальным данным, а также сохранять промежуточные состояния с заданной частотой в виде картинки в формате bmp.
Картинка для текущего состояния формируется по следующим правилам:
Размер картинки равен размеру поля.
Каждый пиксель соответствует ячейке поля.
Цвет пикселя зависит от количества песчинок в ячейке.
- 0 - белый
- 1 - зеленый
- 2 - желтый
- 3 - фиолетовый
- > 3 - черный
Кодирование 1 пикселя должно занимать не более 4 бит.
Программа должна закончить свою работу в случае если модель достигла стабильного состояния, либо номера заданной изначально итерации.
Ограничения
Пользовать сторонними библиотеками, кроме стандартной, запрещено. В частности это означает, что Вы должны сами спроектировать и реализовать функции для работы с картинками в формате bmp.
Использование контейнеров стандартной библиотеки (
std::vector
,std::list
и тд) - запрещено.
Примечание
- Для реализации Вам может пригодиться библиотека для работы с файловой системой из стандартной библиотеки.
- В данной лабе Вам дано только описание. Структура проекта и организация сборки также ваша задача. Использовать для сборки не cmake - запрещено.
- Важно помнить, что размер структуры может быть не равен сумме размеров ее полей за счет выравнивания. Данную проблему можно решить за счет директив препроцессора.
Deadline
- 31.10.23 24:00 - 0.8
- 07.11.23 24:00 - 0.65
- 14.11.23 24:00 - 0.5
Данная работа оценивается 15 баллами.
Описание
Реализация математической модели бесконечной песчаной кучи с возможностью сохранения состояния кучи в BMP картинку