Que los puntos sean $P_1(x_1, y_1)$ y $P_2(x_2, y_2)$ se supone que se encuentra en una elipse de semiejes $a$ y $b$ con el $a$ eje que hace el ángulo $\alpha$ a la $x$ eje.
Siguiendo a @joriki, rotamos los puntos $P_i$ por $-\alpha$ en puntos
$$Q_i(x_i \cos(\alpha) + y_i \sin(\alpha), y_i \cos(\alpha) - x_i \sin(\alpha)).$$
A continuación, los reescalamos mediante $(1/a, 1/b)$ a los puntos
$$R_i(\frac{x_i \cos(\alpha) + y_i \sin(\alpha)}{a}, \frac{y_i \cos(\alpha) - x_i \sin(\alpha)}{b}).$$
Estas operaciones convierten la elipse en una circunferencia unitaria y los puntos forman una cuerda de dicha circunferencia. Traslademos ahora el punto medio de la cuerda al origen: esto se hace restando $(R_1 + R_2)/2$ (mostrado como $M$ en la figura) de cada uno de $R_i$ , dando puntos
$$S_1 = (R_1 - R_2)/2, \quad S_2 = (R_2 - R_1)/2 = -S_1$$
cada una de ellas con una longitud $c$ . La mitad de la longitud de esa cuerda es
$$c = ||S_1||/2,$$
que, por supuesto, se encuentra entre $0$ y $1$ incluso. Establecer
$$s = \sqrt{1-c^2}.$$
El origen del círculo se encuentra girando cualquiera de las $S_i$ en 90 grados (en cualquier dirección) y reescalando en $s/c$ , dando hasta dos soluciones válidas $O_1$ y $O_2$ . (Rotación de un punto $(u,v)$ en 90 grados lo envía a $(-v,u)$ o $(v,-u)$ .) Por ejemplo, en la figura anterior es evidente que la rotación $R_1$ en -90 grados alrededor de $M$ y escalando por $s/c$ lo hará coincidir con el centro del círculo. Reflejando el centro sobre $M$ (que da $2M$ ) produce la otra solución posible.
Desenvolver todo esto requiere que hagamos lo siguiente a la $O_i$ :
- Traducir por $(R_1+R_2)/2$ ,
- Escala por $(a,b)$ y
- Girar por $\alpha$ .
Los casos $c \gt 1$ , $c = 1$ y $c=0$ tienen que ser tratados especialmente. La primera no da ninguna solución, la segunda una solución única, y la tercera infinitas.
Por cierto, aquí hay un Mathematica 7 función. Los argumentos p1 y p2 son listas de números de longitud 2 ( es decir coordenadas del punto) y los otros argumentos son números. Devuelve una lista de los posibles centros (o Null si hay infinitos).
f[\[Alpha]_, a_, b_, p1_, p2_] := Module[
{
r, s, q1, q2, m, t, \[Gamma], u, r1, r2, x, v
},
(* Rotate to align the major axis with the x-axis. *)
r = RotationTransform[-\[Alpha]];
(* Rescale the ellipse to a unit circle. *)
s = ScalingTransform[{1/a, 1/b}];
{q1, q2} = s[r[#]] & /@ {p1, p2};
(* Compute the half-length of the chord. *)
\[Gamma] = Norm[q2 - q1]/2;
(* Take care of special cases. *)
If[\[Gamma] > 1, Return[{}]];
If[\[Gamma] == 0, Return[Null]];
If[\[Gamma] == 1,
Return[{InverseFunction[Composition[s, r]][(q1 + q2)/2]}]];
(* Place the origin between the two points. *)
t = TranslationTransform[-(q1 + q2)/2];
(* This ends the transformations.
The next steps find the centers. *)
(* Rotate the points 90 degrees. *)
u = RotationTransform [\[Pi]/2];
(* Rescale to obtain the possible centers. *)
v = ScalingTransform[{1, 1} Sqrt[1 - \[Gamma]^2]/\[Gamma]];
x = v[u[t[#]]] & /@ {q1, q2};
(* Back-transform the solutions. *)
InverseFunction[Composition[t, s, r]] /@ x
];