1

我正在研究一个部分通过超声波接近传感器导航的自主漫游车。在我们实现硬件之前,我们想用我现在正在编写的模拟器对我们的算法进行一些测试。

我遇到麻烦的一项任务是超声波传感器具有 60 度的视野。如果检测到对象,则该半径处沿该 60 度弧的任何点都可能有对象,但该半径以下的所有点都保证没有对象。

我需要做的是编写一个函数,该函数具有 (x,y) 坐标和方位角(我现在将其限制为 4 个基数)并让它返回给我一个半径内的像素列表和一个该半径处的像素列表。通过从多个位置和方位重复扫描,可以找到所有对象。

我最初的想法是迭代地工作。从传感器前面的行开始,以逐渐加宽的扫描(1、1、3、3、5、5、7、7 等)来回扫描。然而最终半径停止与行对齐。我的新搜索路径是弄清楚如何用像素绘制弧线,然后将半径逐步提高到第一次碰撞。

这个问题提出了一个类似的问题,但只对特定点感兴趣,所以我认为这是一个根本不同的问题。

如何从给定点(经度,纬度)计算给定半径内的所有点(经度,纬度)?

4

1 回答 1

2

您可以使用任何Floodfill 方法来获取扇区中的所有整数点。预先计算起始角和结束角为

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

(可能您可能需要在第一个不等式对中交换 >= 和 <=)

于 2013-02-14T05:36:48.597 回答