Сделайте форк этого репозитория. Добавьте проект 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.