Tests such as jo44f carry n independent vectors around a bone. If matrix X is the array of independent vectors and Y is the result of carrying them then X−1Y does not depend on the choice of original vectors. The matrix representation of X−1Y does, however, depend on the basis vectors presumed for that matrix. A matrix identifies a linear transformation only in conjunction with an identified set of n basis vectors. We speculate that such a rotation is the composition of two rotations that respectively:
To this end we call Linear.gs passing n−2 independent vectors from the bone first.
This yields B which is an array of n orthonormal basis vectors the first n−2 of which lay in the bone.
Matrix B itself is expressed in the facet bcc of the interface between the two zones where we launched and captured the vectors on their cycle about the bone.
We then express X−1Y in basis B thus:
A = BX−1YB−1.
Note that the above is a product of matrices all in bcc coordinates, while the resulting matrix can be taken as being expressed in the orthonormal basis vectors.
Consider a contravarient vector in a zone that is parallel to a vector in the bone. If crossing each facet between neighbors in the cycle about the bone leaves the vector parallel to the same vector of the bone, then the cycled vector would end up parallel to the same bone vector. Consider the itinerant vector when it is in the facet between vectors. It is by continuity parallel to the bone vector, and should so remain as it emerges into the neighbor’s space.
This sounds right yet the output with tag xr reports the parallel test vectors in each fbcc in test cases such as jo44. In that computation the first vector of the n test vectors has components (1, 0, 0, 0) and this presumes the fbcc basis set. All the basis vectors of a fbcc basis set but the last belong the facet. In this case the logic assumes the bcc origin for the facet to be global vertex 3. The vector (1, 0, 0, 0) is thus seen to be the vector from vertex 3 to vertex 0 which indeed lies in the facet, but not the bone which is simplex [0; 1; 2]. Indeed none of the test vectors are of the bone. Perhaps we should renumber the vertices to improve our analysis of this same geometry.
This may cinch the argument: Consider some vector to be transmitted around a bone that is parallel to some vector in the bone. ‘Parallel’ is meaningful here because the bone is a sub-simplex of the zone and is thus included in the scope of the Euclidean geometry of the zone. As we move to the frame of the facet between neighboring zones, this parallel relationship is maintained. By induction the vector remains parallel, indeed equal, to its stay-at-home copy. This simple logic was suggested by looking at the numbers. Here is more detail.
Create a matrix of vectors the first n−2 of which are in the bone. Do this in fbcc because then the matrix consists of only 0s and 1s.
Just now I am putting this code into file jo44fc which descends from jo44f because it provides the necessary context. I plan to move it later perhaps into jog.ml.
Since B is an array of ON (orthonormal) basis vectors, expressed in fbcc, then B−1 is an array of fbcc basis vectors expressed in ON coordinates. We send B around the loop yielding B' also in fbcc.
To express the linear transformation X−1Y in these orthogonal basis we compute: C−1X−1YC where C = B†. To understand this expression imagine it working on a vector x expressed in fbcc: C−1X−1YCx. When x is an edge of the bone, x has one 1 component and the rest zero. Cx is then one of the orthonormal basis set. Send Cx around the bone yielding RCx. Compute (RCx)−1RCx