Мы сортируем первый список по положению x, а второй - по позициям y. Таким образом, каждый пункт имеет позицию в каждом списке. Теперь, как вы это делаете для поиска ближайшего соседа (по крайней мере, я придумал), вы находите позицию точки в каждом списке через двоичный поиск.Тогда мы знаем 4 направления, либо + -1 x, либо + -y, и в основном мы путешествуем в каждом из этих направлений до тех пор, пока лучшая длина пока не будет больше, чем расстояние от одной координаты.
Итак, мы ищем в каждом направлении. И скажем, что ближайшая точка находится на расстоянии 25, тогда, если наша следующая координата в направлении + X будет выше 25 только в направлении + X, мы можем остановиться, потому что, даже если изменение в Y равно 0, оно не может быть ближе.
Это обеспечивает очень эффективный и быстрый n (log (n)) алгоритм ближайшей точки, чтобы найти одну точку. Но также, поскольку нам нужны только два отсортированных списка, когда у нас есть те, что указаны в n (log (n)) времени, мы можем найти ближайшую точку для всех остальных точек в чем-то вроде log (n) времени. Найдите позицию в отсортированном списке x, найдите позицию в отсортированном списке y. Затем прокрутите до тех пор, пока вы не усечете и, несомненно, найдете ближайшую точку. Но, поскольку строительные леса одинаковы в каждом случае, они должны просто оказаться довольно быстрыми.
Несмотря на то, что данный фактический тестовый пример, вы можете придумать что-то, что является просто очень эффективной эвристикой.
Просто прослеживая точки кажется очень наивным, если мы трассировку то же самое от кадра к кадру он должен быть так, что точка от F0 до F1 в F2 должен быть фактически равна расстоянию он путешествовал в F0 - F1. Если мы предположим, что все эти точки перемещаются примерно по прямой, мы можем сделать гораздо лучшую работу, чем просто ближайшие точки. Обычно можно найти кривые, которые берут эти точки. Если мы предположим, что их позиция должна быть «F2» путем интерполяции F0 и F1 и низкого уровня, и вот позиция точки действительно очень близка. Тогда мы можем быть совершенно уверены, что мы пригвоздили это.
В равной степени объекты, которые можно было бы предположить, имеют все точки, перемещаемые примерно в одном направлении. Как и каждое перемещение точек + 5, + 5 от F0 до F1, мы не только можем угадать их позиции F2, но мы можем знать, что эти объекты довольно эффективно составляют один и тот же объект.
Составлены ли точки? Является ли бинарный поиск достаточно быстрым для вас? – soon
Если два пункта в предыдущем являются самыми близкими к одному и тому же CurrentPoint, каждый из них превращается в одну и ту же точку или только ближайшую? Остальные просто останавливаются или обнаруживают ближайшую другую точку вне таких вещей? – Tatarize
@Tatarize Другой должен быть проигнорирован. Я хочу одно очко за blob, и если blobs сливаются, они должны обратиться к одному. – azmath