#5.maple # # Draws the hyperbolae from the first half of the fifth ideal # interface(quiet=true): with(plots): plotsetup(x11,plotoptions=`width=3in,height=2.5in`): ############################################ # Sphere := (a,b,c,r) -> linalg[matrix]([ [a^2+b^2+c^2-r^2, -a, -b, -c], [ -a , 1 , 0 , 0 ], [ -b , 0 , 1 , 0 ], [ -c , 0 , 0 , 1 ]]): Wedge := proc(Sph) local Pairs, i, j, wedge: wedge := linalg[matrix](6, 6, 0): Pairs := combinat[choose]([1,2,3,4],2): for i from 1 to 6 do for j from 1 to 6 do wedge[i,j] := linalg[det](linalg[submatrix](Sph,Pairs[i],Pairs[j])): od: od: evalm(wedge) end: Equation := proc(a,b,c,r) local plucker: plucker:=linalg[vector]([p01,p02,p03,p12,p13,p23]): linalg[innerprod](plucker,Wedge(Sphere(a,b,c,r)),plucker) end: Quadric := (a,b,c,d,e,f,g,h,x,y) -> linalg[matrix]([ [ a , b , c , d ], [ b , e , f , g ], [ c , f , h , x ], [ d , g , x , y ]]): ########################################## # We assume that A = b = 1. # a is the function a(B) stored in aSOLS # TanPoint := proc(Q,B,a) local Point, plugin, touch: Point:=linalg[vector]([1,B,t*a,t]): plugin:=linalg[innerprod](Point,Q,Point): touch:= expand(-coeff(plugin,t)/2/coeff(plugin,t^2)): # print(plugin, touch): [B, simplify(touch*a), touch] end: # [1,B,1,b] # B is the function B(b) stored in aSOLS TanPointb := proc(Q,B,b) local Point, plugin, touch: Point:=linalg[vector]([1,B,t,t*b]): plugin:=linalg[innerprod](Point,Q,Point): touch:= expand(-coeff(plugin,t)/2/coeff(plugin,t^2)): [B, simplify(touch), simplify(touch*b)] end: Coords:=linalg[vector]([1,X,Y,Z]): plucker:=linalg[vector]([p01,p02,p03,p12,p13,p23]): s2:=2^(1/2): F:=subs(p02=a*A,p03=b*A,p12=a*B,p13=b*B,p01=0,p23=0, linalg[innerprod](plucker,Wedge(Quadric(-1,0,-1,0,1,0,0,1,0,-1)),plucker)): aSOLS:=[solve(subs(b=1,A=1,F)=0,a)]: bSOLS:=[solve(subs(a=1,A=1,F)=0,B)]: ######################################################### # Initial hyperbola # Hyp:=plot3d([s2*cos(th)+t*sin(th), (-s2*sin(th)+t*cos(th)-1),t] ,t=-8..8,th=-Pi..Pi,color=coral): ###################################################################### # s:=2^(1/2): # The `sister quadric to this has s:=-2^(1/2): ################################################################## # [ r , 0 , 0 , 0 ], # [ a , d , 0 , 0 ], The list Eqs is for this # [ b , e , x , 0 ], matrix (See parameter # [ c , f , y , z ]])): Eqs:=[r^2*g^2+8*s-12, 2*a-r*s+r, 2*b+r*s*g-r*g, 2*c-r*s*g+r*g, 2*z^2-s+1, 2*y^2+29*s-41, x+2*y*s+2*y, f^2-12*s+17, e-f, 4*d+12*f*r^2*s*g+17*f*r^2*g]: r:=simplify([solve(Eqs[1]=0,r)][1]): # The solutions have same square a:=solve(Eqs[2]=0,a): b:=solve(Eqs[3]=0,b): c:=solve(Eqs[4]=0,c): z:=[solve(Eqs[5]=0,z)][1]: # The solutions have same square y:=[solve(Eqs[6]=0,y)][1]: # The solutions have same square x:=solve(Eqs[7]=0,x): f:=[solve(Eqs[8]=0,f)][1]: # The solutions have same square e:=solve(Eqs[9]=0,e): d:=solve(Eqs[10]=0,d): Family5:=Quadric(s*g^2, (1-s)*g^2/2, -g*s, -g, -g^2, -g, g, -2*(2+s), 1, 2*(1+s)): A:=linalg[inverse](linalg[matrix]([ [ r , 0 , 0 , 0 ], [ a , d , 0 , 0 ], [ b , e , x , 0 ], [ c , f , y , z ]])): #for i from 1 to 4 do for j from 1 to 4 do # A[i,j]:=evalf(A[i,j]): od:od: #evalm(A);quit; for i from 2 to 3 do for j from 1 to 4 do A[i,j]:=simplify(A[i,j]/I): od: od: r:=A[1,1]*0.97: Xp:=solve(t*cos(th) + r*sin(th) = A[2,1] + A[2,2]*Xp, Xp): Yp:=solve(t*sin(th) - r*cos(th) = A[3,1] + A[3,2]*Xp + A[3,3]*Yp, Yp): Zp:=solve(t = A[4,1] + A[4,2]*Xp + A[4,3]*Yp + A[4,4]*Zp, Zp): g:=2: Hyp5:=plot3d([Xp, Yp, Zp ],t=-10*abs(g)..9*abs(g),th=-Pi..Pi,color=tan): TC51:=TanPoint(Family5,B,aSOLS[1]): TC52:=TanPoint(Family5,B,aSOLS[2]): ################################################################### macro(pagr=COLOR(RGB, .5, 1, .5)): AA:=display3d( spacecurve([t,0,0],t=-6..6,color=magenta,thickness=5), Hyp, Hyp5, spacecurve([TC51[]],B=-1..-0.1,color=BLUE,thickness=3,numpoints=100), spacecurve([TC51[]],B=0.1..1,color=BLUE,thickness=3,numpoints=100), spacecurve([TC51[]],B=sqrt(2)..5,color=BLUE,thickness=3,numpoints=100), spacecurve([TC51[]],B=-5..-sqrt(2),color=BLUE,thickness=3,numpoints=100), spacecurve([TC52[]],B=-1..-0.1,color=BLUE,thickness=3,numpoints=100), spacecurve([TC52[]],B=0.1..1,color=BLUE,thickness=3,numpoints=100), spacecurve([TC52[]],B=sqrt(2)..5,color=BLUE,thickness=3,numpoints=100), spacecurve([TC52[]],B=-5..-sqrt(2),color=BLUE,thickness=3,numpoints=100), # # # The tangent lines # spacecurve([1. ,t*subs(B=1 ,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([0.99,t*subs(B=0.99,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([0.96,t*subs(B=0.96,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([0.90,t*subs(B=0.90,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([0.79,t*subs(B=0.79,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([0.64,t*subs(B=0.64,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([0.46,t*subs(B=0.46,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([0.27,t*subs(B=0.27,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([0.09,t*subs(B=0.09,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-0.09,t*subs(B=-0.09,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-0.27,t*subs(B=-0.27,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-0.46,t*subs(B=-0.46,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-0.64,t*subs(B=-0.64,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-0.79,t*subs(B=-0.79,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-0.90,t*subs(B=-0.90,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-0.96,t*subs(B=-0.96,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-0.99,t*subs(B=-0.99,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-1. ,t*subs(B=-1 ,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), # spacecurve([1. ,t*subs(B=1 ,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([0.99,t*subs(B=0.99,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([0.96,t*subs(B=0.96,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([0.90,t*subs(B=0.90,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([0.79,t*subs(B=0.79,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([0.64,t*subs(B=0.64,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([0.46,t*subs(B=0.46,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([0.27,t*subs(B=0.27,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([0.09,t*subs(B=0.09,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-0.09,t*subs(B=-0.09,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-0.27,t*subs(B=-0.27,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-0.46,t*subs(B=-0.46,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-0.64,t*subs(B=-0.64,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-0.79,t*subs(B=-0.79,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-0.90,t*subs(B=-0.90,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-0.96,t*subs(B=-0.96,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-0.99,t*subs(B=-0.99,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-1. ,t*subs(B=-1 ,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), # # Second set of tangent lines # spacecurve([4 ,t*subs(B=4 ,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([3.7 ,t*subs(B=3.7 ,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([3.4 ,t*subs(B=3.4 ,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([3.1 ,t*subs(B=3.1 ,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([2.8 ,t*subs(B=2.8 ,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([2.5 ,t*subs(B=2.5 ,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([2.21,t*subs(B=2.21,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([1.99,t*subs(B=1.99,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([1.77,t*subs(B=1.77,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([1.58,t*subs(B=1.58,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([1.48,t*subs(B=1.48,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([1.435,t*subs(B=1.435,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([1.4165,t*subs(B=1.4165,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([1.4165,t*subs(B=1.4165,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([1.435,t*subs(B=1.435,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([1.48,t*subs(B=1.48,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([1.58,t*subs(B=1.58,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([1.77,t*subs(B=1.77,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([1.99,t*subs(B=1.99,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([2.21,t*subs(B=2.21,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([2.5 ,t*subs(B=2.5 ,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([2.8 ,t*subs(B=2.8 ,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([3.1 ,t*subs(B=3.1 ,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([3.4 ,t*subs(B=3.4 ,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([3.7 ,t*subs(B=3.7 ,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([4 ,t*subs(B=4 ,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), # spacecurve([-4 ,t*subs(B=4 ,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-3.7 ,t*subs(B=3.7 ,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-3.4 ,t*subs(B=3.4 ,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-3.1 ,t*subs(B=3.1 ,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-2.8 ,t*subs(B=2.8 ,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-2.5 ,t*subs(B=2.5 ,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-2.21,t*subs(B=2.21,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-1.99,t*subs(B=1.99,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-1.77,t*subs(B=1.77,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-1.58,t*subs(B=1.58,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-1.48,t*subs(B=1.48,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-1.435,t*subs(B=1.435,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-1.4165,t*subs(B=1.4165,aSOLS[2]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-1.4165,t*subs(B=1.4165,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-1.435,t*subs(B=1.435,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-1.48,t*subs(B=1.48,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-1.58,t*subs(B=1.58,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-1.77,t*subs(B=1.77,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-1.99,t*subs(B=1.99,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-2.21,t*subs(B=2.21,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-2.5 ,t*subs(B=2.5 ,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-2.8 ,t*subs(B=2.8 ,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-3.1 ,t*subs(B=3.1 ,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-3.4 ,t*subs(B=3.4 ,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-3.7 ,t*subs(B=3.7 ,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), spacecurve([-4 ,t*subs(B=4 ,aSOLS[1]),t],t=-10..10,color=pagr,numpoints=2), # # view=[-9..9,-9..5,-5..5]): #plotsetup(gif,plotoutput=`5.gif`,plotoptions=`height=570,width=570`): #display(AA,orientation=[75,60],scaling=CONSTRAINED); AA:=display3d( spacecurve([t,0,0],t=-6..6,color=magenta,thickness=5), Hyp5, spacecurve([TC51[]],B=-1..-0.15,color=BLUE,thickness=3,numpoints=100), spacecurve([TC51[]],B=0.15..1,color=blue,thickness=3,numpoints=100), spacecurve([TC51[]],B=sqrt(2)..5,color=BLUE,thickness=3,numpoints=100), spacecurve([TC51[]],B=-5..-sqrt(2),color=blue,thickness=3,numpoints=100), spacecurve([TC52[]],B=-1..1,color=BLUE,thickness=3,numpoints=100), spacecurve([TC52[]],B=sqrt(2)..5.5,color=blue,thickness=3,numpoints=100), spacecurve([TC52[]],B=-6..-sqrt(2),color=blue,thickness=3,numpoints=100), # view=[-9..9,-9..5,-5..5]): plotsetup(gif,plotoutput=`sm.gif`,plotoptions=`height=120,width=150`): display(AA,orientation=[75,60],scaling=CONSTRAINED);