a*x^2 + b*x*y + c*y^2 + d*x + e*y + f = 0 ,con almeno uno tra a, b e c diverso da 0,
nel piano x,y è una conica: vedi.  Posto  Q = b^2-4*a*c,
se Q = 0 è una parabola, se Q > 0 un'iperbole, se Q < 0 un'ellisse

Data una conica descritta in forma polinomiale, tracciabile facilmente con R, posso
studiarne le proprietà con WolframAlpha. Esempio:
4/3*x^2+y^2+x*y/2-7*x-8*y-32 = 0

Vediamo come tracciarla a partire dalla equazione inziale
[ dopo aver azionato  source("http://macosa.dima.unige.it/r.R")  ]

F = function(x,y) 4/3*x^2+y^2+x*y/2-7*x-8*y-32
PIANO(-30,30, -30,30); curva(F, "blue")
            
PIANO(-10,10, -5,15); curva(F, "blue")        # ho cambiato la scala

Nella figura a destra ho tracciato anche un punto della curva, in cui y=10. Per far ciò
ho risolto l'equazione F(x,y)=0 per y=10 (vedi il punto 22 della parte 3 della guida).

h <- function(x) F(x,10); q=soluz(h,0, 2,5); q; PUNTO(q,10, "red")
# [1] 3.842329

È un'ellisse. E infatti (1/2)^2-4*4/3*1 = -5.083333 < 0

Per studiarla, metto  4/3*x^2+y^2+x*y/2-7*x-8*y-32 = 0  in WolframAlpha.
Clicco [Properties]
Ho l'elenco delle proprietà. Per usare meglio questo elenco vado col mouse sotto il
riquadro di esse e clicco [A Plaintext] in modo da copiare meglio i valori:

ellipse
foci | (4.32758, -0.902184) | (-0.393151, 7.91858)
vertices | (5.65532, -3.38309) | (-1.72089, 10.3995)
center | (1.96721, 3.5082)
semimajor axis length | 7.81613
semiminor axis length | 6.00576
area | 147.472
perimeter | 43.6092
focal parameter | 7.21054
eccentricity | 0.639994

         

Quando l'eccentricità è 0 l'ellisse è un cerchio, quando è 1 si riduce ad un segmento.
[il parametro focale dell'ellisse, parametro poco usato, è, riferendosi alla figura,
 QC^2/√(VC^2-QC^2) ]

