# Free-rotating arbitrary dimensions

10 replies to this topic

### #1 Agamer

Agamer

GMC Member

• GMC Member
• 157 posts

Posted 10 April 2012 - 11:18 PM

Warning: Do not try to answer this question if you do not have a strong mind-conceptual space.

So, here's the background:
I am making a vector graphics editor system that runs with arbitrary dimensions (i.e. the user could set it up to have two-dimensional points, ten-dimensional points, or even a thousand-dimensional points). The point system operates off of a group of points representing the origin. There's a central origin point, representing the absolute zero in all dimensions, and then there are other points, representing the base-vectors for each dimension (i.e. positive one unit along each axis). The view is merely a transformation of all points, including the origin points, such that the points have their original coordinates as combinations of the transformed origin points. Also, the view only sees the first two dimensions; the other dimensions are conceivably all depth dimensions (sort of...).
Here's the beta version if you need to get an idea of what it is more exactly.

Here's the catch:
Now, I need to allow the user to manipulate this x-dimensional view-space. I have a few keys already grounded: shift-click-and-drag translates the view, control-shift-click-and-drag rotates the view around the center. These are the two-dimensional view transformations. I have two more keys available: shift-rightclick-and-drag and control-shift-rightclick-and-drag. Here's the question: How can I use these keys to rotate the x-dimensional space by the origin points so that the user can view any and every angle of the origin by rotating to it?

My guess:
I thought I might use shift-rightclick-and-drag to rotate 3-dimensional space and use control-shift-rightclick-and-drag to transform in such a way as to "open up" the other dimensions.

Does anyone have any ideas?

Edited by Agamer, 10 April 2012 - 11:19 PM.

• 0

Package designer; resource maker; engine builder; program tool creator -- Be fully prepared to game:

My scripts My images My model designer My GUI components One of my engines Accepting texture requests

### #2 slayer 64

slayer 64

Slayer of gingers

• GMC Member
• 4301 posts
• Version:GM:Studio

Posted 11 April 2012 - 12:17 AM

the help is hard to read and the whole control layout just makes me not want to use it
• 0

### #3 Agamer

Agamer

GMC Member

• GMC Member
• 157 posts

Posted 11 April 2012 - 12:27 AM

Exactly!! You're absolutely right! That's why I'm updating it, and making it have a 10X more convenient interface. The point is, currently, I can't continue until I break this confusing puzzle.
• 0

Package designer; resource maker; engine builder; program tool creator -- Be fully prepared to game:

My scripts My images My model designer My GUI components One of my engines Accepting texture requests

### #4 Tepi

Tepi

GMC Member

• Global Moderators
• 4248 posts
• Version:GM:Studio

Posted 11 April 2012 - 10:15 AM

The thing is, you are going to need x(x-1)/2 degrees-of-freedom in rotating the view around in the x-dimensional space, so that the user can view it from every angle. Now you have 3 key combinations available for dragging, which means 6 degrees of freedom; the controls will fail as early as for the fifth dimension.

The question is, are you going to place 499 500 nubs for controlling the 1000-dimensional space or are you willing to sacrifice on the available orientations?
• 0

### #5 chance

chance

GMC Member

• Global Moderators
• 8762 posts
• Version:GM:Studio

Posted 11 April 2012 - 11:29 AM

I thought I might use shift-rightclick-and-drag to rotate 3-dimensional space and use control-shift-rightclick-and-drag to transform in such a way as to "open up" the other dimensions.

Without causing "control overload" in the user, that's the only sensible way. Just keep the same set of keys for 3-space rotation, but have a way for the user to "select" the next 3 dimensions at a time.

So toggling once specifies dimensions 1,2,3... a second toggle gives 4,5,6 etc. And you'll need to display the currently selected dimensions, so the user doesn't get lost.

Of course, you'll still lose degrees-of-freedom for the higher dimensions. So just pick 3 rotation axes for the user each time he "advances the dimensionality" forward to the next three, and forget the rest. Besides, the display won't be visually meaningful anyway, once you get past the 4-D hypercube.

Edited by chance, 11 April 2012 - 11:36 AM.

• 0

### #6 Agamer

Agamer

GMC Member

• GMC Member
• 157 posts

Posted 11 April 2012 - 05:09 PM

So, basically, you're saying, it's really not possible?

I'm certainly not asking that it be capable of rotating every axis of the dimensions at once. And, actually, @chance, that was sort of one of my thoughts, but a little more elaborate:
• Three dimensions can float and rotate around freely without affecting any further dimensions (just like two dimensions can spin without turning the third dimension). So, my first idea was to allow the user to pick the three dimensions affected by the rotation of shift-control-rightclick. And the user would pick it using shift-rightclick (preferably in a drop-down menu). Then these dimensions would rotate freely without affecting or causing any change in the other hyper-dimensions.
The problem with this, however, is that it would seem a little annoying to have to go through and select the dimensions every time you want to rotate to another set of dimensions. I would think it would become a bit wieldy.
That's why I was wondering, is there any way at all that I could use the shift-rightclick to cycle through the dimensions in such a way that I could achieve full freedom?

Basically:
- With the mouse, I can hold shift and click and drag the space around, to anywhere I want. Without having to make any selections, I can drag the view all the way to -1000 and to +1000 in the x and y axes. I can zoom in and out to get as much detail or as wide a shot as I want.
- Does it make sense that I should be able to take a series of dimensions and contain them into a supposed 'single dimension' that I can briefly and efficiently cycle or drag through with one user input, whereas I can use the other user input to control the motion and the finer detail?

Edited by Agamer, 11 April 2012 - 05:11 PM.

