Experiments on intersections of "bisector surfaces" for pairs of lines

in R^3. First we consider the two skew lines V(x,y) and V(y-1,z):

> with(linalg): with(Groebner):

Warning, new definition for norm

Warning, new definition for trace

> C1:=[x1-1,y1]; C2:= [y2-1,z2];

[Maple Math]

[Maple Math]

The conditions for (x,y,z) to be on the bisector surface are that

there are points (x1,y1,z1) in C1 and (x2,y2,z2) in C2 such

that (x-xi,y-yi,z-zi) are perpendicular to the tangent line to Ci

and ||(x-x1,y-y1,z-z1)|| = ||(x-x2,y-y2,z-z2)||:

> N1:=crossprod(grad(C1[1],[x1,y1,z1]),grad(C1[2],[x1,y1,z1]));

[Maple Math]

> N2:=crossprod(grad(C2[1],[x2,y2,z2]),grad(C2[2],[x2,y2,z2]));

[Maple Math]

> eqns1:=[op(C1),op(C2),dotprod(N1,[x-x1,y-y1,z-z1],orthogonal),dotprod(N2,[x-x2,y-y2,z-z2],orthogonal),(x-x1)^2+(y-y1)^2+(z-z1)^2-(x-x2)^2-(y-y2)^2-(z-z2)^2];

[Maple Math]

Use a lex Groebner basis to eliminate xi, yi, zi:

> G1:=gbasis(eqns1,plex(x1,y1,z1,x2,y2,z2,x,y,z));

[Maple Math]

The equation of the bisector surface:

> y=solve(G1[1],y);

[Maple Math]

This is a hyperbolic paraboloid (saddle surface)

> D1:=[x1+1,y1]; D2:= [y2+1,z2];

[Maple Math]

[Maple Math]

> M1:=crossprod(grad(D1[1],[x1,y1,z1]),grad(D1[2],[x1,y1,z1]));

[Maple Math]

> M2:=crossprod(grad(D2[1],[x2,y2,z2]),grad(D2[2],[x2,y2,z2]));

[Maple Math]

> eqns2:=[op(D1),op(D2),dotprod(M1,[x-x1,y-y1,z-z1],orthogonal),dotprod(M2,[x-x2,y-y2,z-z2],orthogonal),(x-x1)^2+(y-y1)^2+(z-z1)^2-(x-x2)^2-(y-y2)^2-(z-z2)^2];

[Maple Math]

> G2:=gbasis(eqns2,plex(x1,y1,z1,x2,y2,z2,x,y,z));

[Maple Math]

> Intersection:=[G1[1],G2[1]];

[Maple Math]

> gbasis(Intersection,plex(x,y,z));

[Maple Math]

"generic" picture -- intersection is a smooth curve of degree 4, genus 1 in 3-space; the

projection to a plane has two double points

> D1:=[2*x1-y1+z1+1,-x1+3*y1]; D2:= [-x2+y2-z2+2,z2];

[Maple Math]

[Maple Math]

> M1:=crossprod(grad(D1[1],[x1,y1,z1]),grad(D1[2],[x1,y1,z1]));

[Maple Math]

> M2:=crossprod(grad(D2[1],[x2,y2,z2]),grad(D2[2],[x2,y2,z2]));

[Maple Math]

> eqns2:=[op(D1),op(D2),dotprod(M1,[x-x1,y-y1,z-z1],orthogonal),dotprod(M2,[x-x2,y-y2,z-z2],orthogonal),(x-x1)^2+(y-y1)^2+(z-z1)^2-(x-x2)^2-(y-y2)^2-(z-z2)^2];

[Maple Math]
[Maple Math]

> G2:=gbasis(eqns2,plex(x1,y1,z1,x2,y2,z2,x,y,z));

[Maple Math]
[Maple Math]

> Intersectiongen:=[G1[1],G2[1]];

[Maple Math]

> GI:=gbasis(Intersectiongen,plex(x,y,z));

[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]

> GI[1];

[Maple Math]
[Maple Math]

> with(algcurves);

[Maple Math]

> evalf(singularities(GI[1],y,z));

[Maple Math]

> genus(GI[1],y,z);

[Maple Math]

>

> with(plots):

> implicitplot(GI[1],y=-50..50,z=-50..50,grid=[100,100]);

So the intersection of the bisector surfaces is a smooth quartic of genus 1 in P^3

Want to find a singular intersection case where the lines are in more "generic" position.

> g:='g';

> E1:=[x1-1,y1]; E2:= [a*x2+b*y2+c*z2+d,e*x2+f*y2+g*z2+h];

