Geometry 从一个点找到给定半径的所有像素,限制在一个圆弧内

Geometry 从一个点找到给定半径的所有像素,限制在一个圆弧内,geometry,pixel,computational-geometry,geometric-arc,Geometry,Pixel,Computational Geometry,Geometric Arc,我正在研制一种自动漫游车,它部分依靠超声波接近传感器导航。在我们实现硬件之前,我们想用模拟器对我们的算法进行一些测试,我现在正在写这篇文章 我遇到一些麻烦的一项任务是,超声波传感器的视野为60度。如果检测到对象,沿该半径处60度圆弧的任何点都可能有对象,但该半径以下的所有点都保证没有对象 我需要做的是编写一个函数,给定一个(x,y)坐标和一个方位(我现在把它限制为4个基数),让它返回给我一个半径内的像素列表和一个半径处的像素列表。通过从多个位置和方位重复扫描,可以找到所有物体 我最初的想法是要精

我正在研制一种自动漫游车,它部分依靠超声波接近传感器导航。在我们实现硬件之前,我们想用模拟器对我们的算法进行一些测试,我现在正在写这篇文章

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

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

我最初的想法是要精力充沛地工作。从传感器前面的一行开始,以逐渐扩大的扫描范围(1、1、3、3、5、5、7、7等)来回扫描。然而,最终半径不再与行对齐。我的新搜索路径是找出如何用像素绘制圆弧,然后将半径逐步增大到第一次碰撞

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

您可以使用任意值获取扇区中的所有整数点。 根据需要预先计算起始角和终止角

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
(x-x0)*S_Sin-(y-y0)*S_Cos>=0//点位于起始光线的左侧

(x-x0)*E_Sin-(y-y0)*E_Cos的“种子”将是扇区内的任何像素?我想我可以用两个半径之间的差值来得到一个环段内的像素?是的,任何像素都可以作为种子。我认为第四个条件更适合ring(以避免不必要的内环点双重枚举),我将尝试并报告。这需要在8位微控制器上执行,这不是您的答案的错误,但预先计算的查找表似乎是我在该硬件上执行的唯一方法。