2012-06-20 2 views
0

Я пытаюсь разработать компонент, который должен выглядеть somewhat like thisСчетные соседние сегменты круга

Я использую RaphaelJS сделать это, и что работает просто отлично. У меня есть массив углов, который я использую для вычисления путей отдельных сегментов. Я храню эти пути в простом массиве, поэтому внутренний круг находится в сегментах [0] и так далее, вращаясь наружу.

Моя проблема в том, что мне нужно, чтобы каждый сегмент знал о смежных сегментах как по часовой стрелке, так и против часовой стрелки, внутрь и наружу, и мне трудно понять, как вычислить их положение - это мой сегментный массив. Так, например, в случае вышеприведенной диаграммы красный сегмент на уровне 2 (где 0 - самый внутренний круг) имеет красный, ярко-зеленый, каки, ​​светло-фиолетовый и темно-фиолетовый соседи.

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

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

Большое спасибо,

Энтони

+0

Что происходит, когда один сегмент перекрывает два внешних или внутренних сегмента? Или больше? – TheZ

+0

С точки зрения данного сегмента, если более чем один внешний сегмент «накладывает» сегмент, все они считаются смежными с этим исходным сегментом. То же самое для внутренних сегментов. –

+0

Вам придется проходить через соседние внешние и внутренние сегменты и проверить, находятся ли углы обоих концов среза в пределах/равны концам каждого другого сегмента и наоборот. Не «быстрый» процесс, а скорее самый простой. – TheZ

ответ

1

Я бы изменить, как вы храните сегменты из одного отсортированного массива в один отсортированный массив на уровне.

Поиск соседей данного сегмента (S) тогда довольно прост: левые и правые соседи - это предыдущие и следующие элементы массива этого уровня.

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

Смежные вопросы