| Here's another way that I like to think about it. First, forget briefly about the Hilbert curve and just think about the unit square [0,1]^2. If you take any point (x,y) in the unit square, we can associate x and y with binary coordinates, say x = 0.a1a2a3... and y = 0.b1b2b3... Then we can just define a new number z with binary representation 0.a1b1a2b2a3b3... And going the other way, given z in [0,1], we can take the 'even' binary coordinates to get x, and the 'odd' binary digits to get y. The problem with this specific mapping is that the function is not continuous. But if you are a bit more careful: 1. The first digit says "left half vs right half" 2. The second digit says "top half vs bottom half" (of the rectangle from 1) 3. The third digit says "left half vs right half" (of the square from 2) etc. and then if two numbers share the first n binary digits (i.e. your points are close on the real line) then the corresponding points in the plane will also be quite close together (they are inside the same square / rectangle with side length like 2^(-n/2) at step n). The "reason" why the dimension is different is precisely because of the "n/2": for every n digits of precision you have in the number z, you only get n/2 digits of precision for each of (x, y). This is a bit imprecise because of issues with non-unique binary representation but (at least for me) it captures the spirit of why this should work! |
Thus this is a constructive proof that you can use easily convert Hilbert indices and coordinates back and forth between each other. Again, reading the algorithm I'm pretty sure if you give it the algorithm arbitrarily detailed numbers out to infinity, the obvious extension would "work" in that you can slap a "limit to infinity" on the algorithm in both cases and it would converge to any given point you like.