从点中查找给定半径的所有像素,限制在弧内

时间:2013-02-13 23:34:13

标签: geometry pixel computational-geometry geometric-arc

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

我遇到的一个问题是超声波传感器具有60度的视野。如果检测到一个物体,那个半径的60度弧线上的任何点可能都有一个物体,但是该半径以下的所有点都保证没有一个物体。 / p>

我需要做的是编写一个给定(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 个答案:

答案 0 :(得分:2)

您可以使用任何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

(可能你可能需要在第一个不等式对中交换&gt; =和&lt; =)