2017-02-14 29 views
1

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

В настоящее время у меня есть доступ к 360 точкам, которые представляют расстояние от центра для каждого из соответствующих углов. (Расстояние до 0 °, на расстоянии в 1 °, и т.д.)

Вот пример того, что точки выглядеть, когда отображается на 2D поверхности: Circular representation of the points

То, что я хотел бы быть в состоянии do, а не кормление робота всего на 360 пунктов, чтобы накормить его сегменты, содержащие несколько точек. Например, нижняя часть изображения будет представлять собой один сегмент, даже если точки не полностью выровнены.

Мой вопрос к вам: существует ли существующий алгоритм, который поможет мне достичь того, что я пытаюсь сделать?

(я работаю в Python, но это не должно быть действительно фактор)

Спасибо большое.

ответ

0

Предполагая, что ваши очки упорядочиваются:

Для каждой точки, смотреть вперед на два очка, если средняя точка находится менее чем в некотором расстоянии от отрезка между двумя точками, а затем нажмите конечную точку 1 пт дальше, и убедитесь, что теперь обе средние точки все еще находятся на некотором расстоянии от вашего сегмента линии. Продолжайте делать это до значения false, после чего откат одного pt и генерация сегмента, а затем установите конец этого сегмента как начало следующего сегмента. Кроме того, вы можете рассматривать углы, а не просто расстояния, поскольку есть случаи, когда это было бы выгодно. Кроме того, если ни один сегмент не может быть сделан из определенной начальной точки для нескольких попыток, нажмите начальную точку вперед один (так как не все будет упрощено на сегменты)

В качестве альтернативы вы можете преобразовать в декартовы точки и использовать hough алгоритм голосования для обнаружения линий из результирующего облака точек.