Алгоритм мозаики / структуры данных?

Я подумываю о создании программы, которая позволила бы мне играть или решать головоломки со скользящей линией, как на krazydad.com . Он состоит из плитки с 4, 5, 6, 7 и 8 сторонами. Кажется, что все плитки, кроме семи сторон, имеют одинаковую длину, причем стороны между двумя семигранными плитками (и, следовательно, соединяют пятисторонние плитки с четырехсторонними плитками), имеют стороны примерно 70% от нормальной длины. Как вы можете видеть на картинке ниже, восьмиугольники окружены чередующимися пятиугольниками и шестиугольниками. Они прикреплены к другим сторонам шестиугольников. К концам пятиугольников прикреплены линии меньшего размера, соединяющие квадраты с другими группами. Затем вокруг квадратов формируются семигранные фигуры с двумя короткими сторонами. Я думаю, что внешний край определяется просто путем исключения тайлов, находящихся слишком далеко от центра.

enter image description here

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

Что касается настройки, я думаю о том, чтобы вручную вычислить точки и определить точки минимальный набор повторяющихся плиток (1 8, 4 5, 4 6, 4 7 и 1 4), затем размещение их рядом друг с другом. При размещении я проверял существующие точки близости к каждой, которую я размещаю, и объединял их, если находил. Затем мне нужно будет проверить наличие повторяющихся строк и также объединить их.

Есть ли более простой или более простой способ: A) создать мозаику или B) объединить узлы и ссылки при выполнении мозаики?

5
задан Jason Goemaat 16 August 2011 в 01:42
поделиться