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.
********************************************************************************************