【问题标题】:Getting cells in a 2D grid between two angles在两个角度之间的二维网格中获取单元格
【发布时间】:2013-04-06 19:48:09
【问题描述】:

我已经成功实现了一个基本的光线投射算法,但我想扩展它以使用“角度范围”。

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

【问题讨论】:

    标签: math grid vector-graphics angle raycasting


    【解决方案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 方向上执行步骤,获取列(如伪代码)

    从第 1 象限开始,在第 3 象限结束:在每个象限沿 y 方向走步,在第 2 象限获取所有需要的单元格

    特殊情况:

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

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

    【讨论】:

    • 好主意。我了解如何为一个象限执行此操作,但我对如何处理不同的象限,或者一条光线在一个象限而另一条光线在另一个象限的情况感到困惑。如果光线形成 180° 角会怎样?我怎样才能“走”中间象限的内部单元格?
    • @Vee 添加了更多想法
    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    相关资源
    最近更新 更多