/// <summary>
        /// Hace la ordenaciĆ³n y las coloca en un vector de parejas
        /// </summary>
        void generarCorrespondenciasEnOrden()
        {
            Atributos atr = Atributos.getInstance();

            //las que tienen una rotaciĆ³n relativa mayor que un umbral las desechamos
            foreach (ParejaMinuciaNormalizada pmn in normalizadas)
            {
                if (pmn.pm.rotacionRelativa > atr.umbralAngulo)
                {
                    pmn.sn = 0;
                }
            }

            vectorParejas = normalizadas.ToArray();
            Array.Sort(vectorParejas);
            Array.Reverse(vectorParejas);

            this.inicial = buscarParejaInicial(vectorParejas);

            minuciaMasFiable1 = inicial.pm.minucia1;
            minuciaMasFiable2 = inicial.pm.minucia2;

            transformacionT = new TransformacionT(inicial, vectorParejas);
            this.parejas    = transformacionT.parejas;
        }
Example #2
0
        public TransformacionT(ParejaMinuciaNormalizada inicial, ParejaMinuciaNormalizada[] vectorParejas)
        {
            this.inicial = inicial;

            difx = inicial.pm.minucia2.x - inicial.pm.minucia1.x;
            dify = inicial.pm.minucia2.y - inicial.pm.minucia1.y;
            difa = inicial.pm.minucia2.angulo - inicial.pm.minucia1.angulo;

            aplicarTransformacionRigidaParejaMinuciaNormalizada(vectorParejas);
        }
        ParejaMinuciaNormalizada buscarParejaInicial(ParejaMinuciaNormalizada[] vectorParejas)
        {
            ParejaMinuciaNormalizada tmp = null;

            double maximo = -1;

            // localizamos el mayor sn
            for (int i = 0; i < vectorParejas.Length; i++)
            {
                if (vectorParejas[i].sn >= maximo)
                {
                    maximo = vectorParejas[i].sn;
                }
            }

            List <ParejaMinuciaNormalizada> listaPm = new List <ParejaMinuciaNormalizada>();

            // Buscamos las parejas que comparten dicho sn, es decir, las que empatan arriba
            for (int i = 0; i < vectorParejas.Length; i++)
            {
                if (vectorParejas[i].sn == maximo)
                {
                    listaPm.Add(vectorParejas[i]);
                }
            }

            bool flag = false;

            // De dicha lista intentamos devolver una pareja que sea fiable, si no pues uno de los encontrados
            foreach (ParejaMinuciaNormalizada pmn in listaPm)
            {
                if (pmn.pm.minucia1.fiabilidad == Minucia.Fiable &&
                    pmn.pm.minucia2.fiabilidad == Minucia.Fiable)
                {
                    tmp  = pmn;
                    flag = true;
                    break;
                }
            }

            // En caso contrario devolvemos uno cualquiera
            if (!flag)
            {
                tmp = listaPm.ToArray()[0];
            }

            return(tmp);
        }