Saltar al contenido

¿Cómo encontrar el centro de una elipse?

Ya no busques más por otros sitios ya que has llegado al lugar correcto, tenemos la solución que quieres hallar pero sin liarte.

Solución:

Supongamos que los puntos son $ P_1 (x_1, y_1) $ y $ P_2 (x_2, y_2) $, que se asume que se encuentran en una elipse de semiejes $ a $ y $ b $ con el eje $ a $ que forma el ángulo $ alpha $ con el eje $ x $.

Elipse

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)). $$

Luego los reescalamos en $ (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) . $$

Circulo

Estas operaciones convierten la elipse en un círculo unitario y los puntos forman una cuerda de ese círculo. Traduzcamos ahora el punto medio del acorde 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 uno de longitud $ c $. La mitad de la longitud de ese acorde es

$$ c = || (R_1 – R_2) || / 2 = || S_1 || = || S_2 ||, $$

que por supuesto se encuentra entre $ 0 $ y $ 1 $ inclusive. Colocar

$$ s = sqrt 1-c ^ 2. $$

El origen del círculo se encuentra rotando cualquiera de los $ 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 $. (La 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 escalarlo en $ s / c $ hará que coincida con el centro del círculo. Reflejar el centro alrededor de $ M $ (lo que da $ 2M $) produce la otra solución posible.

Desenrollar todo esto requiere que hagamos lo siguiente con $ O_i $:

  • Traducir por $ (R_1 + R_2) / 2 $,
  • Escale por $ (a, b) $, y
  • Rotar por $ alpha $.

Los casos $ c gt 1 $, $ c = 1 $ y $ c = 0 $ deben tratarse especialmente. El primero no da ninguna solución, el segundo una solución única y el tercero infinitas.

FWIW, aquí hay un Mathematica 7 función. Los argumentos p1 y p2 son listas de números de longitud 2 (es decir, coordenadas de puntos) y los otros argumentos son números. Devuelve una lista de los posibles centros (o Nulo 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
   ];

Puede hacer su vida mucho más fácil rotando los dos puntos dados a través de $ – alpha $ en lugar de rotar el sistema de coordenadas a través de $ alpha $. Entonces puedes trabajar con la ecuación mucho más simple

$$ frac (x-x_0) ^ 2 a ^ 2 + frac (y-y_0) ^ 2 b ^ 2 = 1 ;. $$

Si sustituye sus dos puntos (rotados) $ (x_1, y_1) $ y $ (x_2, y_2) $, obtendrá dos ecuaciones para las dos incógnitas $ x_0 $, $ y_0 $. Restar estos unos de otros elimina los términos cuadráticos en las incógnitas y produce la relación lineal

$$ frac x_1 ^ 2-x_2 ^ 2-2 (x_1-x_2) x_0 a ^ 2 + frac y_1 ^ 2-y_2 ^ 2-2 (y_1-y_2) y_0 b ^ 2 = 0 ;. $$

Puede resolver esto para una de las incógnitas y sustituir el resultado en una de las dos ecuaciones cuadráticas, que luego se convierte en una ecuación cuadrática en la otra incógnita que puede resolver.

Por supuesto, al final tienes que rotar el centro que encuentres de nuevo al sistema de coordenadas original.

Dado que la expresión en el comentario de whuber era demasiado larga, aquí está la expresión de la coordenada x:

$$ begin align * & frac1 2ab left (ab (x_1 + x_2) + left (a ^ 2 (y_2-y_1) cos ^ 2 alpha + (ab) (a + b) ( x_1-x_2) cos , alpha sin , alpha + b ^ 2 (y_2-y_1) sin ^ 2 alpha right) right. \ & left. surd left ( left (b ^ 2 left ((x_1-x_2) ^ 2 + (y_1-y_2) ^ 2 right) + a ^ 2 left (-8 b ^ 2 + (x_1-x_2) ^ 2 + (y_1-y_2) ) ^ 2 right) + right. Right. Right. \ & left. Left. Left. (Ab) (a + b) (- (x_1-x_2 + y_1-y_2) (x_1- x_2-y_1 + y_2) cos , 2 alpha-2 (x_1-x_2) (y_1-y_2) sin , 2 alpha) right) / right. right. \ & left. izquierda. left (- left (a ^ 2 + b ^ 2 right) left ((x_1-x_2) ^ 2 + (y_1-y_2) ^ 2 right) + (ab) (a + b) ( (x_1-x_2 + y_1-y_2) (x_1-x_2-y_1 + y_2) cos , 2 alpha + right. right. right. \ & left. left. left.2 (x_1- x_2) (y_1-y_2) sin , 2 alpha) right) right) right) end align * $$

Recuerda que puedes comunicar esta crónica si lograste el éxito.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *