У меня есть небольшой вариант на «найти k ближайших соседей» алгоритм, который предполагает отказ от тех, которые не удовлетворяют определенному условию, и я не могу придумать, как это сделать это эффективно.ближайших k соседей, удовлетворяющих условиям (python)
То, что мне нужно, - это найти ближайших соседей, находящихся в текущей линии зрения. К сожалению, scipy.spatial.cKDTree
не предоставляет возможность поиска с фильтром для условного отклонения точек.
Лучший алгоритм, который я могу придумать, - это запрос для n ближайших соседей, и если в строке зрения нет k, то запросите его снова для 2n ближайших соседей и повторите. К сожалению, это будет означать повторную раскрутку n ближайших соседей в худших случаях. Снижение производительности ухудшается, тем больше я должен повторять этот запрос. С другой стороны, установка n слишком велика, является потенциально расточительной, если большинство возвращенных пунктов не нужны.
Линия визирования меняется часто, поэтому я не могу повторно пересчитывать cKDTree
каждый раз. Какие-либо предложения?
Линия зрения в этой задаче описывается полигоном, который удовлетворяет следующему условию: Линия из любой точки в пределах ее до запрашиваемой точки не имеет пересечения с предопределенным множеством ребер. [example] (http://www.blog.samclifton.com/?p=31) Так что, увы, радиус не фиксирован. – user2667523