mirror of https://github.com/CGAL/cgal
avoid infinite loop in 3D and dD
This commit is contained in:
parent
78a07a0e69
commit
3f8448f280
|
|
@ -141,13 +141,21 @@ public:
|
||||||
internal::fixed_hilbert_split (m6, m8, Cmp< z, !upz> (zmed,_k));
|
internal::fixed_hilbert_split (m6, m8, Cmp< z, !upz> (zmed,_k));
|
||||||
|
|
||||||
|
|
||||||
|
if (m1!=m8)
|
||||||
sort<z, upz, upx, upy> (m0, m1, zmin, xmin, ymin, zmed, xmed, ymed);
|
sort<z, upz, upx, upy> (m0, m1, zmin, xmin, ymin, zmed, xmed, ymed);
|
||||||
|
if (m1!=m0 || m2!=m8)
|
||||||
sort<y, upy, upz, upx> (m1, m2, ymin, zmed, xmin, ymed, zmax, xmed);
|
sort<y, upy, upz, upx> (m1, m2, ymin, zmed, xmin, ymed, zmax, xmed);
|
||||||
|
if (m2!=m0 || m3!=m8)
|
||||||
sort<y, upy, upz, upx> (m2, m3, ymed, zmed, xmin, ymax, zmax, xmed);
|
sort<y, upy, upz, upx> (m2, m3, ymed, zmed, xmin, ymax, zmax, xmed);
|
||||||
|
if (m3!=m0 || m4!=m8)
|
||||||
sort<x, upx,!upy,!upz> (m3, m4, xmin, ymax, zmed, xmed, ymed, zmin);
|
sort<x, upx,!upy,!upz> (m3, m4, xmin, ymax, zmed, xmed, ymed, zmin);
|
||||||
|
if (m4!=m0 || m5!=m8)
|
||||||
sort<x, upx,!upy,!upz> (m4, m5, xmed, ymax, zmed, xmax, ymed, zmin);
|
sort<x, upx,!upy,!upz> (m4, m5, xmed, ymax, zmed, xmax, ymed, zmin);
|
||||||
|
if (m5!=m0 || m6!=m8)
|
||||||
sort<y,!upy, upz,!upx> (m5, m6, ymax, zmed, xmax, ymed, zmax, xmed);
|
sort<y,!upy, upz,!upx> (m5, m6, ymax, zmed, xmax, ymed, zmax, xmed);
|
||||||
|
if (m6!=m0 || m7!=m8)
|
||||||
sort<y,!upy, upz,!upx> (m6, m7, ymed, zmed, xmax, ymin, zmax, xmed);
|
sort<y,!upy, upz,!upx> (m6, m7, ymed, zmed, xmax, ymin, zmax, xmed);
|
||||||
|
if (m7!=m0)
|
||||||
sort<z,!upz,!upx, upy> (m7, m8, zmed, xmax, ymin, zmin, xmed, ymed);
|
sort<z,!upz,!upx, upy> (m7, m8, zmed, xmax, ymin, zmin, xmed, ymed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -117,6 +117,7 @@ public:
|
||||||
/////////////start recursive calls
|
/////////////start recursive calls
|
||||||
last_dir = (direction + _dimension -1) % _dimension;
|
last_dir = (direction + _dimension -1) % _dimension;
|
||||||
// first step is special
|
// first step is special
|
||||||
|
if (places[1]!=end)
|
||||||
sort( places[0], places[1], start, last_dir,cmin,cmax);
|
sort( places[0], places[1], start, last_dir,cmin,cmax);
|
||||||
cmin[last_dir] = med[last_dir];
|
cmin[last_dir] = med[last_dir];
|
||||||
cmax[last_dir] = maxi[last_dir];
|
cmax[last_dir] = maxi[last_dir];
|
||||||
|
|
@ -124,11 +125,13 @@ public:
|
||||||
|
|
||||||
for(int i=1; i<two_to_dim-1; i +=2){
|
for(int i=1; i<two_to_dim-1; i +=2){
|
||||||
//std::cout<<i<<";"<<start[0]<<start[1]<<start[2]<<start[3]<<"/"<<dir[i+1]<<std::endl;
|
//std::cout<<i<<";"<<start[0]<<start[1]<<start[2]<<start[3]<<"/"<<dir[i+1]<<std::endl;
|
||||||
|
if (places[i]!=begin || places[i+1]!=end)
|
||||||
sort( places[i ], places[i+1], start, dir[i+1],cmin,cmax);
|
sort( places[i ], places[i+1], start, dir[i+1],cmin,cmax);
|
||||||
cmax[ dir[i+1] ] = (cmin[ dir[i+1]]==mini[ dir[i+1]])
|
cmax[ dir[i+1] ] = (cmin[ dir[i+1]]==mini[ dir[i+1]])
|
||||||
? maxi[ dir[i+1] ] : mini[ dir[i+1] ];
|
? maxi[ dir[i+1] ] : mini[ dir[i+1] ];
|
||||||
cmin[ dir[i+1] ] = med[ dir[i+1] ];
|
cmin[ dir[i+1] ] = med[ dir[i+1] ];
|
||||||
|
|
||||||
|
if (places[i+1]!=begin || places[i+2]!=end)
|
||||||
sort( places[i+1], places[i+2], start, dir[i+1],cmin,cmax);
|
sort( places[i+1], places[i+2], start, dir[i+1],cmin,cmax);
|
||||||
cmin[ dir[i+1] ] = cmax[ dir[i+1] ];
|
cmin[ dir[i+1] ] = cmax[ dir[i+1] ];
|
||||||
cmax[ dir[i+1] ] = med[ dir[i+1] ];
|
cmax[ dir[i+1] ] = med[ dir[i+1] ];
|
||||||
|
|
@ -139,6 +142,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
//last step is special
|
//last step is special
|
||||||
|
if (places[two_to_dim-1]!=begin)
|
||||||
sort( places[two_to_dim-1], places[two_to_dim], start, last_dir,cmin,cmax);
|
sort( places[two_to_dim-1], places[two_to_dim], start, last_dir,cmin,cmax);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue