セルのインデックスを4X4グリッド、0、1、2、3などに格納する配列があります。アイテム0のすぐ隣にアイテム1(右側)とアイテム4(下)があることがわかります。渡されたインデックスのすぐ隣にあるセルのインデックスを返す関数をどのように作成しますか?
function getCellsAround(0)
{
should return 1 and 4
}
セルのインデックスを4X4グリッド、0、1、2、3などに格納する配列があります。アイテム0のすぐ隣にアイテム1(右側)とアイテム4(下)があることがわかります。渡されたインデックスのすぐ隣にあるセルのインデックスを返す関数をどのように作成しますか?
function getCellsAround(0)
{
should return 1 and 4
}
public static ArrayList<Point> getPointsAround(Point p, Rectangle r) {
ArrayList<Point> points = new ArrayList<Point>();
for(int dx = -1; dx <= 1; dx++) {
for(int dy=-1; dy <= 1; dy++) {
if(dx!=0 || dy !=0) {
Point point = new Point(p.x+dx, p.y+dy);
if(r.contains(point)) {
points.add(point);
}
}
}
}
return points;
}
そんな感じ?これは、次のだけでなく、x、y座標(ポイントクラス)を使用します。
(1、2、3
4、5、6)
これは私には宿題のように聞こえるので、ここに一般的な考え方があります。
ネイバーのタイプごとに関数を作成します。たくさんの言語を書いたので、実際に何を使っているのかわかりません。これがJavaです
private Integer getTopNeighbor(int ind) // ....
private Integer getBottomNeighbor(int ind) // ....
private Integer getLeftNeighbor(int ind) // ....
private Integer getRightNeighbor(int ind) // ....
public Integer[] getAllNeighbors(int ind) // use the four above to determine
その場合、これらの一部はnullになる可能性があります(最初のインデックス0には左または上の隣接がないなど)。したがって、これらすべてをチェックして、null以外のものを返します。
はじめに、getRightNeighborは境界チェックを使用してind+1になります。