如何快速沿给定角度选择一组网格单元?

时间:2012-02-22 02:08:54

标签: actionscript-3 math grid tiles

我已经设置了一个包含理论单元格的网格类。

我有一个方法collectCells(),它接受​​起点,弧度和距离作为参数。我希望这个方法返回一个Array,其中包含沿给定角度的所有单元格,这些单元格与起点之间的指定距离,例如。

enter image description here

对我来说,最简单的方法就是循环遍历给定方向上的所有像素,并在我去的时候选择单元格,例如:

for(var i:int = 0; i<distance; i++)
{
    startPoint.x += Math.cos(radians);
    startPoint.y += Math.sin(radians);

    if( start point falls within uncollected cell) collect cell;
}

这显然很差,因为循环将与我指定的距离一样长 - 非常慢。

我尝试了不同的东西,创建了一个nextCell()方法,它接受最后收集的单元格和弧度。该方法在弧度指定的方向上投射了25个像素点,收集了所得到的细胞,然后从该细胞中重新开始给定数量的细胞。

我并没有真正清楚地考虑这种方法,并且一旦完成就意识到我遇到了问题,因为每次寻找下一个单元时,我正在测试的实际路径都会被破坏,例如

enter image description here

绿色虚线是所需路径,蓝线是构成每个nextCell()调用的路径,因为检查是从每个单元格的中心进行的。

在指定距离(像素)上有效收集给定方向的单元格的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

或者您可以使用Bresenham's line drawing algorithm。因为字面意思是你试图画一个像素宽度线但是有很大的像素。