(我会将这个标记为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。
答案 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。