Ronan

1486 Reputation

16 Badges

14 years, 168 days
East Grinstead, United Kingdom

MaplePrimes Activity


These are replies submitted by Ronan

@janhardo So the null conic is the black one. What is the cyan coloured blue conic? You have twin circles blue and circumcircles orange. They all are twin circles. You would be better off pairing them in matched colours. You still have the basic problem. The twincircles cannot pass throught the null conic. Yours do (as far as I can make out). My original question was on the type of matrix normailsation being used. I already had and have a working solution. You need to study the relevant section of the paper and understand it for yourself. AI will not do that for you. Where did the "Ideal points" come from? All this applies to non null points to the best of my current understanding. 

@janhardo @dharr 

I have tried both sets of code for producing the transformation of J to C. Unfortunately, I cannot get either to work consistently. Numerically they can produce correct values but the signs can be incorrect on the off diagonals. So I have had to stay with my approach. 

is your code AI generated?  I am replying to the reply you made yesterday plotting the circles (circles here means any conic section) for the unit triangle. Those coordinates are not the usual projective ones, they are circumlinear coordinates. I had not anticipated plotting those circles. However they can be plotted by using the plane the unit triangle forms, combined with intersection plots.  I had Maple AI do the intersection plotting routine.

Most of my commands are built into the package so will not run for you. To compensate for this I copy/passed each output and # out the command. This way you can see what the command produces and the worksheet still runs. As the expressions are generic, they hold true for any point combination used. I have added comments to emphasize what is important.  At the end I give an example of transforming a pair of circles from circumlinear coords to the original coordinates.

Regarding the twincircles. They never cut through the distinguished circle. The may be tangent to it.

Download UHG_IV_Sydpoints_and_Twin_Circumcircles_for_reply.mw

@janhardo @dharr  I will  reply later or tomorrow. 

@dharr  (PDF) Universal hyperbolic geometry. IV: Sydpoints and twin circumcircles
Thank you for the reply. I was going to put together a more extensive version of the question for you but I didn't have time earlier.
Negative values arise that is why I used abs.  I have included 4 examples of the point combinations that can arise and the manupliations the used to get the matrix form. What I have works but have being lacking backgruong knowedge.  You solution is far superior and easily addapted to my needs. Attached is the contorted method I had put together. 

restart

#with(RationalTrigonometry)

#with(RTProjective)

#with(UHG)

with(plots):with(plottools):

with(LinearAlgebra):

local D

D

(1)

Numerical Section

 

Jr:=Matrix([[ 1 , 0 , 0 ],
        [ 0 , 1 , 0 ],
        [ 0 , 0 , -1 ]]);

Matrix(3, 3, {(1, 1) = 1, (1, 2) = 0, (1, 3) = 0, (2, 1) = 0, (2, 2) = 1, (2, 3) = 0, (3, 1) = 0, (3, 2) = 0, (3, 3) = -1})

(1.1)

Original Values from the paper  Matrix diagonal will be < 1, 1, -1 >

#a1 :=<-0.03959|0.15272|1>;a2 := <-0.20363|0.78056|1>;a3 :=<-1.75344|0.19797|1>;

My examples
Two points inside the circle, one point outside. Matrix diagonal will be < 1, 1, -1 >

#a1 := <2/3|-3/2|1>;a2 :=<-1/2|-3/10|1>;a3 :=<1/2|3/5|1>;
 

Points, one inside and two outside the circle. Matrix diagonal will be < 1, 1, -1 >

#a1 := <2/3|-3/2|1>;a2 :=<-5/2|-3/2|1>;a3 :=<1/2|3|5>;

Points all outside the circle  Matrix diagonal will b< 1, 1, 1 >

#a1 := <2|-3/2|1>;a2 :=<-5/2|-3/2|1>;a3 :=<1/2|3|1>;

Points all inside the circle  Matrix diagonal will b< 1, 1, 1 >

a1 := <2/3|-1/2|1>;a2 :=<-1/2|-3/10|1>;a3 :=<1/2|-1/3|1>;

Vector[row](3, {(1) = 2/3, (2) = -1/2, (3) = 1})

 

Vector[row](3, {(1) = -1/2, (2) = -3/10, (3) = 1})

 

Vector[row](%id = 36893490870565713068)

(1.2)

oddp is odd point. I.e. if one point is inside or outside the circle

