Das sieht ziemlich abgefahren aus, wäre aber so ziemlich exakt das, was ich suche. Hast du das selbst geschrieben oder ist das von irgendwo kopiert?
Das is einfach mal so hinimprovisiert, wenn ich dazu ne Quelle wüsste, hätt ich die einfach verlinked...
Magst du mal erklären, was z.B. die ganzen Template-Parameter bedeuten. So ganz blick ich durch die abgefahrene Index-Berechnung noch nicht durch.
Die Grundidee der Z-order Curve ist ja einfach, dass man den linearen Index bekommt, indem man die Bits der x-Koordinate und y-Koordinate interleaved, also z.B. die Bits von x kommen in die Bits 0, 2, 4, 6, ... und die Bits von y in die Bits 1, 3, 5, 7, ... des linearen Index. Was ich hier mache ist einfach die Umkehrung: Ich nehme deinen linearen 1D Index und nehm aus dem einfach die Bits 0, 2, 4, 6, ... um die x- und die Bits 1, 3, 5, 7, ... um die y-Koordinate zu bilden. Der Templatekram implementiert einfach das Rauskitzeln der Bits (nur gleich für den allgemeinen, n-Dimensionalen Fall;
ZCurveOrder<n, i, j>::deZ(x) extrahiert aus
x das
j-te Bit der
i-ten Koordinate bei
n-Dimensionen, das
bool Flag dient nur zum Abbrechen der Rekursion).