2010-04-28 10 views
11

Mi aplicación consiste en representar formas en la superficie de la Tierra (utilizando una esfera es suficiente). Esos pueden ser puntos, líneas y polígonos. Las coordenadas se deben definir mediante el uso de grados o radianes (al igual que las coordenadas geográficas).Puntos, líneas y polígonos en esferas con C/C++

Un segmento de línea entre dos puntos en la superficie de la esfera debería estar en su great circle. Los polígonos deben consistir en una colección de tales líneas. Además, me gustaría realizar Set - Basic Operations como intersección, unión, diferencia, complemento en las formas mencionadas. Estas operaciones solo necesitan generar colecciones de puntos.

Traté de resolver eso usando CGAL 3D Spherical Geometry Kernel y 2D Boolean Operations on Nef Polygons Embedded on the Sphere. En realidad, ya tuve problemas para poner una línea en la esfera. Además, CGAL trabaja en el Espacio Euclidiano, que aún me deja con las operaciones geométricas necesarias, para trabajar con grandes círculos colocados en la esfera.

Mi pregunta es, si puede ayudarme a realizar la funcionalidad mencionada en CGAL o si puede recomendar otra biblioteca para C/C++ que lo haga. ¡Muchas gracias!

+0

las "operaciones booleanas en 2D Nef Polígonos incrustados en la Esfera" parece que se hace lo que necesitas ¿Hay algo específico con lo que necesites ayuda? – user168715

+0

@ user168715 No estoy seguro con su pregunta. En el primer párrafo, necesita dibujar formas en _superficie_ de la esfera, pero en el segundo párrafo quiere que las líneas/polígonos se dibujen en un círculo grande (que dibujará realmente la línea/polígono _inside_ de la esfera). – Pranav

+0

@Pranav: Cada "línea" del polígono en la superficie de la esfera es una pieza de un gran círculo diferente. – aschepler

Respuesta

0

Encontrar la intersección de dos objetos generalmente requiere establecer las ecuaciones que definen los objetos iguales entre sí.

Aquí hay una forma, que quizás sea otra frase de la respuesta de Vitor.

Comience definiendo cada línea (arco) como una ecuación paramétrica. Para bien o para mal, veo estos arcos como los vectores normalizados de ruta toman cuando se rotan. Entonces así es como los definiría (apuesto a que hay una mejor manera).

Así que tomaría los puntos de inicio y final, los trataría como vectores, tomaría el producto cruzado para obtener el eje de rotación, y el producto de puntos para obtener el ángulo.

así que mi ecuación para un arco se vería como

arco (t) = startPoint * (axisAngleToRotationMatrix (eje, el ángulo t *))

A continuación, fijar los dos arcos Ecuación iguales entre sí y resuelve el sistema de ecuaciones que resulta, para las "t" 's en cada ecuación.

Cuestiones relacionadas