[Maple Math]

[Maple Math]

>

> Norm1:=crossprod(grad(E1[1],[x1,y1,z1]),grad(E1[2],[x1,y1,z1]));

[Maple Math]

> Norm2:=crossprod(grad(E2[1],[x2,y2,z2]),grad(E2[2],[x2,y2,z2]));

[Maple Math]

> eqns3:=[op(E1),op(E2),dotprod(Norm1,[x-x1,y-y1,z-z1],orthogonal),dotprod(Norm2,[x-x2,y-y2,z-z2],orthogonal),(x-x1)^2+(y-y1)^2+(z-z1)^2-(x-x2)^2-(y-y2)^2-(z-z2)^2];

[Maple Math]
[Maple Math]
[Maple Math]

> G3:=gbasis(eqns3,plex(x1,y1,z1,x2,y2,z2,x,y,z)):

> collect(G3[1],[x,y,z]);

[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]

Collecting the coefficients:

> G31F:=(b*g-c*f)^2*x^2-2*(a*g-c*e)*(b*g-c*f)*x*y+2*(b*g-c*f)*(a*f-b*e)*x*z + (a*g-e*c)^2*y^2-2*(a*f-b*e)*(a*g-c*e)*y*z-((b*g-c*f)^2+(a*g-e*c)^2)*z^2-2*((a*f-b*e)^2+(a*g-c*e)^2 + (b*g-c*f)^2)*x-(a*h-e*d)^2-(b*f-d*h)^2-(c*h-d*g)^2+(a*f-b*e)^2+(b*g-c*f)^2+(a*g-c*e)^2+(b*f-d*h)^2-(b*h-d*f)^2-2*((a*g-c*e)*(d*g-c*h)+(a*f-b*e)*(d*f-b*h))*x-2*((a*f-b*e)*(a*h-d*e)+(c*f-b*g)*(c*h-d*g))*y-2*((a*g-c*e)*(a*h-d*e)+(c*f-b*g)*(d*f-b*h))*z;

[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]

> expand(G31F-G3[1]);

[Maple Math]

Write coefficients of G3[1] in terms of the Plucker coordinates of the general line

> G31FD:=subs({a*g-e*c=Delta[13],b*g-c*f=Delta[23],a*f-b*e=Delta[12],a*h-e*d=Delta[14],b*h-d*f=Delta[24],c*h-d*g=Delta[34],d*g-c*h=-Delta[34],d*f-b*h=-Delta[24],-b*g+c*f=-Delta[23]},G31F);

[Maple Math]
[Maple Math]
[Maple Math]

> eqsFD:=[subs({x=1,y=1/2,z=0},G31FD),subs({x=1,y=1/2,z=0},diff(G31FD,x)),subs({x=1,y=1/2,z=0},diff(G31FD,z))];

[Maple Math]
[Maple Math]

> Plucker:=Delta[12]*Delta[34]-Delta[13]*Delta[24]+Delta[14]*Delta[23];

[Maple Math]

> expand(subs({Delta[13]=a*g-c*e,Delta[23]=b*g-c*f,Delta[12]=a*f-b*e,Delta[14]=a*h-d*e,Delta[24]=b*h-d*f,Delta[34]=c*h-d*g},Plucker));

[Maple Math]

> GDelta:=gbasis([op(eqsFD),Plucker],plex(Delta[34],Delta[24],Delta[14],Delta[23],Delta[13],Delta[12]));

[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]

First equation here says: over R we must have [Maple Math] = 0 since [Maple Math]

> subs(Delta[13]=0,GDelta);

[Maple Math]
[Maple Math]
[Maple Math]

Use original equations rather than the Groebner basis:

> subs(Delta[13]=0,[op(eqsFD),Plucker]);

[Maple Math]
[Maple Math]

From equations 2 and 3 here, [Maple Math] or [Maple Math] , and [Maple Math] or [Maple Math]

CASE A: If [Maple Math]

> caseA:=subs({Delta[13]=0,Delta[24]=Delta[12]},[op(eqsFD),Plucker]);

[Maple Math]

> GA:=gbasis(caseA,plex(Delta[12],Delta[23],Delta[14],Delta[34]));

[Maple Math]

Factoring the first equation:

> expand((Delta[14]^2+Delta[34]^2)*(Delta[23]-Delta[34]));

[Maple Math]

This says that [Maple Math] (or, since everything is real, [Maple Math] = 0)

> subs(Delta[34]=Delta[23],GA);

[Maple Math]

[Maple Math] <> 0 implies [Maple Math]

> Dsubs:={Delta[13]=0,Delta[24]=Delta[12],Delta[34]=Delta[23],Delta[14]=-Delta[12]};

[Maple Math]

> G31FDs:=subs(Dsubs,G31FD);

[Maple Math]

> GInt:=[G1[1],G31FDs];

[Maple Math]
[Maple Math]

> GBInt:=gbasis(GInt,plex(x,y,z));

[Maple Math]
[Maple Math]

> expand(GBInt[1]/Delta[23]^2)/(-4);

[Maple Math]

Let [Maple Math] . Then this has the form [Maple Math] which factors

as: [Maple Math] so the curve

is the union of two parabolas.

The other case:

> Dsubs2:={Delta[13]=0,Delta[14]=0,Delta[34]=0,Delta[24]=Delta[12]};

[Maple Math]

> subs(Dsubs2,[op(eqsFD),Plucker]);

[Maple Math]

> Int2:=[G1[1],subs(Dsubs2,G31FD)];

[Maple Math]

> GInt2:=gbasis(Int2,plex(x,y,z));

[Maple Math]
[Maple Math]

>

Same as previous.

CASE B: If [Maple Math] and [Maple Math] , the following shows we get no real solutions at all unless the lines are identical: [Maple Math]

> subs({Delta[13]=0,Delta[12]=0,Delta[23]=0},[op(eqsFD),Plucker]);

[Maple Math]

CASE C: If [Maple Math] and [Maple Math]

> subs({Delta[13]=0,Delta[12]=0,Delta[24]=0},[op(eqsFD),Plucker]);

[Maple Math]

So either [Maple Math] or [Maple Math] . The second case takes us back to situation of B, and no real solutions. The first

case says either [Maple Math] or [Maple Math] . Either case says the lines are identical.

> subs({Delta[13]=0,Delta[12]=0,Delta[24]=0,Delta[34]=0,Delta[14]=0},[op(eqsFD),Plucker]);

[Maple Math]

CASE D: If [Maple Math] and [Maple Math]

> subs({Delta[13]=0,Delta[24]=Delta[12],Delta[23]=0},[op(eqsFD),Plucker]);

[Maple Math]

This is similar to the previous case C.

An example:

> teqs:=[subs({x=1,y=1/2,z=0},G3[1]),subs({x=1,y=1/2,z=0},diff(G3[1],x)),subs({x=1,y=1/2,z=0},diff(G3[1],z))];

[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]

> subvals:={b=-2,c=1,d=3,

> f=1,g=2,h=1};

[Maple Math]

> teqss:=subs(subvals,teqs);

[Maple Math]

> Gt:=gbasis(teqss,plex(a,e));

[Maple Math]

> fsolve(Gt[1],e,complex);

[Maple Math]

> subs(e=-2,Gt);

[Maple Math]

So a = -1, and [Maple Math] as in CASE A (!)

> teqcheck:=subs({op(subvals),e=-2,a=-1},teqs);

[Maple Math]

> E2s:=subs({op(subvals),e=-2,a=-1},E2);

[Maple Math]

> Norm1:=crossprod(grad(E1[1],[x1,y1,z1]),grad(E1[2],[x1,y1,z1]));

[Maple Math]

> Norm2:=crossprod(grad(E2s[1],[x2,y2,z2]),grad(E2s[2],[x2,y2,z2]));

[Maple Math]

> eqns3:=[op(E1),op(E2s),dotprod(Norm1,[x-x1,y-y1,z-z1],orthogonal),dotprod(Norm2,[x-x2,y-y2,z-z2],orthogonal),(x-x1)^2+(y-y1)^2+(z-z1)^2-(x-x2)^2-(y-y2)^2-(z-z2)^2];

[Maple Math]
[Maple Math]

> G3:=gbasis(eqns3,plex(x1,y1,z1,x2,y2,z2,x,y,z));

[Maple Math]

> Intersection13:=[G1[1],G3[1]];

[Maple Math]

> GI:=gbasis(Intersection13,plex(x,y,z));

[Maple Math]

> with(algcurves):

> singularities(GI[1],y,z);

[Maple Math]

> genus(GI[1],y,z);

[Maple Math]

> implicitplot(GI[1],y=-10..10,z=-10..10,grid=[100,100]);

> with(plots):

> SP1:=implicitplot3d(G1[1],x=-5..5,y=-5..5,z=-5..5,grid=[30,30,30],style=PATCHNOGRID):

> SP2:=implicitplot3d(G3[1],x=-5..5,y=-5..5,z=-5..5,grid=[30,30,30]):

> display({SP1,SP2},axes=BOXED);

>