#include using namespace Rcpp; void rot(int n, int *x, int *y, int rx, int ry) { if (ry == 0) { if (rx == 1) { *x = n-1 - *x; *y = n-1 - *y; } //Swap x and y int t = *x; *x = *y; *y = t; } } //' Hilbert d to x, y //' //' @param n index //' @param d hilbert cell coordinate //' @export // [[Rcpp::export]] IntegerVector d2xy(int n, int d) { int rx, ry, s, t=d; int x, y; x = y = 0; for (s=1; s0; s/=2) { rx = (x & s) > 0; ry = (y & s) > 0; d += s * s * ((3 * rx) ^ ry); rot(s, &x, &y, rx, ry); } return(d); }