Código Fuente para ajustar trazos bocetados a arcos elípticos

Abril de 2015

Estamos interesados en crear herramientas basadas en computador para ayudar a los ingenieros
de diseño durante la primera etapa del proceso de diseño, conocida como diseño conceptual.
Por tanto, desarrollamos sistemas de modelado basado en bocetos (SBM por sus siglas en inglés).
La primera etapa de nuestro método para SBM es convertir el boceto a mano alzada de entrada en un dibujo lineal.
A tal fin, necesitamos determinar si cada trazo individual representa o no un arco elíptico.

Se adjunta una implementación en C++ del código del nuevo algoritmo Fitting Ellipses (FE).

Usted puede descargar el código de FF desde aquí.

La entrada para FE es un trazo 2D, que incluye
una lista de coordenadas de los puntos muestreados cuando se mueve el cursor.
También se guarda el intervalo de tiempo (porque se usa en algunos métodos de detección de esquinas).

La salida es la información del arco elíptico que mejor se ajusta al trazo.
La información se guarda en una instancia de la clase CArc, donde cada instancia de Arco incluye:

                                   double Centre_x, Centre_y // Centro del arco
                                   double Radius_a, Radius_b; // Longitudes de los semiejes
                                   double Rotation;  // Angulo de rotación antihorario desde el eje x hasta el eje mayor
                                   double Focus1_x, Focus1_y  // Foco 1
                                   double Focus2_x, Focus2_y  // Foco 2
                                   double StartAngle;  // Angulo del vertice inicial, relativo al sistema local (el ángulo absoluto es StrarAngle+Rotation)
                                   double EndAngle;  // Angulo del vertice final, relativo al sistema local (el ángulo absoluto es StrarAngle+Rotation)

 

También se devuelve el valor de la cifra de mérito del ajuste (1 es ajuste perfecto y 0 es no hay ajuste en absoluto).

El método está encapsulado dentro de una clase principal CFitEllipse. Se suministra también el código complementario.

El lector debe notar que el método de ajuste de elipses incluye la detección de puntos esquina.
Los algoritmos para detectar esquinas se suministran como una caja negra.

Este método para ajustar arcos elípticos se describe extensamente en:

Company P., Plumed R. and Varley P.A.C. (2015).
A fast approach for perceptually-based fitting strokes into elliptical arcs.
The Visual Computer Journal, 31(6), pp. 775-785.

Para ayudar a entender cómo funciona el código, y para ofrecer un entorno de prueba
se suministra también el siguiente fichero:

·         FitEllipseMain.cpp, y su fichero de encabezamiento FitEllipseMain.h.

This main function reads data contained in an example named as “example.stk”.
Other examples are provided in the corresponding folder.

Finalmente, queremos remarcar que el código fue escrito para hacerlo legible. La eficiencia nunca fue un objetivo.

 

********************************************************************************************

El código FE es software libre. Pero si usted lo encuentra útil para su propia investigación,
por favor cite nuestro artículo:

Company P., Plumed R. and Varley P.A.C. (2015).
A fast approach for perceptually-based fitting strokes into elliptical arcs.
The Visual Computer Journal, 31(6), pp. 775-785.

********************************************************************************************