EgtGeomKernel 1.5d4 :

- migliorie alla triangolazione di aree piane.
This commit is contained in:
Dario Sassi
2014-04-12 10:03:23 +00:00
parent 75c65d7094
commit 39db15e41e
2 changed files with 15 additions and 7 deletions
+15 -7
View File
@@ -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)