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度角怎么办?我怎样才能“行走”内部细胞的象限在中间?