Алгоритм для хита тестирует в неперекрывающихся прямоугольниках

k = []
i = int(raw_input('enter the number of values in the list '))
l = 0
while l < i:
    p = raw_input('enter the string ')
    k.append(p)
    l= l+1


print "list is ", k
5
задан Nils Pipenbrinck 19 September 2008 в 08:54
поделиться

4 ответа

Можно организовать прямоугольники в четверке или kd-дереве. Это дает Вам O (зарегистрируйте n). Это - основной метод.

Другой интересной структурой данных для этой проблемы являются R-деревья. Они могут быть очень эффективными, если необходимо иметь дело с большим количеством прямоугольников.

http://en.wikipedia.org/wiki/R-tree

И затем существует O (1) метод простой генерации битового массива в том же размере как Ваш экран, заполните его заполнителем для "никакого прямоугольника" и вовлеките индексы прямоугольника хита в тот битовый массив. Поиск становится столь же простым как:

  int id = bitmap_getpixel (mouse.x, mouse.y)
  if (id != -1)
  {
    hit_rectange (id);
  }
  else
  {
    no_hit();
  }

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

6
ответ дан 14 December 2019 в 09:05
поделиться

Создайте Дерево Интервала. Запросите Дерево Интервала. Консультируйтесь с 'Алгоритмами' из нажатия MIT.

Дерево Интервала лучше всего реализовано как Красно-черное Дерево.

Следует иметь в виду, что только желательно отсортировать Ваши прямоугольники, если Вы собираетесь быть нажатием в них больше затем, Вы меняете их положения, обычно.

Необходимо будет иметь в виду, что у Вас есть сборка сборки Ваши индексы для другой оси отдельно. Например, необходимо видеть, перекрываете ли Вы интервал на X и на Y. Одна очевидная оптимизация должна только проверить на перекрытие на любых X интервалах, затем сразу проверить на перекрытие на Y.

Кроме того, большая часть запаса или Деревьев Интервала 'учебника' только проверяют на единственный интервал и только возвращают единственный Интервал (но Вы сказали, что "неналожение" не сделало Вас?)

1
ответ дан 14 December 2019 в 09:05
поделиться

Используйте дерево BSP для хранения прямоугольников.

0
ответ дан 14 December 2019 в 09:05
поделиться

Пихните их в дереве квадрантов.

0
ответ дан 14 December 2019 в 09:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: