c++coordinatesn-dimensional

Finding coordinate of rectangle in n-dimension


What is the best way in C++ to calculate the coordinate of a rectangle (hyper-rectangle) in n-dimension?

I have dimensions definition of the rectangle in a 1d vector like:

[min1, max1, min2, max2, ...., minN, maxN]

For example, in 2d the dimensions, the vector is

[min1, max1, min2, max2]

And the corner coordinates I am looking for are

[min1, min2], [min1, max2], [max1, min2], [max1, max2]

How do we do this for a hyper-rectangle in n-dimension?


Solution

  • That hyper-rectangle has 2^N vertices.

    To compute the coordinates of i-th vertex where i in [ 0 .. 2^N-1 ] interval, loop over bits in the i from 0 (lowest one) to N-1. If the bit is set, use maximum coordinate for that dimension, if that bit is 0, use minimum coordinate for that dimension.

    For example, for cube N=3, it has 8 vertices.

    The first one has index 0, 0b000, you’ll get minimum values for all 3 coordinates. The last one has index 7, 0b111, you’ll get maximum values for all 3 coordinates. The rest of the vertices are in between, you’ll get some combination of min and max coordinates.