• 0

Package designer; resource maker; engine builder; program tool creator -- Be fully prepared to game:

My scripts My images My model designer My GUI components One of my engines Accepting texture requests

### #7 chance

chance

GMC Member

• Global Moderators
• 8762 posts
• Version:GM:Studio

Posted 14 April 2012 - 12:45 PM

So, basically, you're saying, it's really not possible?

No, just the opposite. I was agreeing that your approach was the "only sensible way".

Does it make sense that I should be able to take a series of dimensions and contain them into a supposed 'single dimension' that I can briefly and efficiently cycle or drag through with one user input, whereas I can use the other user input to control the motion and the finer detail?

Well... sort of. Because basically, there's no need to collapse the higher dimensions into a single one. You're just scrolling an on-screen "number". You don't have to display those dimensions until the user releases the right-button.

The difficulty here is that you're trying to create a user-friendly, intuitive control scheme... for something that is decidedly NOT intuitive -- namely, higher dimensions. That's a serious challenge.

And control-scheme aside, the notion of rotating about some higher dimensional axis, without showing all the lower dimensions, is very non-intuitive. Like rotating a 3-cube in space, without showing the 2-dimensional axes (and 1-dimensional points) that comprise it.
• 0

### #8 Yourself

Yourself

The Ultimate Pronoun

• GMC Elder
• 7352 posts
• Version:Unknown

Posted 15 April 2012 - 04:57 AM

And control-scheme aside, the notion of rotating about some higher dimensional axis,

To be clear, rotations don't happen about an axis in higher dimensions. In fact, there's only one number of dimensions in which a rotation does happen about an axis: 3 dimensions. Generally speaking rotations occur parallel to a plane (about some point in that plane), no matter the number of dimensions. It just so happens that in 3D, there is a single vector which is perpendicular to the plane of rotation.
• 4

### #9 chance

chance

GMC Member

• Global Moderators
• 8762 posts
• Version:GM:Studio

Posted 15 April 2012 - 11:27 AM

To be clear, rotations don't happen about an axis in higher dimensions. In fact, there's only one number of dimensions in which a rotation does happen about an axis: 3 dimensions. Generally speaking rotations occur parallel to a plane (about some point in that plane), no matter the number of dimensions. It just so happens that in 3D, there is a single vector which is perpendicular to the plane of rotation.

Thanks for pointing that out. Thinking more carefully about it, I realize now that the rotational plane (hyperplane) in N-space has dimension N-1. So for N>3, there are multiple vectors perpendicular to that plane.
• 0

### #10 Yourself

Yourself

The Ultimate Pronoun

• GMC Elder
• 7352 posts
• Version:Unknown

Posted 15 April 2012 - 04:38 PM

To be clear, rotations don't happen about an axis in higher dimensions. In fact, there's only one number of dimensions in which a rotation does happen about an axis: 3 dimensions. Generally speaking rotations occur parallel to a plane (about some point in that plane), no matter the number of dimensions. It just so happens that in 3D, there is a single vector which is perpendicular to the plane of rotation.

Thanks for pointing that out. Thinking more carefully about it, I realize now that the rotational plane (hyperplane) in N-space has dimension N-1. So for N>3, there are multiple vectors perpendicular to that plane.

Indeed. This is actually where the formula that Tepi used for rotational degrees of freedom comes from. A plane is defined by two linearly independent vectors, in N dimenions, there are N choose 2 pairs of linearly independent basis vectors which can form a basis for all rotations. So in 2 dimensions, we have 1 rotational degree of freedom (made obvious in that we often represent rotations with a single angle), in 3D we have 3 rotational degrees of freedom, in 4D we have 6 rotational degrees of freedom and so on.

Another way to get at the rotational degrees of freedom is to imagine a rigid N-simplex with one vertex anchored at the origin. The first thing to remember is that a single point in N dimensions has N degrees of freedom in movement. An N-simplex is simply N + 1 N-points connected to each other with edges of constant length. Each edge represents a single constraint in the system and reduces its number of degrees of freedom by 1. So, starting with N + 1 points, we have N (N + 1) total degrees of freedom (N degrees of freedom for each point). We're going to fix one point to be at the origin, so that removes its N degrees of freedom:

$DoF = N (N + 1) - N = N^2$

Now, the number of edges in an N simplex (and thus the number of length constraints) is N + 1 choose 2. This should be obvious from the fact that every pair of vertices has an edge between them. So:

$DoF = N^2 - {N + 1 \choose 2} = N^2 - \frac{N (N + 1)}{2} = N^2 - \frac{N^2}{2} - \frac{N}{2} = \frac{N^2}{2} - \frac{N}{2} = \frac{N (N - 1)}{2}$

Which we again recognize as N choose 2.
• 1

### #11 chance

chance

GMC Member

• Global Moderators
• 8762 posts
• Version:GM:Studio

Posted 16 April 2012 - 12:44 PM

Now, the number of edges in an N simplex (and thus the number of length constraints) is N + 1 choose 2. This should be obvious from the fact that every pair of vertices has an edge between them.

It's only indirectly related, but this reminds me of how you can use Pascal's Triangle to see the number of elements of each type in the N-dimensional simplex. It works the same way as constructing his triangle, since you're basically adding another vertex outside the space of the previous simplex, and then connecting it to the original vertices. It's analogous to summing two adjacent numbers in a row of Pascal's triangle to get the number below.

So the number of "edges" in the (N-1) simplex that's used to construct the Nth simplex, is the third element of the Nth row of the triangle: 1, 3, 6, 10, 15, 21, etc.
• 0