(我会将它标记为Java和语言无关的,因为我认为这个想法并不真的需要Java,但这是我的特定应用程序,所以IDK中的哪一个两个标签是合适的)。在与给定矩形相交的网格中查找单元格
比方说,我有一个任意数量的行和列以及任意单元大小的网格。
此网格代表2d空间。现在假设我在这个2D空间中有一个矩形 - 过去,我记得能够找回所有与矩形相交的单元格,(无需循环),但此时数学正在逃避我。
为了巩固这个例子,假设有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...
}
东西,我记得将矩形的位置和尺寸除以单元格大小和地板/天花板以获得索引bu,有些事情要做我无法理解这些细节。再次,我得到如何用循环做到这一点,但希望能够只使用数学和数组索引。
任何帮助,将不胜感激。
TYIA。
如果你想弄清楚数学,我建议在纸上画出来...... – 2013-03-03 01:36:33
@OliCharlesworth我试过了。我想我可以得到边缘,但是如何让中间的细胞逃脱我(例如,想象一个跨越4或5列的非常长的矩形)。 – momo 2013-03-03 01:38:40
如果你想要一个所有单元格索引的数组,那么你将需要一个循环。 – 2013-03-03 01:39:28