2013-02-13 1 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

"이 종악기의"씨앗 그러면 섹터 내의 픽셀이 될 것입니까? 그런 다음 링 세그먼트 내의 픽셀을 얻으려면 두 반지름 사이의 차이를 사용할 수 있습니까? – Huckle

+0

예, 모든 픽셀이 시드로 사용될 수 있습니다. 나는 네 번째 조건이 링에 더 좋을 것이라고 생각한다. (내 원점의 불필요한 더블 열거를 피하기 위해) – MBo

+0

나는 이것을 시도하고 다시보고 할 것이다. – Huckle

관련 문제