Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > генератор мозаики


Автор: alya 12.2.2008, 15:36
привет, народ!
я читала много информации в Сети, ничего не нашла по своему вопросу
помогите пожалуйста с моей задачей

нужно создать генерировать мозаику в области в виде прямоугольника

входные данные:
1) тип фигуры (участвуют только многоугольники), 
2) процентное соотношение фигур (допустим, 50% треугольников, 25% квадратов, 25% шестиугольников)

расположение фигур внутри прямоугольника любое

я даже близко не представляю как это сделать... если есть какие-то идеи, напишите пжл

П.С. реализация должна быть на с++

Автор: alya 12.2.2008, 16:21
или может подскажете, какие разделы математики нужно применить для решения задачи?

Автор: alya 12.2.2008, 16:40
я тут надумала такой вариант, но он мне совсем не нравится

допустим, известно что что в прямоугольную область всего помещается примерно 50 фигур

тогда определяем количество фигур каждого типа (из приведенного выше в моем посте примера получается треугольников - 25шт, квадратов - 13шт (округл. до целого), шестиугольников - 13 шт)

прямоугольную область, в которую нужно вписать эти фигуры, представлям в виде матрицы
0 х 0 х 0 х 0 х 0....
х 0 х 0 х 0 х 0 х....
0 х 0 х 0 х 0 х 0....
.............................
где 0 - потенциальная вершина фигуры, а х - это невершина

ну и начинается исследование этой матрицы и соединение вершин. Там где рисуется фигура, ставится цифра. Чтобы не запутаться, надо ввести обозначения, н-р, треугольники обозначаются цифрой 1, квадраты - цифрой 2 и т.д.
На выходе алгоритма примерно такая матрица:
2 х 2 х 1 х 0 х 0....
х 0 х 1 х 0 х 0 х....
2 х 2 х 0 х 0 х 0....
.............................
Здесь четыре "2" описывают квадрат, а верхняя правая вершина квадрата + две "1" опишут треугольник.

м-да, какой кошмар...

Автор: PPS05 12.2.2008, 17:13
Только, наверное, это будет не матрица, а некого рода сетка, так, чтобы вершины всех фигур ложились на вершины этой сетки. Для приведенного примера я бы взял регулярную сетку, где каждая вершина имеет 6 соседей по ребру... Ну, а других реализаций пока не вижу...

Автор: alya 12.2.2008, 17:36
PPS05, спасибо за ответ
я сказала матрица потому что сразу думала о методе реализации...
расскажите подробней про сетку, почему 6 соседей?

Автор: PPS05 12.2.2008, 17:47
Потому что, кажется, это минимум, чтобы положить и квадраты, и треугольники, и шестиугольники. Но при этом подходе надо придумать что-то ускоряющее: полный перебор будет работать долго... Как вариант (первая мысль) - при выборе, куда устанавливать следующую фигуру, мы рассматриваем только вершины, соседние с уже рассматриваемыми. Имею мысль, что так мы хотя-бы избежим "дырок", делающих дальнейший процесс ужу ненужным.

Автор: alya 12.2.2008, 18:00
PPS05, а что значит "регулярная сетка"?

Автор: PPS05 12.2.2008, 18:08
...Пришлось поискать, как дать нормальное определение:
Цитата

Регулярность заключается в том, что сетка представляет собой упорядоченную по определенным правилам структуру с явно выраженными сеточными направлениями, которые, в общем случае, представляют собой криволинейную систему координат.


Добавлено через 39 секунд
Что-то я завернул...

Автор: alya 12.2.2008, 18:20
PPS05, спасибоsmile
все нормально, вроде поняла

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)