У меня есть облако точек, и хотел бы обнаружить появление определенных шаблонов точек в моем коде.
Допустим, у меня есть 1000 точек в трехмерном пространстве, и я хочу обнаружить все экземпляры 3 точек, которые образуют L-образную форму, где каждый сегмент L имеет определенную длину. Облако точек может не иметь точных совпадений, но может быть очень близким (например, в облаке точек длина сегмента «L» может быть немного длиннее / короче идеальной)
Моя первоначальная идея была примерно такой :
Проблема в том, что этот подход имеет ужасное время работы наихудшего случая. В идеале я хотел бы иметь какую-то структуру данных для ускорения моих запросов на «Найти все точки, которые находятся между distanceMin и distanceMax от данной точки». Может ли кто-нибудь указать мне на некоторые полезные структуры данных, которые могут помочь.
Я думал поместить все точки в октодерево, чтобы ускорить время доступа.
Есть ли другой совет, как улучшить время работы? Эвристика для ускорения работы?
Примечание: формы, которые я пытаюсь найти, являются переменными. Они не всегда будут буквой «L». Я пробовал смотреть на трансформации, но они кажутся полезными только для обнаружения определенных заранее определенных форм, таких как линии / круги.