0

この質問は、これらの質問の逆です。

現在、正方形のスパイラルで n 番目の要素の座標を取得するこのコードがあります。

private int[] getPos(int n) {
    int x = 0, z = 0;
    if (--n >= 0) {
        int v = (int) Math.floor(Math.sqrt(n + .25) - 0.5);
        int spiralBaseIndex = v * (v + 1);
        int flipFlop = ((v & 1) << 1) - 1;
        int offset = flipFlop * ((v + 1) >> 1);
        x += offset; z += offset;
        int cornerIndex = spiralBaseIndex + (v + 1);
        if (n < cornerIndex) {
            x -= flipFlop * (n - spiralBaseIndex + 1);
        } else {
            x -= flipFlop * (v + 1);
            z -= flipFlop * (n - cornerIndex + 1);
        }
    }

    return new int[]{x,z};
}

今、逆にマップする関数が必要です。何かアイデアはありますか?

4

1 に答える 1