American Citizen on Sun, 20 Jul 2025 22:06:38 +0200


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: question on wedge products and rationals in n-Euclidean space rotation


To all:

I finally got the AB * v * BA wedge products to work properly for rotations in n-Euclidean space, by only after I multiplied M = AB*B*A and noticed that all non-diagonal entries = 0 and that the diagonal was a scaling factor for each point being rotated.

I cannot recall anything on the internet about AB*BA to recover the scaling factors for the rotated point, it was a welcome find for me.

Randall

On 7/20/25 01:31, Bill Allombert wrote:
On Sat, Jul 19, 2025 at 09:12:51PM -0700, American Citizen wrote:
Hello all:

I work with lots of rational points on surfaces (2d and 3d and occasionally
higher) but I am trying to work out a rational rotator.

Please let me explain.

dot(a,b)=sum(i=1,#a,a[i]*b[i]);
dot(a,b) = a*b~

wedge(a,b)=(a~*b)-(b~*a);
mag(a)=rsqrt(dot(a,a));

\\ rotate a --> b --> Rotator in n-space
mat_rot(a,b)=dot(a,b)-wedge(a,b);
I am trying to rotate a point "pt" by using the two vectors a,b which create
the wedge product
na=a/mag(a);
ab=(a+b)/2;
ab/=mag(ab);
AB=mat_rot(na,ab);
BA=mat_rot(ab,na);
The ab vector is 1/2 the way between the two input vectors, a and b, and is
needed to do the 1/2 the rotation angle since a reflection is being used.
For example, if I want to rotate 90 degs, I'd have to put in two vectors,
say in 3d [1,0,0] and [1,1,0] to indicate 45 degrees rotation in the xy
plane. But the [1,1,0] vector has to be normalized, or the end results don't
come out right.

We used the wedge products as kind of a sandwich product, which is commonly
written a^(-1) * V * a

new_pt = (BA*pt~)~*AB))

The problem is the line "ab/=mag(ab). I found out by playing around that the
two vectors have to be normalized, ie. a/mag(a) and (ab)/mag(ab) for the
wedge product to work correctly. But that line introduces square roots and
so the result comes out in real decimals, not as rationals or integers.
mat_rot is homogenous of degree 1 with respect to each of the variable so
mat_rot(a/mag(a),b/mag(b))= mat_rot(a,b)/(mag(a)*mag(b))
                           = mat_rot(a,b)/rsqrt(dot(a,a)*dot(b,b))

So if dot(a,a)*dot(b,b) is a square, you can stay with rational numbers.

Cheers,
Bill.