在与给定矩形相交的网格中查找单元格

时间:2013-03-03 01:34:15

标签: java math language-agnostic

(我会将这个标记为Java和语言无关,因为我认为这个想法并不真正需要Java,但那是我的特定应用程序,因此IDK中哪两个是适当的。)

假设我的网格具有任意数量的行和列,以及任意单元格大小。

此网格表示2d空间。现在假设我在那个二维空间中有一个矩形 - 过去,我记得能够找回与矩形相交的所有单元格(无需循环),但是数学现在正在逃避我。 / p>

为了巩固这个例子,假设有12行10列。单元格为256平方(因此行高为256高,列为256宽)。如果在x:400,y:300处有一个200x200的矩形,我知道它会与第二行的第二和第三列相交。

因此,如果单元结构定义如下:

// reference[rows][columns]    
SomeCellClass[][] cells = SomeCellClass[12][10]

然后交叉点将是SomeCellClass[1][1]SomeCellClass[1][2]

理想情况下,回报将类似于

private SomeCellClass[] blah(){
  // do work
  SomeCellClass[] product = new SomeCellClass[total];
  SomeCellClass[0] = // first one that intersects...
  SomeCellClass[1] = // second one that intersects...
  // etc...
}

我记得它将矩形位置和尺寸除以单元尺寸和地板/天花板以取回指数有所作为,但无法理解具体细节。再次,我得到了如何使用循环,但希望能够使用数学和数组索引。

任何帮助都将不胜感激。

TYIA。

1 个答案:

答案 0 :(得分:1)

看起来基本上就是这样:

int startingColumn = Math.floor( rect.left / columnWidth );
int endingColumn = Math.ceil( rect.right / columnWidth );
int startingRow = Math.floor( rect.top / rowHeight );
int endingRow = Math.ceil( rect.bottom / rowHeight );

然后显然从startingColunn / Row循环到endingColumn / Row。