Просто быстрая идея, без обид, если это глупо - уже поздно: P
- Создайте вектор слоев для запуска.
- Каждый слой содержит Вектор кусочков.
- Каждая пьеса хранит значение коэффициента (0-1) и цвет, который в качестве альтернативы может быть равен NULL
- Сумма отношения всех частей всегда равна 1.
В начале каждый слой может содержать один кусок (с соотношением 1).
Если теперь вы решите добавить синий кусок с коэффициентом .5 (180º) к пустому слою со смещением .25, это заменит пустое создание: 3 элемента:
- [NULL .25] [синий .5] [NULL .25]
... и так рекурсивно, так что в итоге вы получите что-то вроде:
- [NULL .25] [синий .2] [NULL 0] [красный .1] [NULL .2] [черный .25]
Предположим, вы хотите сделать что-то интерактивное с этим ...
Это может быть удобно, если вы хотите, чтобы некоторые пробелы были статичными, в то время как другие корректируются, или если вы хотите, чтобы смежный цветовой фрагмент был магнитным, вам просто нужно проверить, имеет ли фигура между ними нулевое соотношение / или достаточно, чтобы привлечь другой без необходимость делать какие-либо дополнительные расчеты.
В принципе, хорошо то, что вычисления будут сделаны, когда часть будет изменена. Остальное было бы просто логикой. Скажем, если кусок перемещен, вам нужно знать только о левом / правом значении пустого пространства и не нужно итерировать остальные расчетные углы. Как-то очень похоже на то, как настраиваются эластичные интерфейсы.