11 votos

intersección arco-arco, arcos especificados por los puntos finales y la altura

Necesito calcular la(s) intersección(es) entre dos arcos circulares. Cada arco está especificado por sus puntos extremos y su altura. La altura es la distancia perpendicular desde la cuerda que une los puntos extremos hasta el centro del arco. Utilizo esta representación porque es numéricamente robusta para arcos muy poco curvados, así como para segmentos de líneas rectas, para los que la altura es cero. En estos casos, representar un arco utilizando el centro de su circunferencia podría llevar a que el centro estuviera muy lejos de los puntos extremos del arco y, por tanto, fuera numéricamente inestable.

Mi pregunta en el nivel más alto es cómo haría para calcular los puntos de intersección, dado que los centros de los círculos de los arcos no pueden ser necesariamente calculados de forma robusta. A un nivel más bajo, me pregunto si existe una parametrización de un arco utilizando sólo la información que he indicado anteriormente (que no incluye el centro del círculo). Por supuesto, hay que tener en cuenta que la robustez numérica es mi principal preocupación aquí; de lo contrario, simplemente haría lo ingenuo y calcularía el centro del círculo para todos los arcos no lineales y esperaría lo mejor.

Editar : Fórmula para calcular el centro del círculo de arcos:

Supongamos que la longitud de la cuerda es $2t$ y la altura es $h$ . La distancia de la cuerda al centro del círculo es $c$ para que $r=h+c$ . Entonces se deduce que $c=(t^2-h^2)/2h$ que se rompe cuando $h$ es muy pequeño. El cálculo de la ubicación del centro del círculo es una simple aritmética vectorial utilizando el vector cuerda y su perpendicular.

5voto

theog Puntos 585

¿Has considerado encontrar las intersecciones utilizando una forma implícita para los círculos? $$\frac{x^2}{r^2} + \frac{y^2}{r^2} + ax + by + c = 0?$$ Esta representación no tiene coeficientes que diverjan cuando el círculo se acerca a una línea recta. Para encontrar las intersecciones, tendrás que resolver una ecuación cuadrática cuyo coeficiente principal podría ser cero o estar arbitrariamente cerca de él, pero la forma alternativa de la fórmula cuadrática debería ser capaz de afrontarlo con solidez.

A continuación, tendrás que hacer algunas operaciones para averiguar si los puntos de intersección se encuentran dentro de los arcos. Si el ángulo de curvatura del arco es menor que $\pi$ Basta con una proyección sobre la línea que une los puntos extremos.

(Aclaración: aunque todo esto parece que debería funcionar, no lo he analizado con detalle. Además, todavía podría haber un problema cuando el círculo está cerca de una línea y quieres que el más largo arco. Pero no me imagino que sea un caso que aparezca en ninguna aplicación práctica).

Actualización: Para un ejemplo concreto, he aquí la ecuación de un arco de círculo que pasa por los tres puntos $(0,0)$ , $(0.5, h)$ y $(1,0)$ : $$\kappa^2 x^2 + \kappa^2 y^2 - \kappa^2 x - 2\eta y = 0,$$ donde $$\begin{align}\kappa &= \frac{8h}{4h^2 + 1}, \\ \eta &= \frac{8h(4h^2-1)}{(4h^2+1)^2}.\end{align}$$ Como se puede ver, los coeficientes permanecen acotados como $h \to 0$ .

Actualización 2: Espera, esa ecuación se vuelve trivial si $h = 0$ lo cual es malo. Realmente queremos algo como $x^2/r + y^2/r + ax + by + c,$ es decir, multiplicar la expresión anterior por $r$ . Entonces, para el mismo ejemplo, nuestra ecuación se convierte en $$\kappa x^2 + \kappa y^2 - \kappa x - 2\eta' y = 0,$$ donde $\eta' = (4h^2-1)/(4h^2+1)$ . Estos son algunos valores explícitos.

$h = 1/2$ : $$2 x^2 + 2 y^2 - 2 x = 0,$$ $h = 0.01$ : $$0.07997 x^2 + 0.07997 y^2 - 0.07997 x + 1.998 y = 0,$$ $h = 0$ : $$2 y = 0.$$

Por cierto, en este formato, los términos lineales serán siempre simplemente $-2(x_0/r)x$ y $-2(y_0/r)y$ donde el centro del círculo está en $(x_0,y_0)$ . Como el centro va al infinito pero los puntos extremos permanecen fijos, estos coeficientes permanecen acotados y no nulos (es decir, no son ambos nulos).

4voto

yoliho Puntos 340

Se trata de un enigma interesante, y lo que voy a sugerir es sólo un posible enfoque, de ninguna manera una respuesta definitiva. Tal vez lo que podría hacer es calcular el segmento de la curva de Bézier aproximando sus arcos, y luego calcular la intersección entre los segmentos de Bézier. Para calcular el segmento de Bézier para un arco, necesitas el vector tangente en un extremo (la tangente en el otro extremo se obtiene por simetría). Así que este enfoque se reduce a encontrar un ángulo tangente en un punto final.

Sea el ángulo subtendido por un arco en el centro del círculo $\theta$ . Si la longitud de la cuerda del arco es $c$ y su altura $h$ Entonces, si he calculado bien, $$\frac{\theta}{2} = \cos^{-1} \left( \frac{c^2 - 4h^2}{c^2+4h^2} \right) \;.$$ Esto evita el cálculo del radio del círculo $r = (c^2 + 4h^2)/(8h)$ . Ahora desde $\theta$ se podría calcular el ángulo tangente necesario, y a partir de ahí un segmento de Bézier.

No he analizado esto para ver si es realmente robusto.

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