diff --git a/EgtGeomKernel.rc b/EgtGeomKernel.rc index c90eb8a..87783ae 100644 Binary files a/EgtGeomKernel.rc and b/EgtGeomKernel.rc differ diff --git a/Triangulate.cpp b/Triangulate.cpp index 0dbb307..cc58b51 100644 --- a/Triangulate.cpp +++ b/Triangulate.cpp @@ -185,19 +185,27 @@ Triangulate::MakeByEC2( const PNTVECTOR& vPt, const INTVECTOR& vPol, INTVECTOR& if ( bIsEar) { // Save square distance of diagonal double dSqDist = SqDist(vPt[vPol[vPrev[i]]], vPt[vPol[vNext[i]]]) ; - // Try with next + // Try with next or next^2 int j = vNext[i] ; - bool bIsEar1 = TestTriangle( vPt, vPol, vPrev, vNext, j) ; double dSqDist1 = INFINITO ; - if ( bIsEar1) + if ( TestTriangle( vPt, vPol, vPrev, vNext, j)) dSqDist1 = SqDist( vPt[vPol[vPrev[j]]], vPt[vPol[vNext[j]]]) ; - // Try with prev + else { + j = vNext[j] ; + if ( TestTriangle( vPt, vPol, vPrev, vNext, j)) + dSqDist1 = SqDist( vPt[vPol[vPrev[j]]], vPt[vPol[vNext[j]]]) ; + } + // Try with prev or prev^2 int k = vPrev[i] ; - bool bIsEar2 = TestTriangle( vPt, vPol, vPrev, vNext, k) ; double dSqDist2 = INFINITO ; - if ( bIsEar2) + if ( TestTriangle( vPt, vPol, vPrev, vNext, k)) dSqDist2 = SqDist( vPt[vPol[vPrev[k]]], vPt[vPol[vNext[k]]]) ; - // Choose the best + else { + k = vPrev[k] ; + if ( TestTriangle( vPt, vPol, vPrev, vNext, k)) + dSqDist2 = SqDist( vPt[vPol[vPrev[k]]], vPt[vPol[vNext[k]]]) ; + } + // Choose the better if ( dSqDist <= dSqDist1 && dSqDist <= dSqDist2) ; // i is the better else if ( dSqDist1 <= dSqDist2)