Math 获取两个角度之间的二维网格中的单元

Math 获取两个角度之间的二维网格中的单元,math,grid,vector-graphics,angle,raycasting,Math,Grid,Vector Graphics,Angle,Raycasting,我已经成功地实现了一个基本的光线投射算法,但我想将其扩展到“角度范围” 知道网格单元大小、列数和行数、起始光线位置、角度a和角度b后,如何获得两条光线之间的所有单元格?如果两条光线位于同一象限或相邻象限中: 可以使用“稍微修改”将两条光线平行地走到一起,并在它们之间获得整列或整行单元格。您的示例和(主要)水平扇区的示例伪代码: initialisation for deltaerr1, deltaerr2 for x from 0 to EndXCoord get all

我已经成功地实现了一个基本的光线投射算法,但我想将其扩展到“角度范围”


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

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

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

 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方向进行步进,获取列(如伪代码)

从第一个象限开始,在第三个象限结束:在每个象限沿y方向进行步进,在第二个象限获得所有需要的单元格

特殊情况:

某些角度为n*90-可能需要改变方向


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

好主意。我知道如何处理一个象限,但我不知道如何处理不同的象限,或者一条光线在一个象限,另一条光线在另一个象限。如果光线形成180度角怎么办?我怎样才能“行走”内部细胞的象限在中间?