Сделай форк этого репозитория. Добавь проект TagsCloudVisualization. Выполняй задания в этом проекте.
Для визуализации облака тегов подобного этому, нужно реализовать алгоритм раскладки слов.
Реализуй в режиме TDD алгоритм раскладки со следующим интерфейсом:
class CircularCloudLayouter
{
CircularCloudLayouter(Point center)
Rectangle PutNextRectangle(Size rectangleSize)
}
В конструкторе задается позиция центра облака тегов. Для простоты тут нет слов, а есть только размер ограничивающего прямоугольника для каждого слова rectangleSize. Нужно найти расположение каждого такого прямоугольника, а не сгенерировать картинку.
Некоторые требования к раскладке:
- Форма итогового облака должна быть близка к кругу с центром в точке center.
- Прямоугольники не должны пересекаться друг с другом.
- Облако должно быть плотным, чем плотнее, тем лучше.
Требования к тестам:
- Все требования должны вычитываться из твоих модульных тестов.
- Не нарушай паттерн AAA.
- Ревьюеру должно быть легко по тесту понять проверяемое требование.
- Ревьюеру должно быть легко убедиться в корректности каждого теста.
Лучше выполнить не все требования, но держать код и тесты в порядке, чем выполнить всё, но с неряшливым кодом и непонятными тестами.
Алгоритм для этой задачи можете выдумать самостоятельно или развить следующую несложную идею: Можно располагать прямоугольники по очереди вдоль достаточно плотной раскручивающейся спирали с центром в точке center. При позиционировании конкретного прямоугольника его можно дополнительно сдвинуть к центру так, чтобы облако тегов уплотнилось.
Сделай визуализацию получившейся раскладки. Сгенерируй 2-3 раскладки с разными параметрами, сохрани изображения в репозитории и создай в директории проекта README.md файл включающий эти изображения.
- Создать изображение
new Bitmap(...)
. - Получить объект Graphics для рисования на изображении:
Graphics.FromImage(bitmap)
. - Сохранить изображение в файл
bitmap.Save(...)
.
Исследуй возможности NUnit и сделай так, чтобы при падении любого теста на раскладку из первой задачи,
создавался файл изображения раскладки и на консоль выводилась надпись Tag cloud visualization saved to file <path>
Это может упростить процесс отладки тестов.
Подсказка: ключевые слова TestContext, TearDown.