Quartique de Plücker :

Définitions et équations :

eq=(x^2-2^2)^2+(y^2-2^2)^2

courbe=ContourPlot[eq==7,{x,-3,3},{y,-3,3},ContourStyle->{Thickness[.01],Red}]

La courbe passe par le point (a, b) ou (c, d) :

eqab=eq/.{x->a,y->b}

eqcd=eq/.{x->c,y->d}

Dérivées partielles :

p=D[eq,x]

q=D[eq,y]

Equation des tangentes en (a, b) et en (c, d) :

tan1=Collect[(X-a) (p/.x->a)+(Y-b) (q/.y->b),{X,Y}]

tan2=Collect[(X-c) (p/.x->c)+(Y-d) (q/.y->d),{X,Y}]

Equations à vérifier :

eqns={-4 (a^2) (-4+(a^2))-4 (b^2) (-4+(b^2))==l (-4 (c^2) (-4+(c^2))-4 (d^2) (-4+(d^2))),4 a (-4+(a^2))==l(4 c (-4+(c^2))),4 b (-4+(b^2))==l(4 d (-4+(d^2))),eqab==7,eqcd==7,a≠c||b≠d}

Résolution :

sols1=Solve[eqns,{a,b,c,d,l}]

Length[sols1]

On récupère les solutions réelles :

sols2=Select[sols1,(#[[1,2]]∈Reals && #[[2,2]]∈Reals&& #[[3,2]]∈Reals &&#[[4,2]]∈Reals && #[[5,2]]∈Reals)&]

Length[sols2]

Il y a donc 80 solutions réelles :

sols3=N[sols2,16]

Test des points avec tracé de la tangente :

u=sols3[[55]];
pts1={{a,b},{c,d}}/.u;gp1=ListPlot[pts1,PlotStyle->{Red,PointSize[.025]}];
gtan1=ContourPlot[(tan1/.u)== 0,{X,-3,3},{Y,-3,3},ContourStyle->Green];
Show[courbe,gp1,gtan1]

Toutes les tangentes :

tantout=Table[((tan1/.sols3[[i]])//Chop)==0,{i,1,80}];
Table[{i,((tan1/.sols3[[i]])//Chop)==0},{i,1,80}]//ColumnForm

On constate que les solutions définissent par deux ou par quatre la même tangente...
1=5, 2=6, 3=7, 4=8,  9=10, 11=12, 21=22, 23=24 : 8 bitangentes définies par les deux points
13=14=19=20, 15=16=17=18,  25=26=31=32, 27=28=29=30, 33=35=42=44, 34=36=41=43,  37=39=46=48, 38=40=45=47, 49=50=67=68 (subtil à voir...),  51=52=65=66, 53=54=71=72, 55=56=69=70, 57=59=73=75 (subtil...), 58=60=74=76, 61=63=77=79, .62=64=78=80 : 16 bitangentes doubles définies par deux points de manière double ??...

Les bitangentes “doubles”  (??)  sont donc données par :13, 15, 25, 27, 33, 34, 37, 38, 49, 51, 53, 55, 57, 58, 61 et 62.

Au total 8+16=24 bitangentes... dont 16 paraissent doubles...  Problème pour retrouver 28 bitangentes... !!!

gtantout=ContourPlot[tantout//Evaluate,{X,-3,3},{Y,-3,3},ContourStyle->Green]

Show[courbe,gtantout]

Bitangentes "doubles" :

gtandoubles=ContourPlot[Table[((tan1/.sols3[[i]])//Chop)==0,{i,{13,15,25,27,33,34,37,38,49,51,53,55,57,58,61,62}}]//Evaluate,{X,-3,3},{Y,-3,3},ContourStyle->Green]

Show[courbe,gtandoubles]

Bitangentes simples :

gtansimples=ContourPlot[Table[((tan1/.sols3[[i]])//Chop)==0,{i,{1,2,3,4,9,11,21,23}}]//Evaluate,{X,-3,3},{Y,-3,3},ContourStyle->Green]

Show[courbe,gtansimples]