在两个角度之间的2D网格中获取单元格

时间:2013-04-06 19:48:10

标签: math grid vector-graphics angle raycasting

enter image description here

我已成功实施了基本的光线投射算法,但我想将其扩展为使用“角度范围”。

了解网格单元格大小,列数和行数,起始光线位置,角度a和角度b,如何获得落在两条光线之间的所有单元格?

1 个答案:

答案 0 :(得分:1)

如果两条光线位于同一象限或相邻象限中:

您可以使用稍微修改过的Bresenham algorithm将两条光线并行放在一起,并在它们之间获得整列或一行单元格。您的示例和(主要)水平扇区的示例伪代码:

 initialisation for deltaerr1, deltaerr2
 for x from 0 to EndXCoord
         get all cells in column (x,y1)-(x,y2)

         error1 := error1 + deltaerr1
         if error1 ≥ 0.5 then
             y1 := y1 + 1
             error1 := error1 - 1.0

         error2 := error2 + deltaerr2
         if error2 ≥ 0.5 then
             y2 := y2 + 1
             error2 := error2 - 1.0

如果光线在相反的象限中,则将它们分开(并取所有中间象限)

有些情况:

第1和第2象限:在y方向上做步骤,获得行

第1和第4象限:在x方向上进行步骤,获取列(如在伪代码中)

从第3个象限中的第1个和最终角度开始:在每个象限中沿y方向进行步骤,在第2个象限中获取所有需要的单元格

特殊情况:

某个角度是n * 90 - 可能需要改变方向

光线形成180°角:Bresenham沿着所需范围内的线步进,在选定的半平面中获得行或列