Лучшая структура данных и пакеты для представления геометрических единиц на сетке - PullRequest
0 голосов
/ 22 сентября 2019

Я хочу написать программу с «геометрическими автоматами».Я хотел бы, чтобы это было компаньоном к книге о художественных проектах.Будут разные юниты, такие как «четырьмя лепестковыми единицами» и «шестью лепестковыми единицами», показанными ниже, и пользователи и выбирают наборы правил для рисования уникальных паттернов на единицах:

enter image description here

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

Все, что я сейчас знаю, это 2D-массивы, представляющие сетку единиц.У меня также возникают проблемы с математическим разделением «субъединиц».Я вижу себя просто перекрывающим кучу формул единичного круга и сжимающих домены x / y (декартова система).Я также вижу себя, представляющего кривую от одной единицы к другой (радианы).

Любая помощь будет оценена.

Спасибо !!

1 Ответ

0 голосов
/ 23 сентября 2019

Я не могу гарантировать, что это наиболее эффективное решение, но это решение, поэтому вам следует начать.

Кажется, что граф (вершины с ребрами)естественный способ кодировать эту сетку.Каждый узел имеет 4 или 6 соседей (количество соседей соответствует количеству лепестков).Каждый узел имеет 8 или 12 ребер, по два на каждого соседа.

Каждая вершина имеет координату (x, y), например, первая строка на левом изображении, начиная с левого, находится в местоположении(1,0), следующий узел справа от него (3,0).Первый узел во втором ряду (0,1).Это может позволить вам убедиться, что они построены правильно, но в противном случае координата не имеет к этому никакого отношения.

Проблема заключается в том, что у каждого соседа два разных ребра, каждое из которых выровнено по-своемукруг.Вы можете отождествить их с центрами их кругов, или вы можете просто назвать один «верхний», а другой «нижний».

Эта структура позволяет легко следовать за ребрами и при необходимости может быть сохранена в виде хеш-набора (с указанием координат) или связанного списка.

...