Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2007.09.30;
Скачать: [xml.tar.bz2];

Вниз

Подскажите алгоритмы быстрого геометрического поиска?   Найти похожие ветки 

 
Unknown user ©   (2007-07-16 12:55) [0]

Имеется набор точек с двумерными координатами, как быстро отыскать ближайшую к произвольной Pnt точку, не перебирая весь набор? Как быстро найти ближайшую к Pnt точку в заданном направлении Dir, и углом поиска Ang?

Предполагаю, что следует использовать деревья. Что посоветуете?


 
Elen ©   (2007-07-16 12:57) [1]


> не перебирая весь набор?

Что мешает перебрать?


 
ЮЮ ©   (2007-07-16 13:00) [2]

> Что мешает перебрать?

Очевидно, количество, и время рассчета.
А человек "глянул на бумажку" - и сразу нужную точку видит :)


 
Unknown user ©   (2007-07-16 13:00) [3]

требования к быстродействию


 
MBo ©   (2007-07-16 13:41) [4]

>как быстро отыскать ближайшую к произвольной Pnt точку, не перебирая весь набор

QuadTree

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


 
StriderMan ©   (2007-07-16 13:44) [5]

а как точки хранятся?
если массивом координат? - тогда или упорядочивать или все перебирать

если массивом типа array[x,y] of boolean то все намного быстрее можно сделать


 
Sapersky   (2007-07-16 14:00) [6]

Здесь:
http://www.blackpawn.com/texts/cellular/default.html
(раздел "Making It Fast")
описывается вариант с bsp-деревьями, мне, правда, так и не удалось его реализовать.


 
MBo ©   (2007-07-16 14:38) [7]

Если задача такая:
Дан набор точек P[], и для произвольной точки X, не входящей в набор, нужно найти ближайшую из набора P, то быстрее всего будет построить диаграмму Вороного (объект, связанный с триангуляцие Делоне), и тогда поиск можно будет делать за O(Log(N)) или даже за O(1) (при раскраске диаграммы  в уникальные цвета)


 
Unknown user ©   (2007-07-16 14:47) [8]

to StriderMan

массив координат, но упорядочивание здесь не поможет: координаты точек двумерные, точка для которой ищется ближайший сосед не принадлежит заданному массиву.

to Sapersky

спасибо за ссылку, но вроде есть готовые реализации BSP.

to МВо

спасибо


 
TUser ©   (2007-07-17 06:16) [9]

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


 
Unknown user ©   (2007-07-19 10:47) [10]

to TUser

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

to МВо

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

to Sapersky

есть алгоритм похожий на BSP но проще реализуемый, в нем деление пространства происходит строго вертикальными(нечетная итерация) и горизонтальными(четная итерация) прямыми, проходящими через точки из набора.


 
MBo ©   (2007-07-19 11:11) [11]

>Unknown user
Строится диаграмма Вороного, рисуется на битмапе, и каждая ее ячейка закрашивается уникальным цветом(например, цвет = номер точки набора). Тогда для каждой входящей точки просто проверяем цвет в ее координатах.
Если размерность пространства велика, и битмап такой не сделать, то разделить диаграмму горизонтальными линиями, проходящими через ее вершины, ребра диаграммы вместе с этими линиями образуют треугольники и трапеции, бинарный поиск полосы, потом бинарный поиск треугольника или трапеции


 
Unknown user ©   (2007-07-19 12:21) [12]

to MBo

спасибо, теперь понятно. к тому же треугольники можно принимать за вырожденные трапеции. полученная структура вроде называется ППЛГ, если не ошибаюсь.


 
Sapersky   (2007-07-20 10:06) [13]


> есть алгоритм похожий на BSP но проще реализуемый, в нем
> деление пространства происходит строго вертикальными(нечетная
> итерация) и горизонтальными(четная итерация) прямыми, проходящими
> через точки из набора.


Там не совсем bsp, а, как выразился автор, "2D bastard son of a sphere-tree and a bsp-tree". Дело в том, что стандартные деревья, что bsp, что quad, дают "линейное" разделение пространства, а здесь требуется "округлое", пардон за дилетантскую терминологию.
При реализации этого bastard son кол-во сравнений у меня получилось сопоставимое с линейным поиском (возможно, что-то не так понял).

Диаграмма Вороного, наверное, лучше, если она строится достаточно быстро.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2007.09.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.036 c
2-1188901835
Vovka
2007-09-04 14:30
2007.09.30
Прога для выключения компа в определённое времы!


3-1179995912
MZ
2007-05-24 12:38
2007.09.30
Скрыть записи в DBGrid е


6-1170370833
Samael6
2007-02-02 02:00
2007.09.30
Вопрос по сокетам и сокетам....


15-1188367884
Человек
2007-08-29 10:11
2007.09.30
Исскуство создание компонент (Фаронов)


2-1188558769
Dib@zol
2007-08-31 15:12
2007.09.30
SetWindowRgn





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский