Message #1465

From: Andrey <andreyastrelin@yahoo.com>
Subject: Twists description
Date: Tue, 01 Mar 2011 07:46:42 -0000

Hi guys,
I’m a little confused about the term "rotation plane". What does it mean? If we have elementary twist in R^D, then there are two invariant spaces: First one is D-2 dimensional and vectors from it are not affected by the twist (they are eigenvectors with eigenvalues 1), and the second is two-dimensional and the twist rotates it like the regular 2D plane. In 4D they both have 2 dimensions. I think that the term "rotation plane" fits better to the second (2D) space, and "rotation multi-axis" I’ve used for the first space.
Let us have 4D body that is cut by a set of hyperplanes (yes, they are 3D, and we don’t need anything more than normal direction and distance from the center to define it). We have to decribe the set of axes (normals to hyperplanes) and set of possible rotation planes perpendicular to each axis. And we don’t want the complete list of them.
I see an algorithmic way of the enumeration.
We have from 1 to 4 families of axes for our puzzle. Take one axis from each family and some set of body movements - generators of the symmetry group. If we don’t consider "alternated" bodies, then generators can be taken from mirror reflections - they have the simplest description (one vector).
For example, for the tesseract family we have
Axes={(0,0,0,1),(0,0,1,1),(0,1,1,1),(1,1,1,1)}
Movements={(1,0,0,0),(-1,1,0,0),(0,-1,1,0),(0,0,-1,1)}
They are edges and faces of the fundamental area, but I’m not sure that it will always be the case (we should check what happens for simplex, bitruncated simplex, bitruncated 24-cell and for duoprisms with n=k and n!=k).
To generate and enumerate the complete set of axes use the function:

int p=0,q=Axes.Length;
for(i=0;i<q;i++) A[i]=Axes[i];
while(p!=q){
foreach(Movement M in Movements){
Vector V=M.ApplyTo(A[p]);
for(i=0;i<q;i++) if(AxesEqual(V,A[i])) break;
if(i==q) A[q++]=V;
}
}

The same is for twists: for each axis we decribe generators of the set of possible rotational planes (give them as pairs of vectors, describing half of the smallest twist - and we’ll have the order of twists group for this plane for free). We don’t need to decribe movements to generate complete twists set - rotation planes give it to themself.

So the complete description for tesseract family will be:

Movements: 1 0 0 0 ; -1 1 0 0 ; 0 -1 1 0 ; 0 0 -1 1
Vector: 1 0 0 0
Planes: 0 1 0 0 , 0 1 1 0 ; 0 1 -1 0 , 0 1 0 -1 ; 0 1 0 0 , 0 1 1 1
Vector: 1 1 0 0
Planes: 0 0 1 0 , 0 0 1 1 ; 1 -1 0 0 , 0 0 1 0 ; 1 -1 0 0 , 0 0 1 1
Vector: 1 1 1 0
Planes: 1 -1 0 0 , 1 0 -1 0 ; 0 0 0 1 , 1 -1 0 0
Vector: 1 1 1 1
Planes: 1 -1 0 0 , 1 0 -1 0 ; 1 -1 0 0 , 1 1 -1 -1

And if you add some more lines, you can get the complete description of the puzzle (assuming that the body is convex and the painting is "one color per one cell"):

Dimensions: 4
Movements: 1 0 0 0 ; -1 1 0 0 ; 0 -1 1 0 ; 0 0 -1 1
Vertices: 1 1 1 1
Alternated: No
Vector: 1 0 0 0
Planes: 0 1 0 0 , 0 1 1 0 ; 0 1 -1 0 , 0 1 0 -1 ; 0 1 0 0 , 0 1 1 1
Cuts: 0.333333 ; -0.333333
Vector: 1 1 1 1
Planes: 1 -1 0 0 , 1 0 -1 0 ; 1 -1 0 0 , 1 1 -1 -1
Cuts: 0


It’s a cube 3^4 with 8 additional diagonal cuttings :)

Meaning of vectors:

When you apply the rotation defined by vectors A, B to the vector C, result will be:
Rot[A,B](C) = Symm[B](Symm[A](C)),
where Symm[A](C)=2*A*(A,C)/(A,A)-C .

Reflection of the vector in the plane
Refl[A](C)=-Symm[A](C) .

Now, when rotation plane description includes minimal twist angle, I think tat we may return to single number description of angle - write there one integer number.

Description of 5^7:

Dimensions: 7
Movements: 1 0 0 0 0 0 0 ; -1 1 0 0 0 0 0; 0 -1 1 0 0 0 0; 0 0 -1 1 0 0 0 ; 0 0 0 -1 1 0 0 ; 0 0 0 0 -1 1 0 ; 0 0 0 0 0 -1 1
Vertices: 1 1 1 1 1 1 1
Alternated: No
Vector: 1 0 0 0 0 0 0
Planes: 0 1 0 0 0 0 0 , 0 1 1 0 0 0 0 ; 0 1 0 0 0 0 0 , 0 1 0 1 0 0 0 ; 0 1 0 0 0 0 0 , 0 1 0 0 1 0 0 ; 0 1 0 0 0 0 0 , 0 1 0 0 0 1 0 ; 0 1 0 0 0 0 0 , 0 1 0 0 0 0 1
Cuts: 0.6 ; 0.2 ; -0.2 ; -0.6

Sticker-oriented programs (like MC4D) will have some way of finding correspondence between stickers and twists. To do that it may apply twist to all cell centers (2D, 1D and 0D) and find the fixed point. If no fixed points is found then the twist can’t be described as sticker-defined. If for some sticker there is no twists in the set, then something is wrong with our mathematics :)

All this doesn’t include Andy’s "2D twists". But they may be described as intersections of layers with different cutting planes and same rotational planes. And we can write them in log like {5:3:8|1:4:1}:1 .
Numbers in braces are axis, rotation plane and mask for different directions of cutting planes. Angle is the same. Direction of twist is defined by the first group (different groups may give different orientations of the canonical twist).

Andrey