Construcción de una elipse conocido
un foco F y un extremo D_1 y D_2 
de cada uno de dos diámetros conjugados

F = (10.667322189685756, 11.199392610013724)
D_1 = (10.101615658943789, -1.0558298056490116)
D_2 = (13.669896637567662, 12.777444195429512)
M_1 = Midpoint(F, D_1)
M_2 = Midpoint(F, D_2)
M = Midpoint(D_1, D_2)
c = Hyperbola(M_1, M_2, F)
F' = Mirror(F, M)
a = Tangent(F, c)
δ = Line(F', a)
d = Line(F, D_1)
e = Line(F, D_2)
X_1 = Intersect(δ, d)
X_2 = Intersect(e, δ)
f = Polar(X_1, c)
g = Polar(X_2, c)
X'_1 = Intersect(f, δ)
X'_2 = Intersect(δ, g)
O_2, O_1 = PuntosDoblesInvolucion(δ, X_1, X'_1, X_2, X'_2)
F_1 = Mirror(F, O_1)
h = Ellipse(F, F_1, D_1)
F_2 = Mirror(F, O_2)
k = Ellipse(F, F_2, D_1)
i = Segment(O_2, D_2)
j = Segment(O_2, D_1)
l = Segment(O_1, D_1)
m = Segment(O_1, D_2)

Tool: Puntos Dobles Involucion (command PuntosDoblesInvolucion)
Dar pares de puntos conjugados sobre una recta
Input: l, A, A', B, B'
Output: G, H

$\ell$

A = Point(l)
A' = Point(l)
B = Point(l)
B' = Point(l)
C = Midpoint(A, A')
c = Circle(C, A)
a = OrthogonalLine(C, l)
D = Intersect(c, a, 2.0)
e = Line(D, B)
f = Line(D, B')
g = OrthogonalLine(C, e)
h = OrthogonalLine(C, f)
D' = Mirror(D, h)
D'_1 = Mirror(D, g)
i = Line(A, D')
j = Line(A', D'_1)
X = Intersect(i, j)
k = Line(A, D'_1)
m = Line(A', D')
Y = Intersect(m, k)
n = Line(X, Y)
E, F = Intersect(c, n)
p = Line(D, F)
q = Line(E, D)
G = Intersect(l, q)
H = Intersect(l, p)