Vediamo come tracciarla usando (invece dell'eq.) queste informazioni di WolframAlpha.
Ci sono vari modi di procedere. Il più semplice (con R) è il seguente.

Metto in A e B i fuochi, in V uno dei vertici e in S la somma delle distanze di V dai
fuochi, che (come sappiamo) è uguale alla somma delle distanze di un qualunque punto P
dell'ellisse dai fuochi:

A=c(4.32758, -0.902184); B=c(-0.393151, 7.91858); V=c(5.65532, -3.38309)
S = punto_punto(A[1],A[2], V[1],V[2]) + punto_punto(B[1],B[2], V[1],V[2])
G = function(x,y) punto_punto(A[1],A[2], x,y) + punto_punto(B[1],B[2], x,y) - S
PIANO(-10,10, -5,15)
curva(G, "red"); PUNTO(A[1],A[2], "blue"); PUNTO(B[1],B[2], "blue")
PUNTO(V[1],V[2], "seagreen")

                    

Volendo, WolframAlpha mi indica anche gli estremi laterali dell'ellisse:
Real solutions:
x = 24/61*(5 - sqrt(269)); y = 1/4*(16 - 24/61*(5 - sqrt(269)))
x = 24/61*(5 + sqrt(269)); y = 1/4*(16 - 24/61*(5 + sqrt(269)))
Potevo dunque anche procedere con uno di questi punti al posto di V:

P = c( 24/61*(5 - sqrt(269)), 1/4*(16 - 24/61*(5 - sqrt(269))) )
S = punto_punto(A[1],A[2], P[1],P[2]) + punto_punto(B[1],B[2], P[1],P[2])
G = function(x,y) punto_punto(A[1],A[2], x,y) + punto_punto(B[1],B[2], x,y) - S
PIANO(-10,10, -5,15)
curva(G, "red"); PUNTO(A[1],A[2], "blue"); PUNTO(B[1],B[2], "blue")
PUNTO(P[1],P[2], "seagreen")

                    

Ho tracciato anche i segmenti che congiungono i fuochi con P:
linea(A[1],A[2],P[1],P[2],"seagreen");linea(B[1],B[2],P[1],P[2],"seagreen")

Vediamo un altro modo (sempre usando le informazioni di WolframAlpha):
scalo un cerchio centrato nell'origine tenendo conto del rapporto tra i semiassi, lo
traslo tenendo conto del centro e lo ruoto tenendo conto delle coordinate dei fuochi.

PIANO(-10,10, -5,15)
C = c(1.96721, 3.5082); R = 7.81613
PUNTO(C[1],C[2], "green")
# il cerchio centrato nell'origine con raggio = semiasse maggiore
K = function(x,y) x^2+y^2-R^2
# lo schiaccio in modo da dargli la forma dell'ellisse
# (il colore -1 non traccia la curva, che copio in U)
rap = 6.00576/7.81613
moltra(K, 1,rap, 0,0, -1); U = ZZZ
# lo ruoto e traslo portando O in C, e lo visualizzo
D=c(0,A[2])
rottra(U, angolo(D,A,B),C[1],C[2],"seagreen")

                       

---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------

Vediamo un altro esempio:
4/3*x^2-y^2+x*y/2-7*x-8*y-32 = 0

F = function(x,y) 4/3*x^2-y^2+x*y/2-7*x-8*y-32
PIANO(-20,20, -20,20); curva(F, "blue")

  

Ottengo il grafico sopra a sinsitra. È un'iperbole. E infatti (1/2)^2+4*4/3*1 > 0

Come prima la studio con WolframAlpha:

hyperbola
foci | (-3.95779, -3.95486) | (10.4056, -2.4332)
vertices | (-1.48632, -3.69303) | (7.93408, -2.69503)
center | (3.22388, -3.19403)
semimajor axis length | 4.73655
semiminor axis length | 5.45163
focal parameter | 4.11533
eccentricity | 1.52471
asymptotes | y = 1.43145 x - 7.80887 | y = -0.931454 x - 0.191134

[il parametro focale dell'iperbole, parametro poco usato, è, riferendosi alla
 figura:   KV^2/√(KV^2+CV^2)= 5.45163^2/√(4.73655^2+5.45163^2) ]

Ecco come tracciare gli asintoti:

as1 = function(x) 1.43145*x-7.80887; as2 = function(x) -0.931454*x-0.191134
grafi(as1, -20,20, "red"); grafi(as2, -20,20, "red")
C = c(3.22388, -3.19403)
PUNTO(C[1],C[2], "seagreen")

Volendo posso trovare l'angolo formato dagli asintoti, usando il comando
inclinazione2 (vedi punto 16 della parte 2 della guida), che alla pendenza
associa l'inclinazione:

inclinazione2(1.43145)
# [1] 55.06215   l'inclinazione di un asintoto
inclinazione2(-0.931454)
# [1] -42.96746   l'inclinazione dell'altro
inclinazione2(1.43145)-inclinazione2(-0.931454)
# [1] 98.02961  un angolo in ° formato dai due asinoti (quello che contiene
#                   i due rami di curva); l'altro è 180° meno questo valore

Le iperboli hanno la caratteristica di avere la differenza delle distanze dei loro
punti dai fuochi costante (in valore assoluto). Verifichiamo la cosa in due punti:

         
# i fuochi:
A=c(-3.95779, -3.95486); B=c(10.4056, -2.4332)
PUNTO(A[1],A[2], "seagreen"); PUNTO(B[1],B[2], "seagreen")
u=8; h <- function(x) F(x,u); q=soluz(h,0, 10,13); q; PUNTO(q,u, "red")
# [1] 12.13707   la x del punto P con y=8 a destra
PUNTO(A[1],A[2], "seagreen"); PUNTO(B[1],B[2], "seagreen")
linea(A[1],A[2],q,u, "seagreen"); linea(B[1],B[2],q,u, "seagreen")
punto_punto(A[1],A[2],q,u)-punto_punto(B[1],B[2],q,u)
# [1] 9.473119 la differenza tra AP e BP
u=-10; h <- function(x) F(x,u); q=soluz(h,0, -5,-2.5); q; PUNTO(q,u, "red")
# [1] -3.197402   la x del punto P con y=10 a sinistra
linea(A[1],A[2],q,u, "magenta"); linea(B[1],B[2],q,u, "magenta")
punto_punto(A[1],A[2],q,u)-punto_punto(B[1],B[2],q,u)
# [1] -9.473119 la differenza tra AP e BP

A destra la curva tracciata come luogo dei punti le cui distanze dai fuochi hanno
differenza che in valore assoluto vale 9.473119:

K = function(x,y) abs(punto_punto(x,y,A[1],A[2])-punto_punto(x,y,B[1],B[2]))-9.473119
PIANO(-10,15, -15,10); curva(K, "magenta")

---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------

H = function(x,y) x^2+y^2-2*x*y+4*x+4
PIANO(-3,0.2, -3,0.2)
curva(H, "blue")

       

È una parabola. E infatti (-2)^2-4*1*1 = 0

Con WolframAlpha abbiamo:

parabola
focus | (-3/2, -1/2) = (-1.5, -1/2)
vertex | (-5/4, -1/4) = (-1.25, -1/4)
semi-axis length | 1/(2*sqrt(2)) = 0.353553  [ FV nella figura = 
                                              (distanza tra F e la direttrice)/2 [
focal parameter | 1/sqrt(2) = 0.707107
eccentricity | 1
directrix | y = -x - 1

[il parametro focale dell'iperbole, parametro poco usato, è, riferendosi alla
 figura:   2*semiasse  ]

Le parabole hanno la caratteristica di avere la le distanze dei loro punti dal fuoco
e dalla direttrice eguali. Verifichiamo la cosa (ottenendo il grafico sotto a sinistra).

    

PIANO(-3,0, -3,0); curva(H, "brown")
V = c(-5/4, -1/4); F = c(-3/2,-1/2)
f = function(x) -x-1
PUNTO(F[1],F[2], "red"); grafi(f, -3,0, "red")
# prendo un punto della parabola, ad es. quello (a destra) di ordinata -2
u=-2; h <- function(x) H(x,u); q=soluz(h,0, -2,-1.1); q; PUNTO(q,u, "red")
# [1] -1.171573   # la x del punto con y = -2
# dove la prependicolare punto_retta interseca la retta
punto_retta2(q,u, -1,0,0,-1)
# [1] -0.08578644 -0.91421356
segm(q,u, -0.08578644, -0.91421356, "green")
segm(q,u, F[1],F[2], "green")
# I valori delle distanze:
punto_punto(q,u, F[1],F[2])
# [1] 1.535534
punto_retta(q,u, -1,0,0,-1)
# [1] 1.535534
# OK

Posso controllare la cosa tracciando direttamente la parabola usando questa
caratteristica:

W = function(x,y) punto_punto(x,y,F[1],F[2])-punto_retta(x,y, -1,0,0,-1)
curva(W, "blue")

Ho ottenuto la figura blu soprastante a destra. OK.