0

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

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

这个网格代表一个二维空间。现在假设我在那个二维空间的某个地方有一个矩形 - 在过去,我记得能够取回与矩形相交的所有单元格(无需循环),但现在数学正在逃避我。

为了巩固这个例子,假设有 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...
}

我记得它与将矩形位置和尺寸除以单元格大小和地板/天花板以取回索引有关,但我无法理解具体细节。同样,我知道如何使用循环执行此操作,但希望能够仅使用数学和数组索引。

任何帮助,将不胜感激。

蒂亚。

4

1 回答 1

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 循环。

于 2013-03-03T01:49:59.967 回答