Q1:=lambda1*a1.Jr.(lambda1*a1)^%T;
Q2:=lambda2*a2.Jr.(lambda2*a2)^%T;
Q3:=lambda3*a3.Jr.(lambda3*a3)^%T;
if sign(Q1)<> sign(Q2) and sign (Q1)<>sign(Q3) then
    oddp:=1;
    lambda1:=1;
    Epsilon:=-1;
    assign(solve({(Q1=-Q2),(Q1=-Q3)},[lambda2,lambda3],explicit)[1]);print(1,(Q1)=(-Q2),(Q1)=(-Q3));
 elif sign(Q1)<>sign(Q2)and sign (Q1)=sign(Q3) then
    oddp:=2;
    lambda2:=1;
    Epsilon:=-1;
    assign(solve({(Q1)=(-Q2),(Q1)=(Q3)},[lambda1,lambda3],explicit)[1]);print(2,(Q1)=(-Q2),(Q1)=(Q3));
 elif sign(Q1)= sign(Q2)and sign (Q1)<>sign(Q3) then
   oddp:=3;
   lambda3:=1;
   Epsilon:=-1;
   assign(solve({(Q1)=(Q2),(Q1)=(-Q3)},[lambda1,lambda2],explicit)[1]);print(3,(Q1)=(Q2),(Q1)=(-Q3));
 elif sign(Q1)= sign(Q2)and sign (Q1)=sign(Q3) then
   oddp:=0;
   lambda1:=1;
   assign(solve({(Q1)=(Q2),(Q1)=(Q3)},[lambda2,lambda3],explicit)[1]);print(4,(Q1)=(Q2),(Q1)=(Q3));
   Epsilon:=1;
end if;
print(lambda1,lambda2,lambda2);

 

-(11/36)*lambda1^2

 

-(33/50)*lambda2^2

 

-(23/36)*lambda3^2

 

0

 

1

 

4, -11/36 = -11/36, -11/36 = -11/36

 

1

 

1, (5/18)*6^(1/2), (5/18)*6^(1/2)

(1.3)

v1:=-1*((-lambda1)*a1);#v1[1].Jr.(v1)^%T;
v2:=((lambda2)*a2);#v2[1].Jr.(v2)^%T;
v3:=((lambda3)*a3);#v3[1].Jr.(v3)^%T;
for i to 3 do
add(v||i[j]^2,j=1..2)-v||i[3]^2;
end do

Vector[row](3, {(1) = 2/3, (2) = -1/2, (3) = 1})

 

Vector[row](3, {(1) = -(5/36)*sqrt(6), (2) = -(1/12)*sqrt(6), (3) = (5/18)*sqrt(6)})

 

Vector[row](%id = 36893490870565697764)

 

-11/36

 

-11/36

 

-11/36

(1.4)

Put the oddpoint in row 3 whether it is inside or outside the circle

if oddp=0 or oddp=3 then
N:=<v1,v2,v3>;
elif oddp=1  then
N:=<v3,v2,v1>;
elif oddp=2  then
N:=<v1,v3,v2>;
end if;

Matrix(3, 3, {(1, 1) = 2/3, (1, 2) = -1/2, (1, 3) = 1, (2, 1) = -(5/36)*sqrt(6), (2, 2) = -(1/12)*sqrt(6), (2, 3) = (5/18)*sqrt(6), (3, 1) = (1/46)*sqrt(253), (3, 2) = -(1/69)*sqrt(253), (3, 3) = (1/23)*sqrt(253)})

(1.5)

 

 

invN:=Adjoint(N)

Matrix(3, 3, {(1, 1) = (1/2484)*sqrt(6)*sqrt(253), (1, 2) = (1/138)*sqrt(253), (1, 3) = -(1/18)*sqrt(6), (2, 1) = (5/414)*sqrt(6)*sqrt(253), (2, 2) = (1/138)*sqrt(253), (2, 3) = -(35/108)*sqrt(6), (3, 1) = (19/4968)*sqrt(6)*sqrt(253), (3, 2) = -(1/828)*sqrt(253), (3, 3) = -(1/8)*sqrt(6)})

(1.6)

 

 

A:=N.Jr.N^%T

Matrix(3, 3, {(1, 1) = -11/36, (1, 2) = -(71/216)*sqrt(6), (1, 3) = -(1/46)*sqrt(253), (2, 1) = -(71/216)*sqrt(6), (2, 2) = -11/36, (2, 3) = -(1/72)*sqrt(6)*sqrt(253), (3, 1) = -(1/46)*sqrt(253), (3, 2) = -(1/72)*sqrt(6)*sqrt(253), (3, 3) = -11/36})

(1.7)

dA:=DiagonalMatrix(1/~(sqrt~(abs(Diagonal((A))))));

 

 

Matrix(3, 3, {(1, 1) = (6/11)*sqrt(11), (1, 2) = 0, (1, 3) = 0, (2, 1) = 0, (2, 2) = (6/11)*sqrt(11), (2, 3) = 0, (3, 1) = 0, (3, 2) = 0, (3, 3) = (6/11)*sqrt(11)})

(1.8)

C:=(dA.A.dA);

Matrix(3, 3, {(1, 1) = -1, (1, 2) = -(71/66)*sqrt(6), (1, 3) = -(18/253)*sqrt(253), (2, 1) = -(71/66)*sqrt(6), (2, 2) = -1, (2, 3) = -(1/22)*sqrt(6)*sqrt(253), (3, 1) = -(18/253)*sqrt(253), (3, 2) = -(1/22)*sqrt(6)*sqrt(253), (3, 3) = -1})

(1.9)

Message the matrix so is the is a -1 on the diagonal it i is in the [3,3] position

if Trace(C)=-3 then
C:=-1*C;
end if;
if Trace(C)=-1 then
C:=-1*C;
end if;

