public MeshTile[] subdivide(Level nextLevel) { Angle p0 = this.getSector().getMinLatitude(); Angle p2 = this.getSector().getMaxLatitude(); Angle p1 = Angle.midAngle(p0, p2); Angle t0 = this.getSector().getMinLongitude(); Angle t2 = this.getSector().getMaxLongitude(); Angle t1 = Angle.midAngle(t0, t2); int row = this.getRow(); int col = this.getColumn(); MeshCoords[] coords = this.coords.subdivide(); MeshTile[] subTiles = new MeshTile[4]; subTiles[0] = new MeshTile( new Sector(p0, p1, t0, t1), nextLevel, 2 * row, 2 * col, coords[0]); // Lower left quadrant. subTiles[1] = new MeshTile( new Sector(p0, p1, t1, t2), nextLevel, 2 * row, 2 * col + 1, coords[1]); // Lower right quadrant. subTiles[2] = new MeshTile( new Sector(p1, p2, t1, t2), nextLevel, 2 * row + 1, 2 * col + 1, coords[2]); // Upper right quadrant subTiles[3] = new MeshTile( new Sector(p1, p2, t0, t1), nextLevel, 2 * row + 1, 2 * col, coords[3]); // Upper left quadrant. return subTiles; }