2013-02-13 9 views
1

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

Одна из задач, с которой я столкнулся, состоит в том, что ультразвуковой датчик имеет поле зрения 60 градусов. Если объект обнаружен, любая точка вдоль этой 60-градусной дуги в этом радиусе может иметь объект, но все точки ниже этого радиуса гарантируют не иметь объекта.

Что мне нужно сделать, это написать функцию, которая задает координату (x, y) и подшипник (я ограничиваю это на 4 кардинала на данный момент), и пусть он вернет мне список пикселей внутри радиус и список пикселей в этом радиусе. При повторных сканированиях из нескольких мест и подшипников все объекты могут быть найдены.

Моя первоначальная мысль заключалась в том, чтобы работать итеративно. Начните в ряд перед датчиком и развернитесь назад и вперед в более широком сканировании (1,1,3,3,5,5,7,7 и т. Д.). Однако в конечном итоге радиусы прекращают выравнивание со строками. Мой новый путь поиска - это выяснить, как рисовать дугу с пикселями, а затем направить радиус до первого столкновения.

Этот вопрос задает аналогичный вопрос, но интересуется только конкретными точками, поэтому я считаю, что это принципиально другая проблема.

how to calculate all points(longitude,latitude) within a given radius from given point (longitude,latitude)?

ответ

1

Вы можете использовать любой Floodfill method, чтобы получить все целые точки в этом секторе. предвычислять начальный и конечный углы, как

S_Angle = Center_Bearing - Pi/6 
E_Angle = Center_Bearing + Pi/6 

Важные ценности:

S_Cos = Cos(S_Angle) 
S_Sin = Sin(S_Angle) 
E_Cos = Cos(E_Angle) 
E_Sin = Sin(E_Angle) 

условия Пограничные для заливка сектора:

(x-x0)*S_Sin-(y-y0)*S_Cos >= 0 //point is left to starting ray 
(x-x0)*E_Sin-(y-y0)*E_Cos <= 0 //point is right to ending ray 
(x-x0)^2+(y-y0)^2 <= R^2  //point is in the range 

(возможно, вам может понадобиться для обмена> = и < = в первая пара неравенств)

+0

«Семя» для этой души d - это любой пиксель внутри сектора? Думаю, тогда я мог бы использовать разницу между двумя радиусами, чтобы получить пиксели в кольцевом сегменте? – Huckle

+0

Да, любой пиксель может служить семенем. Я думаю, что четвертое условие было бы лучше для кольца (чтобы избежать ненужного двойного перечисления точек внутреннего круга) – MBo

+0

Я попробую это и отчитаю. – Huckle

 Смежные вопросы

  • Нет связанных вопросов^_^