4 votos

Punto inicial y final de una elipse girada

Tengo los datos de una elipse incompleta y necesito recuperar la información mínima para describir un arco elíptico. En particular los siguientes son los datos de mi elipse:

  • Vector del eje mayor (x, y)
  • Relación eje mayor/eje menor
  • Ángulo inicial
  • Ángulo final
  • Punto central (x, y)

Y para el arco necesito la siguiente información:

  • Punto inicial (x, y)
  • Punto final (x, y)
  • Radio X
  • Radio Y
  • Ángulo de rotación

¿Qué ecuaciones debo utilizar para obtener estos datos?

He aquí un ejemplo. Dada esta elipse:

  • Vector eje mayor = (-120, -185)
  • Relación eje mayor/eje menor = 0,267
  • Ángulo inicial = 0 grados
  • Ángulo final = 180 grados
  • Punto central = (0, 0)

La elipse es:

ellipse

Con punto de partida en (-120, -185) y punto final en (120, 185).

Lo he intentado utilizando el ecuación de la elipse clásica pero funciona con algunas elipses y no con otras (como por ejemplo la de arriba).

0 votos

La especificación SVG parece pertinente: w3.org/TR/SVG/paths.html#PathDataEllipticalArcCommands .

0 votos

@lhf gracias, en realidad tengo que convertir un archivo DXF con los datos de la elipse a una ruta de arco SVG.

0 votos

Lo que no recuerdo de SVG es cuál es la dirección cero y en qué sentido gira el ángulo de rotación (en sentido horario o antihorario). Otra pregunta (quizá sobre DXF) es sobre el "ángulo inicial" y el "ángulo final": ¿son direcciones reales desde el centro de la elipse hasta el punto inicial o final, o son las direcciones hacia donde se moverían los puntos inicial y final si estiráramos la elipse hasta darle una forma circular? (Esto último es lo que se obtiene si la elipse se traza con la parametrización habitual, algo así como $(x,y)=(a\cos\theta,b\sin\theta)$ .)

2voto

David K Puntos 19172

Supongamos que partimos de estos datos de entrada (generalizados):

  • Punto central = $(x_0, y_0)$
  • Vector del eje mayor = $(a_x, a_y)$
  • Relación eje mayor/eje menor = $k$
  • Ángulo inicial = $\theta_1$
  • Ángulo final = $\theta_2$

Para simplificar la exposición, voy a suponer que los ángulos se dan en las mismas unidades que se esperan como esperadas como entrada por las funciones seno y coseno que se implementar este algoritmo. También asumiré que en ambos sistemas de coordenadas en los que trabajas (entrada y salida), para rotar un vector que (inicialmente) apunta en la dirección del positivo $x$ -eje para que acabe apuntando en la dirección del eje positivo $y$ -Eje, lo rotarías a través de un positivo ángulo de $90$ grados o $\frac\pi2$ radianes.

Supondré que el vector $(a_x, a_y)$ representa el vector de desplazamiento desde el centro de la elipse hasta un extremo del eje mayor. Entonces la dirección de este vector es $\psi = \text{atan2}(a_y,a_x)$ , donde $\text{atan2}(\cdot)$ es la función arco tangente de dos parámetros disponible en muchas bibliotecas matemáticas de ordenador.

La longitud del semieje mayor ("radio X") es entonces $a = \sqrt{a_x^2 + a_y^2}.$ La longitud del semieje menor ("radio Y") es $b = ka.$

Existen al menos dos formas de que los valores angulares medidos desde el centro de una elipse para describir puntos de la elipse. Una es el ángulo real entre el vector del centro al punto en cuestión y un vector paralelo al eje mayor. La otra forma es utilizar el llamado anomalía excéntrica. La anomalía excéntrica es lo que se ve cuando alguien parametriza una elipse de la forma $(x,y) = (a \cos \theta, b \sin \theta).$ Una forma de saber cuál de ellos utiliza su biblioteca gráfica es dibujar una elipse cuyo eje menor sea $0.1$ veces el eje mayor, a partir de un ángulo de $45$ grados (o  $\frac\pi4$ ) y terminando en un ángulo de $135$ grados (o $\frac{3\pi}4$ ). Si la biblioteca interpreta los ángulos como ángulos reales, dibujará un arco cuya longitud es aproximadamente $20\%$ de la longitud del eje mayor. Si la biblioteca interpreta cada ángulo como una anomalía excéntrica entonces la longitud del arco será aproximadamente $70\%$ de la longitud del eje mayor.

Asumiré que estamos usando ángulos reales, no anomalía excéntrica. La ecuación polar para una elipse centrada en el origen, con ejes $a$ y $b$ paralelo a los ejes de coordenadas es $$ r = \frac{ab}{\sqrt{b\cos^2\theta + a\sin^2\theta}}. \tag 1$$

Esto da una ecuación paramétrica de la elipse, $$ (x(\theta),y(\theta)) = \left(r(\theta) \cos\theta, r(\theta) \sin\theta\right) \tag 2$$ con $r(\theta)$ definido por la ecuación $(1)$ .

Recordando que ya hemos calculado $\psi$ la dirección del eje mayor, podemos utilizar la matriz de rotación $$ M = \begin{pmatrix} \cos \psi & -\sin \psi \\ \sin \psi & \cos \psi) \end{pmatrix}$$ para "rotar" la elipse. (Si el resultado es una rotación en la dirección incorrecta dirección, sustituya $M$ con su transposición). Así, trasladando la elipse de la ecuación $(2)$ por lo que su centro está en $(x_0,y_0)$ y girándolo en ángulo $\psi$ para alinear correctamente el eje mayor, tenemos $$ (x(\theta),y(\theta)) = (x_0,y_0) + M \left(r(\theta) \cos\theta, r(\theta) \sin\theta\right). $$

Enchufar $\theta_1$ para obtener tu punto de partida, o $\theta_2$ para obtener su punto final.

En realidad creo recordar que SVG permite trasladar y rotar piezas del dibujo de forma individual, por lo que tal vez sólo podría utilizar la ecuación $(2)$ para averiguar dónde estarían los puntos inicial y final si la elipse estuviera centrada en $(0,0)$ en un ángulo de $0$ , y luego mueve el arco resultante a donde realmente debería estar.

Es posible que parte de esto se base en suposiciones erróneas sobre cómo funcionan los dos sistemas gráficos. Si se trata de un simple error como dibujar la figura al revés o girarla en la dirección equivocada, un juicioso cambio de signo en una de las ecuaciones probablemente lo arreglará. Suelo acabar resolviendo este tipo de cosas por ensayo y error (ya que normalmente sólo hay dos opciones y una será claramente errónea).

0 votos

Gracias por tu respuesta, pero tengo algunos problemas con ella. Consideremos por ejemplo el primer punto, según tu respuesta y mi ejemplo tenemos a = 221, b = 59, = 237 deg y estos valores son los adecuados para mí. Pero cuando calculo la abscisa del primer punto obtengo x(0) = r(0) * cos(0) = 1699, y(0)= r(y) * sin(0) = 0 que son bastante erróneos como resultados. ¿Se me escapa algo?

0 votos

Por otra parte, en cuanto a la última parte de su respuesta, ¿se refiere a la transformación de rotación SVG? w3.org/TR/SVG/coords.html#TransformAttribute

0 votos

Encontré el problema con tu ecuación: estaba relacionada con el cuadrado del cos() y el sin(), como se indica aquí es.wikipedia.org/wiki/Ellipse#Forma_polar_relativa_al_enfoque .

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