in baremaps-dem/src/main/java/org/apache/baremaps/dem/Martini.java [43:92]
public Martini(int gridSize) {
this.gridSize = gridSize;
int tileSize = gridSize - 1;
if ((tileSize & (tileSize - 1)) != 0) {
throw new IllegalArgumentException("Expected grid size to be 2^n+1, got " + gridSize + ".");
}
this.numTriangles = tileSize * tileSize * 2 - 2;
this.numParentTriangles = this.numTriangles - tileSize * tileSize;
this.baseCoords = new int[this.numTriangles * 4];
for (int i = 0; i < this.numTriangles; i++) {
int id = i + 2;
int ax = 0;
int ay = 0;
int bx = 0;
int by = 0;
int cx = 0;
int cy = 0;
if ((id & 1) != 0) {
bx = by = cx = tileSize;
} else {
ax = ay = cy = tileSize;
}
while ((id >>= 1) > 1) {
int mx = (ax + bx) >> 1;
int my = (ay + by) >> 1;
if ((id & 1) != 0) {
bx = ax;
by = ay;
ax = cx;
ay = cy;
} else {
ax = bx;
ay = by;
bx = cx;
by = cy;
}
cx = mx;
cy = my;
}
int k = i * 4;
this.baseCoords[k] = ax;
this.baseCoords[k + 1] = ay;
this.baseCoords[k + 2] = bx;
this.baseCoords[k + 3] = by;
}
}