Message #1468
From: Roice Nelson <roice3@gmail.com>
Subject: Re: [MC4D] Twists description
Date: Tue, 01 Mar 2011 11:31:21 -0600
Thank you Andrey,
I looked at Don’s MC4D code last night to see that the cutting planes, being
hyperplanes of dimension 3, don’t need any extra orientation information
(I’m sure I knew this in the past and forgot). It is confusing because we
are using the term "plane" in multiple ways, and for constructs of different
dimensions. But my mental image of "rotation plane" is the same as yours.
I take the term to refer to the 2D space of a simple rotation, and prefer
language like "rotates through the rotation plane" and "rotates about the
rotation multi-axis".
The examples you’ve made were the perfect response and don’t look nearly as
scary as I imagined, so that’s great. My only worry is requiring the axes
and rotation plane sets to be generated in a certain way, but that looks to
be the nature of the problem if we don’t want to list them all out while
still caring about referencing them by an index. Your code block is part of
the spec though, and each program will have to implement it *exactly* the
same.
If I’m reading your example right, the orientation of the hypercube in the
3^4 puzzle description is determined by the "Vertices" entry in combination
with the generators. I guess it will be the same for other polytopes, and
more complicated uniform polytopes will have multiple vertices listed there
(e.g. the truncated
tesseract<http://en.wikipedia.org/wiki/Truncated_tesseract> would
have 3). (I’m unsure of everything in this paragraph.)
Though your examples were likely not intended as the final format, a
nitpicky comment is that I’d prefer the header to be a little more
structured, in that it didn’t rely on spaces so much for formatting. Commas
between vector components would improve things. Maybe the subject should at
least be raised of whether XML might be good, though I think I’d vote to
keep things text.
Thanks again for figuring all this out.
Roice
On Tue, Mar 1, 2011 at 1:46 AM, Andrey <andreyastrelin@yahoo.com> wrote:
> 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
>
>