13 votos

Elipse más redondeada con tangentes especificadas

Supongamos que nos dan dos puntos $\mathbf p_1$ y $\mathbf p_2$ en el plano con vectores asociados $\mathbf v_1$ y $\mathbf v_2$ . Quieres encontrar una elipse que pase por $\mathbf p_1$ tangente a $\mathbf v_1$ y a través de $\mathbf p_2$ tangente a $\mathbf v_2$ . Hay infinitas soluciones ,

pero una opción natural es tomar la que más se aproxime a un círculo, es decir, la que tenga la excentricidad mínima. ¿Hay alguna forma elegante de calcular una elipse de este tipo dada $(\mathbf p_1, \mathbf v_1)$ y $(\mathbf p_2, \mathbf v_2)$ ?

6voto

Aretino Puntos 5384

He encontrado una manera de hacer esta construcción de forma puramente geométrica, sin coordenadas. Sea $A$ , $B$ son los puntos de tangencia dados (llamados $\mathbf p_1$ y $\mathbf p_2$ en la pregunta) y $AV$ , $BV$ las tangentes correspondientes (el caso en que las tangentes sean paralelas puede tratarse de forma más sencilla, véase más adelante).

Si $M$ es el punto medio de $AB$ por una conocida propiedad de la recta elíptica $VM$ es un diámetro, y somos libres de elegir en él un punto $D$ para construir la elipse que toca las tangentes dadas en $A$ , $B$ y pasando por $D$ . La construcción es bastante sencilla, porque la línea que pasa por $D$ en paralelo a $AB$ línea de encuentro $VA$ en $E$ es otra tangente: si $F$ es el punto medio de $AD$ se deduce que $EF$ también es un diámetro, y la intersección $C$ de $VM$ y $EF$ es, pues, el centro de la elipse (véase el diagrama). Con el centro y tres puntos, la elipse puede construirse fácilmente.

enter image description here

Pero, por supuesto, debemos elegir el punto $D$ tal que la excentricidad de la elipse sea mínima. Para ello, traza la línea $GC$ en paralelo a $AB$ y observe que las líneas $CD$ y $CG$ forman un par de diámetros conjugados. Las ecuaciones de Apolonio relacionan los semidiámetros $CD$ y $CG$ con semiejes estándar $a$ y $b$ de la elipse: $$ CD^2+CG^2=a^2+b^2,\quad CD\cdot CG\sin\theta = ab, $$ donde $\theta=\angle VMA$ . A partir de ahí no es difícil encontrar una expresión para la excentricidad $\epsilon$ en función de $t=CD/CG$ : $$ \epsilon^2={2\over1+1/\xi}, \quad\hbox{where}\quad \xi=\sqrt{1-\left({2t\over1+t^2}\right)^2\sin^2\theta}. $$ De ello se deduce que

t $\epsilon=\sqrt{2\over1+1/|\cos\theta|}$ , $CD=CG$ .

Para aprovechar esta condición, observe que $(AM/CG)^2+(CM/CD)^2=1$ y si $CD=CG$ equivale a $$ AM^2+CM^2=CD^2. $$ Jugando con triángulos similares también se encuentra $CD/MC=1+VM/MD$ combinando esas igualdades obtenemos finalmente $$ MD={AM^2+AM\sqrt{AM^2+VM^2}\over VM}. $$ A partir de ahí, se puede construir el punto $D$ y luego encontrar el centro $C$ como se ha explicado anteriormente.

Si las rectas tangentes son paralelas, $A$ y $B$ son los puntos extremos de un diámetro y centro $C$ es su punto medio. Basta con construir entonces el diámetro conjugado a través de $C$ paralela a las tangentes y toma en ella el punto $D$ tal que $CD=AC$ .

4voto

Aretino Puntos 5384

De momento puedo ofrecer una solución analítica, bastante engorrosa pero manejable. Espero que alguien pueda dar una solución más sencilla.

Para reducir el número de parámetros, podemos establecer un sistema de coordenadas tal que $\mathbf{p}_1=(\alpha,0)$ , $\mathbf{p}_2=(0,\beta)$ , $\mathbf{v}_1=(0,1)$ y definir entonces $m=v_{2y}/v_{2x}$ .

Empecemos con la ecuación genérica de una sección cónica, en la que podemos poner a $1$ el coeficiente de $x^2$ porque se trata de una elipse: $$ x^2+By^2+Cxy+Dx+Ey+F=0. $$

Tenemos cuatro condiciones: la cónica pasa por $\mathbf{p}_1$ , $\mathbf{p}_2$ y es tangente a $\mathbf{v}_1$ , $\mathbf{v}_2$ . Estas condiciones se traducen en cuatro ecuaciones: $$ \begin{align} \cases{ \alpha^2+\alpha D+F=0\\ \beta^2B+\beta E+F=0\\ 2m\beta B+\beta C+D+mE=0\\ \alpha C+E=0 } \end{align} $$ A partir de ahí, se pueden encontrar expresiones para $B$ , $C$ , $D$ , $E$ en función de $F$ . Conectándolos a la fórmulas para los semiejes $a$ y $b$ podemos entonces calcular la excentricidad $\epsilon=\sqrt{1-b^2/a^2}$ . Cuanto menor sea la excentricidad, más redonda será la elipse, por lo que debemos encontrar el mínimo de $\epsilon$ en función de $F$ .

Computé $d\epsilon/dF$ con Mathematica y descubrí que desaparece para $$ F=-\frac{\alpha ^2 \beta \left(\alpha ^2 \beta +\beta ^3-2 \alpha ^2 \beta m^2+2 \alpha ^3 m\right)}{\beta ^2 \left(\alpha ^2+\beta ^2\right)+2 m^2 \left(\alpha ^4+2 \alpha ^2 \beta ^2\right)+2 \alpha \beta m \left(\alpha ^2+2 \beta ^2\right)}. $$

Una vez $F$ se pueden calcular los demás coeficientes y hallar la ecuación de la elipse "más redonda": $$ \begin{align} \cases{ B=\frac{\displaystyle\alpha ^2 \left(\beta ^2+\alpha ^2 \left(2 m^2+1\right)+2 \alpha \beta m\right)}{\displaystyle\beta ^2\left(\alpha ^2+\beta ^2\right)+2 m^2 \left(\alpha ^4+2 \alpha ^2 \beta ^2\right)+2 \alpha \beta m \left(\alpha ^2+2 \beta ^2\right)}\\ \\ C=\frac{\displaystyle2 \alpha ^2 m \left(-\alpha ^2+\beta ^2+2 \alpha \beta m\right)}{\displaystyle\beta ^2 \left(\alpha ^2+\beta ^2\right)+2 m^2 \left(\alpha ^4+2 \alpha ^2 \beta ^2\right)+2 \alpha \beta m \left(\alpha ^2+2 \beta ^2\right)}\\ \\ D=-\frac{\displaystyle2 \alpha ^2 m \left(2 \beta ^3+m \left(\alpha ^3+3 \alpha \beta ^2\right)\right)}{\displaystyle\beta ^2 \left(\alpha ^2+\beta ^2\right)+2 m^2 \left(\alpha ^4+2 \alpha ^2 \beta ^2\right)+2 \alpha \beta m \left(\alpha ^2+2 \beta ^2\right)}\\ \\ E=-\frac{\displaystyle2 \alpha ^3 m \left(-\alpha ^2+\beta ^2+2 \alpha \beta m\right)}{\displaystyle\beta ^2 \left(\alpha ^2+\beta ^2\right)+2 m^2 \left(\alpha ^4+2 \alpha ^2 \beta ^2\right)+2 \alpha \beta m \left(\alpha ^2+2 \beta ^2\right)} } \end{align} $$

A comprobar con GeoGebra confirma que éste es efectivamente el valor de $F$ dando una excentricidad mínima.

EDITAR.

Siguiendo la sugerencia de Rahul, podemos obtener un resultado mucho más sencillo. Elige un sistema de coordenadas tal que $\mathbf{p}_1=(\alpha,0)$ , $\mathbf{p}_2=(-\alpha,0)$ , y definimos $m=v_{1y}/v_{1x}$ , $n=v_{2y}/v_{2x}$ .

Con esas opciones, la ecuación de la elipse se puede escribir como: $$ x^2+By^2-{m+n\over mn}xy+\alpha{m-n\over mn}y-\alpha^2=0. $$ La excentricidad $\epsilon$ es entonces función de $B$ y $d\epsilon/dB=0$ para $$ B=1+\frac{(m+n)^2}{2 m^2 n^2}. $$ En resumen, la ecuación de la elipse más redonda resulta ser: $$ x^2+\left(1+\frac{(m+n)^2}{2 m^2 n^2}\right)y^2-{m+n\over mn}xy+\alpha{m-n\over mn}y-\alpha^2=0. $$


Añadido por Rahul:

Las cosas se simplifican aún más si utilizamos la pendiente del normales , $\mu=-1/m$ y $\nu=-1/n$ : $$ x^2+\left(1+\tfrac12(\mu+\nu)^2\right)y^2+(\mu+\nu)xy+\alpha(\mu-\nu)y-\alpha^2=0. $$

0 votos

¡Vaya! Lo siento, esperaré a una respuesta que ofrezca una visión más geométrica. +1 sin embargo.

1 votos

Inspirado por tu respuesta, he intentado hacerlo yo mismo. Parece que la elección de un sistema de coordenadas tal que $\mathbf p_1=(-\alpha,0)$ y $\mathbf p_2=(\alpha,0)$ hace las cosas más limpias. En particular, la cuadrática se reduce a $x^2+By^2+Cxy+Ey-\alpha^2=0$ tras lo cual los vectores tangentes deben determinar $C$ y $E$ y dejar $B$ como único parámetro libre, aunque no lo he resuelto del todo. ¿Podrías introducirlo en tu código de Mathematica y ver qué sale?

0 votos

Tienes toda la razón: es mucho más sencillo con la opción que sugieres. Editaré mi respuesta en unos minutos.

4voto

theog Puntos 585

En una respuesta a una pregunta anterior no muy repetida achille hui ha dado una elegante solución sin coordenadas, que resumo a continuación.

Elija el origen en la intersección de las dos rectas tangentes deseadas, de modo que $\mathbf p_1$ y $\mathbf p_2$ se interpretan como vectores de la intersección a los dos puntos de entrada. Sea $\mathbf q_1,\mathbf q_2$ sea la base dual de $\mathbf p_1,\mathbf p_2$ Eso es, $\mathbf p_1\cdot \mathbf q_1 = \mathbf p_2\cdot \mathbf q_2 = 1$ y $\mathbf p_1\cdot \mathbf q_2 = \mathbf p_2\cdot \mathbf q_1 = 0$ . La ecuación de la elipse de excentricidad mínima es $$(\mathbf{q}_1\cdot \mathbf{x} - 1)^2 + (\mathbf{q}_2\cdot \mathbf{x} - 1)^2 + 2\alpha(\mathbf{q}_1\cdot \mathbf{x})(\mathbf{q}_2\cdot \mathbf{x}) = 1,$$ donde $$\alpha = \frac{2\mathbf{p}_1\cdot\mathbf{p}_2}{\|\mathbf{p}_1\|^2 + \|\mathbf{p}_2\|^2}.$$

Para la derivación, véase el post original .

1voto

bubba Puntos 16773

Elipses menos excéntricas para la interpolación geométrica de Hermite
John C. Femiani, Chia-Yuan Chuang, Anshuman Razdan
Diseño geométrico asistido por ordenador 29 (2012) 141-149

0voto

skef Puntos 1

Necesitaba implementar una solución a este problema y acabé frustrado con las respuestas existentes en StackExchange. No puedo decir si una respuesta dada es correcta o incorrecta; sólo que intenté reducir algunas de las respuestas más directas a la práctica y no pude conseguir que funcionaran.

Tuve más suerte con la combinación de (la ya mencionada) "Least eccentric ellipses for geometric Hermite interpolation" de Femiani, Chuang y Razdan (Computer Aided Geometric Design 29, 2012 pp. 141-9) y "Characteristics of conic segments in Bezier form" de Javier Sánchez-Reyes (Proceedings of the IMProVe 2011, pp. 231-4).

A continuación se muestra un script de Octave que hace uso de los cálculos de estos documentos. Calculo x1 y y1 del primer documento por medios diferentes (y a veces pueden tener signos diferentes), pero la equivalencia debería ser fácil de verificar. Los cálculos de números complejos del segundo artículo pueden implementarse fácilmente en C utilizando complex.h . Incluyo una versión alternativa de projPointOnLine() como referencia. Las líneas situadas debajo del ang cálculo presentar una figura con la elipse calculada.

pkg load symbolic geometry

function rp = ppol(l1, l2, p)
  if (l2(1) == l1(1))
    rp(1) = l2(1);
    rp(2) = p(2);
  else
    m = (l2(2) - l1(2)) / (l2(1) - l1(1));
    b = l1(2) - m * l1(1);
    rp(1) = (m * p(2) + p(1) - m * b) / (m * m + 1);
    rp(2) = (m * m * p(2) + m * p(1) + b) / (m * m + 1);
  endif
endfunction

# Points and slopes
p0 = [ -4, 3 ];
h0 = [ -.8, .3 ];
p2 = [ 2, -1 ];
h2 = [ 2.2, -3 ];

# "Least eccentric ellipses for geometric Hermite interpolation"
# Femiani, Chuang, and Razdan
# Computer Aided Geometric Design 29, 2012 pp. 141-9
# (x1 and y1 calculated by different means)
l0 = createLine([ p0, h0 ]);
l2 = createLine([ p2, h2 ]);
p1 = intersectLines(l0, l2)

l3 = createLine(p0, p2);
p1p = projPointOnLine(p1, l3);
# p1p = ppol(p0, p2, p1);
ph = (p0 + p2) / 2;
vn = vectorNorm(p2-p0);
x1 = 2 * vectorNorm(p1p-ph) / vn
y1 = 2 * vectorNorm(p1p-p1) / vn
w = 1 / sqrt(x1**2 + y1**2 + 1)

# "Characteristics of conic segments in Bezier form"
# Javier Sanchez-Reyes
# Proceedings of the IMProVe 2011, pp. 231-4
# (all calculations between b0 and F2 are complex)
b0 = p0(1) + p0(2) * i;
b1 = p1(1) + p1(2) * i;
b2 = p2(1) + p2(2) * i;

alpha = 1/(1-w**2)
m = (b0 + b2)/2;
C = (1-alpha) * b1 + alpha * m
d = (1-alpha) * b1**2 + alpha * b0 * b2;
c = sqrt(C**2 - d);
F1 = C + c
F2 = C - c
a = (abs(F1 - b0) + abs(F2 - b0))/2
b = sqrt(a**2 - abs(c)**2) # Note: This is reversed in paper
ang = rad2deg(arg(c))

figure;
hold on;
axis equal;
drawEllipse(real(C), imag(C), a, b, ang, 'color', 'magenta');
drawLine(l0, 'color', 'cyan');
drawLine(l2, 'color', 'cyan');
drawLine(l3, 'color', 'blue');
#drawPoint(ph, 'color', 'blue');
drawPoint(p0, 'color', 'black');
drawPoint(p1, 'color', 'blue');
drawPoint(p2, 'color', 'black');
waitforbuttonpress();

```

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X