Matrix(3, 3, {(1, 1) = 1, (1, 2) = (71/66)*sqrt(6), (1, 3) = (18/253)*sqrt(253), (2, 1) = (71/66)*sqrt(6), (2, 2) = 1, (2, 3) = (1/22)*sqrt(6)*sqrt(253), (3, 1) = (18/253)*sqrt(253), (3, 2) = (1/22)*sqrt(6)*sqrt(253), (3, 3) = 1})

(1.10)

evalf[6](C );

Matrix(3, 3, {(1, 1) = 1., (1, 2) = 2.63506, (1, 3) = 1.13165, (2, 1) = 2.63506, (2, 2) = 1., (2, 3) = 1.77098, (3, 1) = 1.13165, (3, 2) = 1.77098, (3, 3) = 1.})

(1.11)

 

 

vals:=[a=C[2,1],b=C[3,1],c=C[3,2],epsilon=Epsilon]

[a = (71/66)*6^(1/2), b = (18/253)*253^(1/2), c = (1/22)*6^(1/2)*253^(1/2), epsilon = 1]

(1.12)

CC:=<1,a,b;a,1,c;b,c,epsilon>;

Matrix(3, 3, {(1, 1) = 1, (1, 2) = a, (1, 3) = b, (2, 1) = a, (2, 2) = 1, (2, 3) = c, (3, 1) = b, (3, 2) = c, (3, 3) = `&epsilon;`})

(2)

eval(CC,vals)

Matrix(3, 3, {(1, 1) = 1, (1, 2) = (71/66)*sqrt(6), (1, 3) = (18/253)*sqrt(253), (2, 1) = (71/66)*sqrt(6), (2, 2) = 1, (2, 3) = (1/22)*sqrt(6)*sqrt(253), (3, 1) = (18/253)*sqrt(253), (3, 2) = (1/22)*sqrt(6)*sqrt(253), (3, 3) = 1})

(3)
 

 

Download 2026-08-14_Q_What_Type_of_Matrix_Normalisation_V2.mw

@acer Yes storing organised data types in sets is a bad idea.

@acer Ok. Yes if you enter two lists or two vectors, yes your first answer accepts that. I hadn't thought of that. In general I would say that the two main sources for generating the  3D lines are,
1) manual generation which usually starts of as a pair of points and a procedure produces the line.
2) operations on 3D lines to produce other 3D lines. e.g the perpendicular bisectors of two intersecting 3d lines. 
I will have to dwell on this format choice.

@acer Yes that is what I am trying to do. Reasoning:- it is a list and vector for 3D lines. I have being using this format

Vector[column](3, [7 + alpha, 8 + 2*alpha, 9 + 3*alpha])

which is good but gets mixed up with other vectors at times. I was just going to enclose that in a set. I have done that with 2D line vectors  i.e a*x+b*y+c ->{<a,b,c>} as that stops data colisions in the procedures. The other problem with the current 3D line vector structure is that it is fiddly to seperate the list component from the vector component. I picked on using a set because I have so many things already structured as lists of things. 
I like that it can handle { l , v } or { v , l  }.. Order here is not an issue as they are different types. I do understand that you consider it suboptimal coding. 

  The satisifies is there because that is how sombody answered a question about 3 years ago on checking for a "3 list". It worked so I never changed it. Which I admit is a bad policy of using something without usderstanding it properly which has caught me out badly at times months doun the line.

@dharr Interesting approach. Vote up for that.


Edit:- What is the Permanent used for?

@acer Thank you. We can leave it at that for now. There are other places where I have being using radnormal but evala might be better . That will take some testing. 

@acer  Yes that is basically what I am after. I am interested in you modifications.
Basically I came up with that code about two years ago and I am sure I tried a lot of things to get it to work.
So I gather your use of normal can help with factoring/reducing each element of the matrix.
Is setting tgdc := numer(SV1[1]); the key component here?
I like _nresults Will have to see where else I can use that concept.
"pps. I didn't much alter your approach (lcm & gcd, say), but one might..."  If you have a better approach I am interested. AFAIR I used the frondend(lcm.... because often there are square roots.

@dharr Wow. That is great. Yes too many relationshiips to chose from. I reckon in the paper the substitutions are probably hand picked. I really like the 

simplify(%,remove(has,sidrels,a__bar));

@acer You are correct and should have seen that myself as you have pointed that out to me before. Even though this is being applied to my own use of the plotting routines inside a package this works perfectly. 
    The "square", sorry I should have looked up exact names.
 The colour vs color. That is just to handle the different spellings of the word. 

Can't say I had ever tried that before without a document open. But the same occurs in Windows 10 with Maple 2026.1. Also I can't add to the favourites without a document open. Same in 2024.2

@dharr  I know this behaviout was specifically mentioned with the release of 2025 and the now interface. One work around is to use brackets when  in document mode.

A := 1/(2! + 3 + 7/5);
                                 5 
                            A := --
                                 32

B^((2 + 8)/4);

@C_R Agreed. I had forgotten about using // in the new interface.

1 2 3 4 5 6 7 Last Page 1 of 34