/// <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; }
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); }