0

(Java と言語にとらわれない両方のタグを付けます。このアイデアには実際には Java は必要ないと思いますが、それは私の特定のアプリケーションであるため、2 つのタグのどちらが適切かを IDK で確認してください)。

任意の数の行と列、および任意のセル サイズを持つグリッドがあるとします。

このグリッドは 2D 空間を表します。ここで、その 2 次元空間のどこかに四角形があるとしましょう。以前は、四角形と交差するすべてのセルを (ループすることなく) 取り戻すことができたのを覚えていますが、現時点では数学が私を逃れています。

例を固めるために、12 行と 10 列があるとします。セルは 256 の正方形です (つまり、行の高さは 256、列の幅は 256 です)。x:400、y:300 に 200x200 の長方形があった場合、2 行目の 2 番目と 3 番目の列と交差することがわかります。

したがって、セル構造が次のように定義されている場合:

// 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 );

次に、startingColumn/Row から endColumn/Row までループします。

于 2013-03-03T01:49:59.967 に答える