/* //Puntos problemticos //Esto pasaba con robusto1 y robusto2
	 ll=0;
	 for(uint i=0;i<npm;i++){
		 l=ll;
		 ll=pm_acum[i];
		 if(!existenb[i]) continue;
		 if((ll-l)<3) continue;
		 uint rx,ry;
		 double nsa,nsb,nsc,ts0,ts1,ts2;
		 double nsd,nse,nsf;
		 ry=rx=ll-l;
		 nsa=nsb=nsc=ts0=ts1=ts2=0;
		 for(j=l;j<ll;j++){
			 k1=p_en_cp[j].n2;
			 k=p_en_cp[j].n1;
			 it1=mfp[k].n4;
			 a=centros[k1].P;
			 Fotograma *punf=centros[k1].fot;
			 b.Z=-punf->focal;
			 paux=punf->puntos[it1].p;
			 b.X=paux.x;
			 b.Y=paux.y;
			 b=GiraPunto_inv(b,centros[k1].M);
			 naux=punf->puntos[it1].bb;
			 if(!(naux & 1)) rx--;
			 else{
				 double aux=b.X/b.Z;
				 nsa+=aux*aux;
				 nsb-=aux;
				 double auxb=a.X-aux*a.Z;
				 ts0-=aux*auxb;
				 ts1+=auxb;
			 }
			 if(!(naux & 2)) ry--;
			 else{
				 double aux=b.Y/b.Z;
				 nsa+=aux*aux;
				 nsc-=aux;
				 double auxb=a.Y-aux*a.Z;
				 ts0-=aux*auxb;
				 ts2+=auxb;
			 }
		 }
		 if((rx+ry)<3) continue;
		 den=nsa*rx*ry-nsb*nsb*ry-nsc*nsc*rx;
		 den=1.0/den;
		 nsd=nsa*ry-nsc*nsc;
		 nse=nsb*nsc;
		 nsf=nsa*rx-nsb*nsb;
		 nsa=rx*ry;
		 nsb*=-(double)ry;
		 nsc*=-(double)rx;
		 ts0*=den; ts1*=den; ts2*=den;

		 P.Z=nsa*ts0+nsb*ts1+nsc*ts2;
		 P.X=nsb*ts0+nsd*ts1+nse*ts2;
		 P.Y=nsc*ts0+nse*ts1+nsf*ts2;
		 puntosM[i].P=P;

		 double *pN=Np[i];
		 //Clculo de los residuos y las matrices Np y Nfp;
		 for(j=0;j<9;j++)
			 pN[j]=0;
		 for(j=l;j<ll;j++){
			 uint k1,k,it1;
			 k1=p_en_cp[j].n2;
			 k=p_en_cp[j].n1;
			 CentroProy *puncp=centros+k1;
			 it1=mfp[k].n4;
			 Fotograma *punf=puncp->fot;
			 double f=punf->focal;
			 double (*iM)[3]=puncp->M;
			 float ff=(float)f;
			 for(uint ib=0;ib<9;ib++) fM[0][ib]=(float)iM[0][ib];
			 Puntoxy<double> ob,calc;
			 PuntoXYZ<double> Q;

			 ob=punf->puntos[it1].p;
			 Q=puntosM[i].P;
			 Q-=puncp->P;
			 calculado(Q);

			 k<<=1;
			 //Para la nueva precisin. No es estricto
			 indp=k;
			 imA=A[k];
			 imB=B[k];
			 MATRICES_AyB

			 if(Pef!=NULL && (faux=Pef[k])!=1.F){
				 for(it1=0;it1<6;it1++)
					 imA[it1]*=faux;
				 imB[0]*=faux;	imB[1]*=faux;	imB[2]*=faux;

				 imA-=6;		imB-=3;
				 for(it1=0;it1<6;it1++)
					 imA[it1]*=faux;
				 imB[0]*=faux;	imB[1]*=faux;	imB[2]*=faux;
			 }else{
				 imA-=6;		imB-=3;
			 }

			 //Matriz Np
			 pos=0;
			 for(it1=0;it1<3;it1++,pos+=3){
				 for(it2=it1;it2<3;it2++){
					 pN[pos+it2]+=imB[it1]*imB[it2];
					 pN[pos+it2]+=imB[3+it1]*imB[3+it2];
			 }	 }
			 //Matriz Nfp
			 pos=k*9;	//k ya <<1
			 for(it1=0;it1<6;it1++){
				 for(it2=0;it2<3;it2++,pos++){
					 Nfp[pos]=imA[it1]*imB[it2];
					 Nfp[pos]+=imA[6+it1]*imB[3+it2];
			 }	 }
		 }
		 invcho_3(pN);
		 //Matriz Afp
		 for(j=l;j<ll;j++){
			 k=p_en_cp[j].n1;
			 pos=k*18;
			 posb=pos;
			 for(it1=6;it1--;posb+=3){
				 posc=0;
				 for(it2=3;it2--;pos++){
					 double aux=0;
					 aux-=Nfp[posb]*pN[posc++];
					 aux-=Nfp[posb+1]*pN[posc++];
					 aux-=Nfp[posb+2]*pN[posc++];
					 Afp[pos]=aux;
			 }	 }
		 }
		 //Redundancias
		 //Suma anterior
		 float fsink=0;
		 for(j=l;j<ll;j++){
			 k=p_en_cp[j].n1<<1;
			 fsink+=RED[k]*RED[k];	k++;
			 fsink+=RED[k]*RED[k];
		 }
		 //Clculo
		 float fcosk=0;
		 for(j=l;j<ll;j++){
			 k=p_en_cp[j].n1<<1;
			 imB=B[k];
			 posc=0;
			 for(it1=0;it1<3;it1++){
				 filaBx[it1]=0;
				 filaBy[it1]=0;
				 for(uint ib=0;ib<3;ib++,posc++){
					 filaBx[it1]+=imB[ib]*pN[posc];
					 filaBy[it1]+=imB[3+ib]*pN[posc];
				 }
			 }
			 double aux=0;
			 for(it1=0;it1<3;it1++) aux+=filaBx[it1]*imB[it1];
			 faux=(float)(1-aux);
			 if(faux>1e-10F){RED[k]=sqrt(faux); fcosk+=faux;}
			 else{ RED[k]=1e-5F; fcosk+=1e-10F;}
			 imB+=3
			 k++;
			 aux=0;
			 for(it1=0;it1<3;it1++) aux+=filaBy[it1]*imB[it1];
			 faux=(float)(1-aux);
			 if(faux>1e-10F){RED[k]=sqrt(faux); fcosk+=faux;}
			 else{ RED[k]=1e-5F; fcosk+=1e-10F;}
		 }
		 //Compensacin
		 float faux=fsink/fcosk;
		 faux=sqrt(faux);
		 for(uint j=l;j<ll;j++){
			 k=p_en_cp[j].n1<<1;
			 RED[k++]*=faux;
			 RED[k]*=faux;
		 }
	 }//Fin puntos problemticos*/
