@@ -876,8 +876,11 @@ class cOptimPosCdM : public cOptimSymetryOnImage<tREAL4>
876876 // cPt1dr Value(const cPt2dr & ) const override;
877877 typedef cSegment2DCompiled<tREAL8> tSeg;
878878
879+ bool IsOk () const {return mIsOk ;}
880+
879881 private :
880- void AddPts1Seg (const cPt2dr & aMaster, const cPt2dr & aSecond,bool toAvoid2);
882+ bool mIsOk ;
883+ bool AddPts1Seg (const cPt2dr & aMaster, const cPt2dr & aSecond,bool toAvoid2);
881884 const cCdMerged& mCdM ;
882885};
883886
@@ -888,11 +891,12 @@ cOptimPosCdM::cOptimPosCdM(const cCdMerged & aCdM,const cDiffInterpolator1D & aI
888891 mCdM (aCdM)
889892 // mCurInt (aInt)
890893{
891- AddPts1Seg (aCdM.CornerlEl_WB (), aCdM.CornerlEl_BW (),true );
892- AddPts1Seg (aCdM.CornerlEl_BW (), aCdM.CornerlEl_WB (),false );
894+ mIsOk = AddPts1Seg (aCdM.CornerlEl_WB (), aCdM.CornerlEl_BW (),true )
895+ && AddPts1Seg (aCdM.CornerlEl_BW (), aCdM.CornerlEl_WB (),false )
896+ ;
893897}
894898
895- void cOptimPosCdM::AddPts1Seg (const cPt2dr & aSCorn1, const cPt2dr & aSCorn2,bool toAvoid2)
899+ bool cOptimPosCdM::AddPts1Seg (const cPt2dr & aSCorn1, const cPt2dr & aSCorn2,bool toAvoid2)
896900{
897901 cPt2dr aCorn1 = aSCorn1 * mCdM .mScale ;
898902 cPt2dr aCorn2 = aSCorn2 * mCdM .mScale ;
@@ -903,14 +907,18 @@ void cOptimPosCdM::AddPts1Seg(const cPt2dr & aSCorn1, const cPt2dr & aSCorn2,boo
903907 // cPt2dr aCorn2 = aSCorn2 * mScale;
904908
905909 int aNbX = round_up (aL1/aStep);
906- tREAL8 aStepX = aL1 / aNbX;
907-
908910 int aNbY = round_up (aWidth/aStep);
911+ if ((aNbX==0 ) || (aNbY==0 ))
912+ return false ;
913+
914+ tREAL8 aStepX = aL1 / aNbX;
909915 tREAL8 aStepY = aWidth / aNbY;
910916
911917 tSeg aSeg1 (mCdM .mC0 ,aCorn1);
912918 tSeg aSeg2 (mCdM .mC0 ,aCorn2);
913919
920+ // StdOut() << " A11S " << aNbX << " " << aNbX << "\n";
921+
914922 for (int aKX=-aNbX ; aKX<=aNbX ; aKX++)
915923 {
916924 for (int aKY=0 ; aKY<=aNbY ; aKY++) // KY=0 : we take only one point /2
@@ -927,6 +935,8 @@ void cOptimPosCdM::AddPts1Seg(const cPt2dr & aSCorn1, const cPt2dr & aSCorn2,boo
927935 }
928936 }
929937 }
938+
939+ return true ;
930940}
931941
932942/* ********************************************* */
@@ -946,6 +956,8 @@ cCdMerged::cCdMerged(const cDataIm2D<tREAL4> * aDIm0,const cCdEllipse & aCDE,tRE
946956void cCdMerged::GradOptimizePosition (const cDiffInterpolator1D & anInt,tREAL8 aStepEnd)
947957{
948958 cOptimPosCdM aCdGrad (*this ,anInt);
959+ if (! aCdGrad.IsOk ())
960+ return ;
949961 // StdOut() << "----------- TEST GRAD ---------------- V0=" << aCdGrad.Value(cPt2dr(0,0)) << " \n";
950962
951963 aCdGrad.IterLeastSqGrad (aStepEnd,5 );
@@ -955,6 +967,9 @@ void cCdMerged::GradOptimizePosition(const cDiffInterpolator1D & anInt,tREAL8 aS
955967void cCdMerged::HeuristikOptimizePosition (const cDiffInterpolator1D & anInt,tREAL8 aStepEnd)
956968{
957969 cOptimPosCdM aCdtOpt (*this ,anInt);
970+ if (! aCdtOpt.IsOk ())
971+ return ;
972+
958973 cOptimByStep anOpt (aCdtOpt,true ,1.0 );
959974
960975
0 commit comments