From e79ee242bd088dd2bdc4ed70296e6ee6dd2b358a Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Wed, 23 Apr 2025 09:37:39 +0100 Subject: [PATCH 01/49] Add code for FPG of Orientation_5 --- .../include/CGAL/NewKernel_d/orientationC5.h | 83 +++++++++++++++++++ .../benchmark/Triangulation/CMakeLists.txt | 2 + .../benchmark/Triangulation/bench5d.cpp | 56 +++++++++++++ .../benchmark/Triangulation/generate_d.cpp | 24 ++++++ 4 files changed, 165 insertions(+) create mode 100644 NewKernel_d/include/CGAL/NewKernel_d/orientationC5.h create mode 100644 Triangulation/benchmark/Triangulation/bench5d.cpp create mode 100644 Triangulation/benchmark/Triangulation/generate_d.cpp diff --git a/NewKernel_d/include/CGAL/NewKernel_d/orientationC5.h b/NewKernel_d/include/CGAL/NewKernel_d/orientationC5.h new file mode 100644 index 00000000000..dd663f4a9ee --- /dev/null +++ b/NewKernel_d/include/CGAL/NewKernel_d/orientationC5.h @@ -0,0 +1,83 @@ + + + +typedef double RT; + +RT +determinant( + RT a00, RT a01, RT a02, RT a03, RT a04, + RT a10, RT a11, RT a12, RT a13, RT a14, + RT a20, RT a21, RT a22, RT a23, RT a24, + RT a30, RT a31, RT a32, RT a33, RT a34, + RT a40, RT a41, RT a42, RT a43, RT a44) +{ +// First compute the det2x2 + const RT m01 = a10*a01 - a00*a11; + const RT m02 = a20*a01 - a00*a21; + const RT m03 = a30*a01 - a00*a31; + const RT m04 = a40*a01 - a00*a41; + const RT m12 = a20*a11 - a10*a21; + const RT m13 = a30*a11 - a10*a31; + const RT m14 = a40*a11 - a10*a41; + const RT m23 = a30*a21 - a20*a31; + const RT m24 = a40*a21 - a20*a41; + const RT m34 = a40*a31 - a30*a41; +// Now compute the minors of rank 3 + const RT m012 = m12*a02 - m02*a12 + m01*a22; + const RT m013 = m13*a02 - m03*a12 + m01*a32; + const RT m014 = m14*a02 - m04*a12 + m01*a42; + const RT m023 = m23*a02 - m03*a22 + m02*a32; + const RT m024 = m24*a02 - m04*a22 + m02*a42; + const RT m034 = m34*a02 - m04*a32 + m03*a42; + const RT m123 = m23*a12 - m13*a22 + m12*a32; + const RT m124 = m24*a12 - m14*a22 + m12*a42; + const RT m134 = m34*a12 - m14*a32 + m13*a42; + const RT m234 = m34*a22 - m24*a32 + m23*a42; +// Now compute the minors of rank 4 + const RT m0123 = m123*a03 - m023*a13 + m013*a23 - m012*a33; + const RT m0124 = m124*a03 - m024*a13 + m014*a23 - m012*a43; + const RT m0134 = m134*a03 - m034*a13 + m014*a33 - m013*a43; + const RT m0234 = m234*a03 - m034*a23 + m024*a33 - m023*a43; + const RT m1234 = m234*a13 - m134*a23 + m124*a33 - m123*a43; +// Now compute the minors of rank 5 + const RT m01234 = m1234*a04 - m0234*a14 + m0134*a24 - m0124*a34 + m0123*a44; + return m01234; +} + + + +int +orientationC5(RT p0, RT p1, RT p2, RT p3, RT p4, + RT q0, RT q1, RT q2, RT q3, RT q4, + RT r0, RT r1, RT r2, RT r3, RT r4, + RT s0, RT s1, RT s2, RT s3, RT s4, + RT t0, RT t1, RT t2, RT t3, RT t4) +{ + RT pq0 = q0 - p0; + RT pq1 = q1 - p1; + RT pq2 = q2 - p2; + RT pq3 = q3 - p3; + RT pq4 = q4 - p4; + RT pr0 = r0 - p0; + RT pr1 = r1 - p1; + RT pr2 = r2 - p2; + RT pr3 = r3 - p3; + RT pr4 = r4 - p4; + RT ps0 = s0 - p0; + RT ps1 = s1 - p1; + RT ps2 = s2 - p2; + RT ps3 = s3 - p3; + RT ps4 = s4 - p4; + RT pt0 = t0 - p0; + RT pt1 = t1 - p1; + RT pt2 = t2 - p2; + RT pt3 = t3 - p3; + RT pt4 = t4 - p4; + RT det = determinant(pq0, pq1, pq2, pq3, pq4, + pr0, pr1, pr2, pr3, pr4, + ps0, ps1, ps2, ps3, ps4, + pt0, pt1, pt2, pt3, pt4); + + if (det > 0) return 1; + if (det < 0) return -1; +} diff --git a/Triangulation/benchmark/Triangulation/CMakeLists.txt b/Triangulation/benchmark/Triangulation/CMakeLists.txt index 5a3787259ee..befd92e97c5 100644 --- a/Triangulation/benchmark/Triangulation/CMakeLists.txt +++ b/Triangulation/benchmark/Triangulation/CMakeLists.txt @@ -11,10 +11,12 @@ include(CGAL_Eigen3_support) if(TARGET CGAL::Eigen3_support) include_directories(BEFORE "include") + create_single_source_cgal_program("bench5d.cpp") create_single_source_cgal_program("delaunay.cpp") target_link_libraries(delaunay PRIVATE CGAL::Eigen3_support) create_single_source_cgal_program("Td_vs_T2_and_T3.cpp") target_link_libraries(Td_vs_T2_and_T3 PRIVATE CGAL::Eigen3_support) + target_link_libraries(bench5d PRIVATE CGAL::Eigen3_support) else() message("NOTICE: Executables in this directory require Eigen 3.1 (or greater), and will not be compiled.") endif() diff --git a/Triangulation/benchmark/Triangulation/bench5d.cpp b/Triangulation/benchmark/Triangulation/bench5d.cpp new file mode 100644 index 00000000000..cadef41b096 --- /dev/null +++ b/Triangulation/benchmark/Triangulation/bench5d.cpp @@ -0,0 +1,56 @@ + +#include +#include +#include +#include +#include +#include +#include +#include + +typedef CGAL::Epick_d< CGAL::Dimension_tag<5> > K; +typedef CGAL::Triangulation Triangulation; + + +int main() +{ + const int D = 5; // we work in Euclidean 5-space + + std::vector points; + std::ifstream in("points.txt"); + Triangulation::Point p; + int d; + in >> d; + assert(d == D); + int n; + in >> n; + points.reserve(n); + while (in >> p) { + points.push_back(p); + } + + CGAL::Timer timer; + timer.start(); + Triangulation t(D); // create triangulation + assert(t.empty()); + + //std::array ar = { 0, 0, 0, 0, 0 }; + //Triangulation::Point orig(ar.begin(), ar.end()); + //t.insert(orig); // insert origin + t.insert(points.begin(), points.end()); // compute triangulation + + std::cout << "Time taken to insert "<< points.size() << " points: " << timer.time() << " seconds." << std::endl; + timer.reset(); + assert( t.is_valid() ); + // - - - - - - - - - - - - - - - - - - - - - - - - STEP 2 + typedef Triangulation::Face Face; + typedef std::vector Faces; + Faces edges; + std::back_insert_iterator out(edges); + t.tds().incident_faces(t.infinite_vertex(), 1, out); + // collect faces of dimension 1 (edges) incident to the infinite vertex + std::cout << "There are " << edges.size() + << " vertices on the convex hull." << std::endl; + std::cout << "Time taken to find edges: " << timer.time() << " seconds." << std::endl; + return 0; +} \ No newline at end of file diff --git a/Triangulation/benchmark/Triangulation/generate_d.cpp b/Triangulation/benchmark/Triangulation/generate_d.cpp new file mode 100644 index 00000000000..32f8da1a300 --- /dev/null +++ b/Triangulation/benchmark/Triangulation/generate_d.cpp @@ -0,0 +1,24 @@ +#include +#include +#include + +int main() { + CGAL::Random rng; + std::cout.precision(17); + std ::cout << 5 << std::endl; + std::cout << 100000 << std::endl; + for(int i = 0; i < 100000; ++i) { + std::array arr; + double slength = 0; + for(int i = 0; i < arr.size(); ++i) { + arr[i] = rng.get_double(-1, 1); + slength += arr[i] * arr[i]; + } + slength = std::sqrt(slength); + for(int i = 0; i < arr.size(); ++i) { + arr[i] /= slength; + } + std::cout << "5 " << arr[0] << " " << arr[1] << " " << arr[2] << " " << arr[3] << " " << arr[4] << std::endl; + } + return 0; +} From 8cacb534a562c99eacba0f46645d346914628110 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Wed, 23 Apr 2025 09:42:15 +0100 Subject: [PATCH 02/49] needs one more point --- NewKernel_d/include/CGAL/NewKernel_d/orientationC5.h | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/NewKernel_d/include/CGAL/NewKernel_d/orientationC5.h b/NewKernel_d/include/CGAL/NewKernel_d/orientationC5.h index dd663f4a9ee..a2a927aaf26 100644 --- a/NewKernel_d/include/CGAL/NewKernel_d/orientationC5.h +++ b/NewKernel_d/include/CGAL/NewKernel_d/orientationC5.h @@ -51,7 +51,8 @@ orientationC5(RT p0, RT p1, RT p2, RT p3, RT p4, RT q0, RT q1, RT q2, RT q3, RT q4, RT r0, RT r1, RT r2, RT r3, RT r4, RT s0, RT s1, RT s2, RT s3, RT s4, - RT t0, RT t1, RT t2, RT t3, RT t4) + RT t0, RT t1, RT t2, RT t3, RT t4, + RT u0, RT u1, RT u2, RT u3, RT u4) { RT pq0 = q0 - p0; RT pq1 = q1 - p1; @@ -73,10 +74,16 @@ orientationC5(RT p0, RT p1, RT p2, RT p3, RT p4, RT pt2 = t2 - p2; RT pt3 = t3 - p3; RT pt4 = t4 - p4; + RT pu0 = t0 - p0; + RT pu1 = u1 - p1; + RT pu2 = u2 - p2; + RT pu3 = u3 - p3; + RT pu4 = u4 - p4; RT det = determinant(pq0, pq1, pq2, pq3, pq4, pr0, pr1, pr2, pr3, pr4, ps0, ps1, ps2, ps3, ps4, - pt0, pt1, pt2, pt3, pt4); + pt0, pt1, pt2, pt3, pt4, + pu0, pu1, pu2, pu3, pu4); if (det > 0) return 1; if (det < 0) return -1; From f21e9b18ba6b3fb3d6af0626e6ab1676d86d0ae5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 23 Apr 2025 11:07:19 +0200 Subject: [PATCH 03/49] update predicate source --- .../include/CGAL/NewKernel_d/orientationC5.h | 70 +++++++++---------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/NewKernel_d/include/CGAL/NewKernel_d/orientationC5.h b/NewKernel_d/include/CGAL/NewKernel_d/orientationC5.h index a2a927aaf26..cbe8e30c501 100644 --- a/NewKernel_d/include/CGAL/NewKernel_d/orientationC5.h +++ b/NewKernel_d/include/CGAL/NewKernel_d/orientationC5.h @@ -1,6 +1,3 @@ - - - typedef double RT; RT @@ -11,36 +8,35 @@ determinant( RT a30, RT a31, RT a32, RT a33, RT a34, RT a40, RT a41, RT a42, RT a43, RT a44) { -// First compute the det2x2 - const RT m01 = a10*a01 - a00*a11; - const RT m02 = a20*a01 - a00*a21; - const RT m03 = a30*a01 - a00*a31; - const RT m04 = a40*a01 - a00*a41; - const RT m12 = a20*a11 - a10*a21; - const RT m13 = a30*a11 - a10*a31; - const RT m14 = a40*a11 - a10*a41; - const RT m23 = a30*a21 - a20*a31; - const RT m24 = a40*a21 - a20*a41; - const RT m34 = a40*a31 - a30*a41; -// Now compute the minors of rank 3 - const RT m012 = m12*a02 - m02*a12 + m01*a22; - const RT m013 = m13*a02 - m03*a12 + m01*a32; - const RT m014 = m14*a02 - m04*a12 + m01*a42; - const RT m023 = m23*a02 - m03*a22 + m02*a32; - const RT m024 = m24*a02 - m04*a22 + m02*a42; - const RT m034 = m34*a02 - m04*a32 + m03*a42; - const RT m123 = m23*a12 - m13*a22 + m12*a32; - const RT m124 = m24*a12 - m14*a22 + m12*a42; - const RT m134 = m34*a12 - m14*a32 + m13*a42; - const RT m234 = m34*a22 - m24*a32 + m23*a42; -// Now compute the minors of rank 4 - const RT m0123 = m123*a03 - m023*a13 + m013*a23 - m012*a33; - const RT m0124 = m124*a03 - m024*a13 + m014*a23 - m012*a43; - const RT m0134 = m134*a03 - m034*a13 + m014*a33 - m013*a43; - const RT m0234 = m234*a03 - m034*a23 + m024*a33 - m023*a43; - const RT m1234 = m234*a13 - m134*a23 + m124*a33 - m123*a43; -// Now compute the minors of rank 5 - const RT m01234 = m1234*a04 - m0234*a14 + m0134*a24 - m0124*a34 + m0123*a44; + RT m01 = a10*a01 - a00*a11; + RT m02 = a20*a01 - a00*a21; + RT m03 = a30*a01 - a00*a31; + RT m04 = a40*a01 - a00*a41; + RT m12 = a20*a11 - a10*a21; + RT m13 = a30*a11 - a10*a31; + RT m14 = a40*a11 - a10*a41; + RT m23 = a30*a21 - a20*a31; + RT m24 = a40*a21 - a20*a41; + RT m34 = a40*a31 - a30*a41; + + RT m012 = m12*a02 - m02*a12 + m01*a22; + RT m013 = m13*a02 - m03*a12 + m01*a32; + RT m014 = m14*a02 - m04*a12 + m01*a42; + RT m023 = m23*a02 - m03*a22 + m02*a32; + RT m024 = m24*a02 - m04*a22 + m02*a42; + RT m034 = m34*a02 - m04*a32 + m03*a42; + RT m123 = m23*a12 - m13*a22 + m12*a32; + RT m124 = m24*a12 - m14*a22 + m12*a42; + RT m134 = m34*a12 - m14*a32 + m13*a42; + RT m234 = m34*a22 - m24*a32 + m23*a42; + + RT m0123 = m123*a03 - m023*a13 + m013*a23 - m012*a33; + RT m0124 = m124*a03 - m024*a13 + m014*a23 - m012*a43; + RT m0134 = m134*a03 - m034*a13 + m014*a33 - m013*a43; + RT m0234 = m234*a03 - m034*a23 + m024*a33 - m023*a43; + RT m1234 = m234*a13 - m134*a23 + m124*a33 - m123*a43; + + RT m01234 = m1234*a04 - m0234*a14 + m0134*a24 - m0124*a34 + m0123*a44; return m01234; } @@ -53,6 +49,11 @@ orientationC5(RT p0, RT p1, RT p2, RT p3, RT p4, RT s0, RT s1, RT s2, RT s3, RT s4, RT t0, RT t1, RT t2, RT t3, RT t4, RT u0, RT u1, RT u2, RT u3, RT u4) +group p0 q0 r0 s0 t0 u0; +group p1 q1 r1 s1 t1 u1; +group p2 q2 r2 s2 t2 u2; +group p3 q3 r3 s3 t3 u3; +group p4 q4 r4 s4 t4 u4; { RT pq0 = q0 - p0; RT pq1 = q1 - p1; @@ -85,6 +86,5 @@ orientationC5(RT p0, RT p1, RT p2, RT p3, RT p4, pt0, pt1, pt2, pt3, pt4, pu0, pu1, pu2, pu3, pu4); - if (det > 0) return 1; - if (det < 0) return -1; + return sign(det); } From e622f3e03ebb86d1cc3a0ccb7dd1be236040eb58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 23 Apr 2025 11:08:12 +0200 Subject: [PATCH 04/49] replace with FPG generated code --- .../include/CGAL/NewKernel_d/orientationC5.h | 356 +++++++++++++----- 1 file changed, 271 insertions(+), 85 deletions(-) diff --git a/NewKernel_d/include/CGAL/NewKernel_d/orientationC5.h b/NewKernel_d/include/CGAL/NewKernel_d/orientationC5.h index cbe8e30c501..5a07bc09d5e 100644 --- a/NewKernel_d/include/CGAL/NewKernel_d/orientationC5.h +++ b/NewKernel_d/include/CGAL/NewKernel_d/orientationC5.h @@ -1,90 +1,276 @@ -typedef double RT; -RT -determinant( - RT a00, RT a01, RT a02, RT a03, RT a04, - RT a10, RT a11, RT a12, RT a13, RT a14, - RT a20, RT a21, RT a22, RT a23, RT a24, - RT a30, RT a31, RT a32, RT a33, RT a34, - RT a40, RT a41, RT a42, RT a43, RT a44) -{ - RT m01 = a10*a01 - a00*a11; - RT m02 = a20*a01 - a00*a21; - RT m03 = a30*a01 - a00*a31; - RT m04 = a40*a01 - a00*a41; - RT m12 = a20*a11 - a10*a21; - RT m13 = a30*a11 - a10*a31; - RT m14 = a40*a11 - a10*a41; - RT m23 = a30*a21 - a20*a31; - RT m24 = a40*a21 - a20*a41; - RT m34 = a40*a31 - a30*a41; - - RT m012 = m12*a02 - m02*a12 + m01*a22; - RT m013 = m13*a02 - m03*a12 + m01*a32; - RT m014 = m14*a02 - m04*a12 + m01*a42; - RT m023 = m23*a02 - m03*a22 + m02*a32; - RT m024 = m24*a02 - m04*a22 + m02*a42; - RT m034 = m34*a02 - m04*a32 + m03*a42; - RT m123 = m23*a12 - m13*a22 + m12*a32; - RT m124 = m24*a12 - m14*a22 + m12*a42; - RT m134 = m34*a12 - m14*a32 + m13*a42; - RT m234 = m34*a22 - m24*a32 + m23*a42; - - RT m0123 = m123*a03 - m023*a13 + m013*a23 - m012*a33; - RT m0124 = m124*a03 - m024*a13 + m014*a23 - m012*a43; - RT m0134 = m134*a03 - m034*a13 + m014*a33 - m013*a43; - RT m0234 = m234*a03 - m034*a23 + m024*a33 - m023*a43; - RT m1234 = m234*a13 - m134*a23 + m124*a33 - m123*a43; - - RT m01234 = m1234*a04 - m0234*a14 + m0134*a24 - m0124*a34 + m0123*a44; - return m01234; +inline double determinant( double a00, double a01, double a02, double a03, double a04, double a10, double a11, double a12, double a13, double a14, double a20, double a21, double a22, double a23, double a24, double a30, double a31, double a32, double a33, double a34, double a40, double a41, double a42, double a43, double a44) { + double m01; + m01 = ((a10 * a01) - (a00 * a11)); + double m02; + m02 = ((a20 * a01) - (a00 * a21)); + double m03; + m03 = ((a30 * a01) - (a00 * a31)); + double m04; + m04 = ((a40 * a01) - (a00 * a41)); + double m12; + m12 = ((a20 * a11) - (a10 * a21)); + double m13; + m13 = ((a30 * a11) - (a10 * a31)); + double m14; + m14 = ((a40 * a11) - (a10 * a41)); + double m23; + m23 = ((a30 * a21) - (a20 * a31)); + double m24; + m24 = ((a40 * a21) - (a20 * a41)); + double m34; + m34 = ((a40 * a31) - (a30 * a41)); + double m012; + m012 = (((m12 * a02) - (m02 * a12)) + (m01 * a22)); + double m013; + m013 = (((m13 * a02) - (m03 * a12)) + (m01 * a32)); + double m014; + m014 = (((m14 * a02) - (m04 * a12)) + (m01 * a42)); + double m023; + m023 = (((m23 * a02) - (m03 * a22)) + (m02 * a32)); + double m024; + m024 = (((m24 * a02) - (m04 * a22)) + (m02 * a42)); + double m034; + m034 = (((m34 * a02) - (m04 * a32)) + (m03 * a42)); + double m123; + m123 = (((m23 * a12) - (m13 * a22)) + (m12 * a32)); + double m124; + m124 = (((m24 * a12) - (m14 * a22)) + (m12 * a42)); + double m134; + m134 = (((m34 * a12) - (m14 * a32)) + (m13 * a42)); + double m234; + m234 = (((m34 * a22) - (m24 * a32)) + (m23 * a42)); + double m0123; + m0123 = ((((m123 * a03) - (m023 * a13)) + (m013 * a23)) - (m012 * a33)); + double m0124; + m0124 = ((((m124 * a03) - (m024 * a13)) + (m014 * a23)) - (m012 * a43)); + double m0134; + m0134 = ((((m134 * a03) - (m034 * a13)) + (m014 * a33)) - (m013 * a43)); + double m0234; + m0234 = ((((m234 * a03) - (m034 * a23)) + (m024 * a33)) - (m023 * a43)); + double m1234; + m1234 = ((((m234 * a13) - (m134 * a23)) + (m124 * a33)) - (m123 * a43)); + double m01234; + m01234 = (((((m1234 * a04) - (m0234 * a14)) + (m0134 * a24)) - (m0124 * a34)) + (m0123 * a44)); + return m01234; } - -int -orientationC5(RT p0, RT p1, RT p2, RT p3, RT p4, - RT q0, RT q1, RT q2, RT q3, RT q4, - RT r0, RT r1, RT r2, RT r3, RT r4, - RT s0, RT s1, RT s2, RT s3, RT s4, - RT t0, RT t1, RT t2, RT t3, RT t4, - RT u0, RT u1, RT u2, RT u3, RT u4) -group p0 q0 r0 s0 t0 u0; -group p1 q1 r1 s1 t1 u1; -group p2 q2 r2 s2 t2 u2; -group p3 q3 r3 s3 t3 u3; -group p4 q4 r4 s4 t4 u4; -{ - RT pq0 = q0 - p0; - RT pq1 = q1 - p1; - RT pq2 = q2 - p2; - RT pq3 = q3 - p3; - RT pq4 = q4 - p4; - RT pr0 = r0 - p0; - RT pr1 = r1 - p1; - RT pr2 = r2 - p2; - RT pr3 = r3 - p3; - RT pr4 = r4 - p4; - RT ps0 = s0 - p0; - RT ps1 = s1 - p1; - RT ps2 = s2 - p2; - RT ps3 = s3 - p3; - RT ps4 = s4 - p4; - RT pt0 = t0 - p0; - RT pt1 = t1 - p1; - RT pt2 = t2 - p2; - RT pt3 = t3 - p3; - RT pt4 = t4 - p4; - RT pu0 = t0 - p0; - RT pu1 = u1 - p1; - RT pu2 = u2 - p2; - RT pu3 = u3 - p3; - RT pu4 = u4 - p4; - RT det = determinant(pq0, pq1, pq2, pq3, pq4, - pr0, pr1, pr2, pr3, pr4, - ps0, ps1, ps2, ps3, ps4, - pt0, pt1, pt2, pt3, pt4, - pu0, pu1, pu2, pu3, pu4); - - return sign(det); +inline int orientationC5( double p0, double p1, double p2, double p3, double p4, double q0, double q1, double q2, double q3, double q4, double r0, double r1, double r2, double r3, double r4, double s0, double s1, double s2, double s3, double s4, double t0, double t1, double t2, double t3, double t4, double u0, double u1, double u2, double u3, double u4) { + double pq0; + pq0 = (q0 - p0); + double pq1; + pq1 = (q1 - p1); + double pq2; + pq2 = (q2 - p2); + double pq3; + pq3 = (q3 - p3); + double pq4; + pq4 = (q4 - p4); + double pr0; + pr0 = (r0 - p0); + double pr1; + pr1 = (r1 - p1); + double pr2; + pr2 = (r2 - p2); + double pr3; + pr3 = (r3 - p3); + double pr4; + pr4 = (r4 - p4); + double ps0; + ps0 = (s0 - p0); + double ps1; + ps1 = (s1 - p1); + double ps2; + ps2 = (s2 - p2); + double ps3; + ps3 = (s3 - p3); + double ps4; + ps4 = (s4 - p4); + double pt0; + pt0 = (t0 - p0); + double pt1; + pt1 = (t1 - p1); + double pt2; + pt2 = (t2 - p2); + double pt3; + pt3 = (t3 - p3); + double pt4; + pt4 = (t4 - p4); + double pu0; + pu0 = (t0 - p0); + double pu1; + pu1 = (u1 - p1); + double pu2; + pu2 = (u2 - p2); + double pu3; + pu3 = (u3 - p3); + double pu4; + pu4 = (u4 - p4); + double det; + det = determinant( pq0, pq1, pq2, pq3, pq4, pr0, pr1, pr2, pr3, pr4, ps0, ps1, ps2, ps3, ps4, pt0, pt1, pt2, pt3, pt4, pu0, pu1, pu2, pu3, pu4 ); + int int_tmp_result; + double eps; + double max1 = fabs(pq0); + if( (max1 < fabs(pr0)) ) + { + max1 = fabs(pr0); + } + if( (max1 < fabs(ps0)) ) + { + max1 = fabs(ps0); + } + if( (max1 < fabs(pt0)) ) + { + max1 = fabs(pt0); + } + if( (max1 < fabs(pu0)) ) + { + max1 = fabs(pu0); + } + double max2 = fabs(pq1); + if( (max2 < fabs(pr1)) ) + { + max2 = fabs(pr1); + } + if( (max2 < fabs(ps1)) ) + { + max2 = fabs(ps1); + } + if( (max2 < fabs(pt1)) ) + { + max2 = fabs(pt1); + } + if( (max2 < fabs(pu1)) ) + { + max2 = fabs(pu1); + } + double max3 = fabs(pq2); + if( (max3 < fabs(pr2)) ) + { + max3 = fabs(pr2); + } + if( (max3 < fabs(ps2)) ) + { + max3 = fabs(ps2); + } + if( (max3 < fabs(pt2)) ) + { + max3 = fabs(pt2); + } + if( (max3 < fabs(pu2)) ) + { + max3 = fabs(pu2); + } + double max4 = fabs(pq3); + if( (max4 < fabs(pr3)) ) + { + max4 = fabs(pr3); + } + if( (max4 < fabs(ps3)) ) + { + max4 = fabs(ps3); + } + if( (max4 < fabs(pt3)) ) + { + max4 = fabs(pt3); + } + if( (max4 < fabs(pu3)) ) + { + max4 = fabs(pu3); + } + double max5 = fabs(pq4); + if( (max5 < fabs(pr4)) ) + { + max5 = fabs(pr4); + } + if( (max5 < fabs(ps4)) ) + { + max5 = fabs(ps4); + } + if( (max5 < fabs(pt4)) ) + { + max5 = fabs(pt4); + } + if( (max5 < fabs(pu4)) ) + { + max5 = fabs(pu4); + } + double lower_bound_1; + double upper_bound_1; + lower_bound_1 = max5; + upper_bound_1 = max5; + if( (max1 < lower_bound_1) ) + { + lower_bound_1 = max1; + } + else + { + if( (max1 > upper_bound_1) ) + { + upper_bound_1 = max1; + } + } + if( (max2 < lower_bound_1) ) + { + lower_bound_1 = max2; + } + else + { + if( (max2 > upper_bound_1) ) + { + upper_bound_1 = max2; + } + } + if( (max3 < lower_bound_1) ) + { + lower_bound_1 = max3; + } + else + { + if( (max3 > upper_bound_1) ) + { + upper_bound_1 = max3; + } + } + if( (max4 < lower_bound_1) ) + { + lower_bound_1 = max4; + } + else + { + if( (max4 > upper_bound_1) ) + { + upper_bound_1 = max4; + } + } + if( (lower_bound_1 < 9.99657131447050328602e-60) ) + { + return FPG_UNCERTAIN_VALUE; + } + else + { + if( (upper_bound_1 > 3.21387608851797912384e+60) ) + { + return FPG_UNCERTAIN_VALUE; + } + eps = (2.22889232457534740153e-13 * ((((max1 * max2) * max3) * max4) * max5)); + if( (det > eps) ) + { + int_tmp_result = 1; + } + else + { + if( (det < -eps) ) + { + int_tmp_result = -1; + } + else + { + return FPG_UNCERTAIN_VALUE; + } + } + } + return int_tmp_result; } + From b9f983a5150cc48e99b44f2aa9b367271a220609 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Wed, 23 Apr 2025 11:00:43 +0100 Subject: [PATCH 05/49] Add static filter for Orientation_5 --- .../internal/Static_filters/Orientation_5.h | 279 ++++++++++++++++++ 1 file changed, 279 insertions(+) create mode 100644 Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_5.h diff --git a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_5.h b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_5.h new file mode 100644 index 00000000000..fea94f5307e --- /dev/null +++ b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_5.h @@ -0,0 +1,279 @@ +// Copyright (c) 20025 GeometryFactory (France). +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org) +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial +// +// +// Author(s) : Andreas Fabri + +#ifndef CGAL_INTERNAL_STATIC_FILTERS_ORIENTATION_5_H +#define CGAL_INTERNAL_STATIC_FILTERS_ORIENTATION_5_H + +#include +#include +#include + +namespace CGAL { namespace internal { namespace Static_filters_predicates { + +template < typename K_base > +class Orientation_5 + : public K_base::Orientation_5 +{ + typedef typename K_base::Orientation Orientation; + typedef typename K_base::Point_5 Point_5; + typedef typename K_base::Orientation_5 Base; + +public: + using Base::operator(); + + Orientation + operator()(const Point_5 &p, const Point_5 &q, + const Point_5 &r, const Point_5 &s, + const Point_5 &t, const Point_5 &u) const + { + CGAL_BRANCH_PROFILER_5("semi-static failures/attempts/calls to : Orientation_5", tmp); + + double p0, p1, p2, p3, p4, q0, q1, q2, q3, q4, r0, r1, r2, r3, r4, s0, s1, s2, s3, s4; + + if (fit_in_double(p.c0(), po) && fit_in_double(p.c1(), p1) && + fit_in_double(p.c2(), p2) && fit_in_double(p.c3(), p3) && + fit_in_double(p.c4(), p4) && + fit_in_double(q.c0(), q0) && fit_in_double(q.c1(), q1) && + fit_in_double(q.c2(), q2) && fit_in_double(q.c3(), q3) && + fit_in_double(q.c4(), q4) && + fit_in_double(r.c0(), r0) && fit_in_double(r.c1(), r1) && + fit_in_double(r.c2(), r2) && fit_in_double(r.c3(), r3) && + fit_in_double(r.c4(), r4) && + fit_in_double(s.c0(), s0) && fit_in_double(s.c1(), s1) && + fit_in_double(s.c2(), s2) && fit_in_double(s.c3(), s3) && + fit_in_double(s.c4(), s4)) + { + double pq0; + pq0 = (q0 - p0); + double pq1; + pq1 = (q1 - p1); + double pq2; + pq2 = (q2 - p2); + double pq3; + pq3 = (q3 - p3); + double pq4; + pq4 = (q4 - p4); + double pr0; + pr0 = (r0 - p0); + double pr1; + pr1 = (r1 - p1); + double pr2; + pr2 = (r2 - p2); + double pr3; + pr3 = (r3 - p3); + double pr4; + pr4 = (r4 - p4); + double ps0; + ps0 = (s0 - p0); + double ps1; + ps1 = (s1 - p1); + double ps2; + ps2 = (s2 - p2); + double ps3; + ps3 = (s3 - p3); + double ps4; + ps4 = (s4 - p4); + double pt0; + pt0 = (t0 - p0); + double pt1; + pt1 = (t1 - p1); + double pt2; + pt2 = (t2 - p2); + double pt3; + pt3 = (t3 - p3); + double pt4; + pt4 = (t4 - p4); + double pu0; + pu0 = (t0 - p0); + double pu1; + pu1 = (u1 - p1); + double pu2; + pu2 = (u2 - p2); + double pu3; + pu3 = (u3 - p3); + double pu4; + pu4 = (u4 - p4); + double det; + det = determinant( pq0, pq1, pq2, pq3, pq4, pr0, pr1, pr2, pr3, pr4, ps0, ps1, ps2, ps3, ps4, pt0, pt1, pt2, pt3, pt4, pu0, pu1, pu2, pu3, pu4 ); + Orientation result = ZERO; + double eps; + double max1 = CGAL::abs(pq0); + if( (max1 < CGAL::abs(pr0)) ) + { + max1 = CGAL::abs(pr0); + } + if( (max1 < CGAL::abs(ps0)) ) + { + max1 = CGAL::abs(ps0); + } + if( (max1 < CGAL::abs(pt0)) ) + { + max1 = CGAL::abs(pt0); + } + if( (max1 < CGAL::abs(pu0)) ) + { + max1 = CGAL::abs(pu0); + } + double max2 = CGAL::abs(pq1); + if( (max2 < CGAL::abs(pr1)) ) + { + max2 = CGAL::abs(pr1); + } + if( (max2 < CGAL::abs(ps1)) ) + { + max2 = CGAL::abs(ps1); + } + if( (max2 < CGAL::abs(pt1)) ) + { + max2 = CGAL::abs(pt1); + } + if( (max2 < CGAL::abs(pu1)) ) + { + max2 = CGAL::abs(pu1); + } + double max3 = CGAL::abs(pq2); + if( (max3 < CGAL::abs(pr2)) ) + { + max3 = CGAL::abs(pr2); + } + if( (max3 < CGAL::abs(ps2)) ) + { + max3 = CGAL::abs(ps2); + } + if( (max3 < CGAL::abs(pt2)) ) + { + max3 = CGAL::abs(pt2); + } + if( (max3 < CGAL::abs(pu2)) ) + { + max3 = CGAL::abs(pu2); + } + double max4 = CGAL::abs(pq3); + if( (max4 < CGAL::abs(pr3)) ) + { + max4 = CGAL::abs(pr3); + } + if( (max4 < CGAL::abs(ps3)) ) + { + max4 = CGAL::abs(ps3); + } + if( (max4 < CGAL::abs(pt3)) ) + { + max4 = CGAL::abs(pt3); + } + if( (max4 < CGAL::abs(pu3)) ) + { + max4 = CGAL::abs(pu3); + } + double max5 = CGAL::abs(pq4); + if( (max5 < CGAL::abs(pr4)) ) + { + max5 = CGAL::abs(pr4); + } + if( (max5 < CGAL::abs(ps4)) ) + { + max5 = CGAL::abs(ps4); + } + if( (max5 < CGAL::abs(pt4)) ) + { + max5 = CGAL::abs(pt4); + } + if( (max5 < CGAL::abs(pu4)) ) + { + max5 = CGAL::abs(pu4); + } + double lower_bound_1; + double upper_bound_1; + lower_bound_1 = max5; + upper_bound_1 = max5; + if( (max1 < lower_bound_1) ) + { + lower_bound_1 = max1; + } + else + { + if( (max1 > upper_bound_1) ) + { + upper_bound_1 = max1; + } + } + if( (max2 < lower_bound_1) ) + { + lower_bound_1 = max2; + } + else + { + if( (max2 > upper_bound_1) ) + { + upper_bound_1 = max2; + } + } + if( (max3 < lower_bound_1) ) + { + lower_bound_1 = max3; + } + else + { + if( (max3 > upper_bound_1) ) + { + upper_bound_1 = max3; + } + } + if( (max4 < lower_bound_1) ) + { + lower_bound_1 = max4; + } + else + { + if( (max4 > upper_bound_1) ) + { + upper_bound_1 = max4; + } + } + if( (lower_bound_1 < 9.99657131447050328602e-60) ) + { + return Base::operator()(p, q, r, s, t, u); + } + else + { + if( (upper_bound_1 > 3.21387608851797912384e+60) ) + { + return Base::operator()(p, q, r, s, t, u); + } + eps = (2.22889232457534740153e-13 * ((((max1 * max2) * max3) * max4) * max5)); + if( (det > eps) ) + { + result = POSITIVE; + } + else + { + if( (det < -eps) ) + { + result = NEGATIVE; + } + else + { + return Base::operator()(p, q, r, s, t, u); + } + } + } + return result; + } + return Base::operator()(p, q, r, s, t, u); + } + + +}; + +} } } // namespace CGAL::internal::Static_filters_predicates + +#endif // CGAL_INTERNAL_STATIC_FILTERS_ORIENTATION_5_H From 2d0dfd2822651cf162a79e2a2ff1d6238a3d248e Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Wed, 23 Apr 2025 11:53:03 +0100 Subject: [PATCH 06/49] Compiles but segfault --- .../internal/Static_filters/Orientation_5.h | 38 +++++++----- .../NewKernel_d/Cartesian_static_filters.h | 62 +++++++++++++++++++ 2 files changed, 85 insertions(+), 15 deletions(-) diff --git a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_5.h b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_5.h index fea94f5307e..f939914b51b 100644 --- a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_5.h +++ b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_5.h @@ -35,11 +35,13 @@ public: const Point_5 &r, const Point_5 &s, const Point_5 &t, const Point_5 &u) const { - CGAL_BRANCH_PROFILER_5("semi-static failures/attempts/calls to : Orientation_5", tmp); - double p0, p1, p2, p3, p4, q0, q1, q2, q3, q4, r0, r1, r2, r3, r4, s0, s1, s2, s3, s4; + // return Base::operator()(p, q, r, s, t, u); + CGAL_BRANCH_PROFILER_3("semi-static failures/attempts/calls to : Orientation_5", tmp); - if (fit_in_double(p.c0(), po) && fit_in_double(p.c1(), p1) && + double p0, p1, p2, p3, p4, q0, q1, q2, q3, q4, r0, r1, r2, r3, r4, s0, s1, s2, s3, s4, t0, t1, t2, t3, t4, u0, u1, u2, u3, u4; + + if (fit_in_double(p.c0(), p0) && fit_in_double(p.c1(), p1) && fit_in_double(p.c2(), p2) && fit_in_double(p.c3(), p3) && fit_in_double(p.c4(), p4) && fit_in_double(q.c0(), q0) && fit_in_double(q.c1(), q1) && @@ -50,8 +52,15 @@ public: fit_in_double(r.c4(), r4) && fit_in_double(s.c0(), s0) && fit_in_double(s.c1(), s1) && fit_in_double(s.c2(), s2) && fit_in_double(s.c3(), s3) && - fit_in_double(s.c4(), s4)) + fit_in_double(s.c4(), s4) && + fit_in_double(t.c0(), t0) && fit_in_double(t.c1(), t1) && + fit_in_double(t.c2(), t2) && fit_in_double(t.c3(), t3) && + fit_in_double(t.c4(), t4) && + fit_in_double(u.c0(), u0) && fit_in_double(u.c1(), u1) && + fit_in_double(u.c2(), u2) && fit_in_double(u.c3(), u3) && + fit_in_double(u.c4(), u4)) { + Orientation should_be = Base::operator()(p, q, r, s, t, u); double pq0; pq0 = (q0 - p0); double pq1; @@ -252,21 +261,20 @@ public: eps = (2.22889232457534740153e-13 * ((((max1 * max2) * max3) * max4) * max5)); if( (det > eps) ) { - result = POSITIVE; + if(should_be != POSITIVE){ + std::cout << "result should not be POSITIVE" << std::endl; + } + return POSITIVE; } - else + + if( (det < -eps) ) { - if( (det < -eps) ) - { - result = NEGATIVE; - } - else - { - return Base::operator()(p, q, r, s, t, u); - } + if(should_be != NEGATIVE){ + std::cout << "result should not be NEGATIVE" << std::endl; + } + return NEGATIVE; } } - return result; } return Base::operator()(p, q, r, s, t, u); } diff --git a/NewKernel_d/include/CGAL/NewKernel_d/Cartesian_static_filters.h b/NewKernel_d/include/CGAL/NewKernel_d/Cartesian_static_filters.h index cd870c938e6..5ff54ab1450 100644 --- a/NewKernel_d/include/CGAL/NewKernel_d/Cartesian_static_filters.h +++ b/NewKernel_d/include/CGAL/NewKernel_d/Cartesian_static_filters.h @@ -18,6 +18,7 @@ #include #include #include +#include namespace CGAL { namespace SFA { // static filter adapter @@ -151,6 +152,54 @@ template struct Side_of_oriented_sphere_3 : private Store return typename internal::Static_filters_predicates::Side_of_oriented_sphere_3()(P(this->kernel(),c,A),P(this->kernel(),c,B),P(this->kernel(),c,C),P(this->kernel(),c,D),P(this->kernel(),c,E)); } }; + + +template struct Adapter_5 { + typedef typename Get_type::type Orientation; + typedef typename Get_type::type Oriented_side; + typedef typename Get_type::type Point; + typedef typename Get_functor::type CC; + typedef typename Get_functor::type Orientation_base; + struct Point_5 { + R_ const&r; CC const&c; Point const& p; + Point_5(R_ const&r_, CC const&c_, Point const&p_):r(r_),c(c_),p(p_){} + decltype(auto) c0()const{return c(p,0);} + decltype(auto) c1()const{return c(p,1);} + decltype(auto) c2()const{return c(p,2);} + decltype(auto) c3()const{return c(p,3);} + decltype(auto) c4()const{return c(p,4);} + }; + struct Orientation_5 { + typedef typename Get_type::type result_type; + auto operator()(Point_5 const&A, Point_5 const&B, Point_5 const&C, + Point_5 const&D, Point_5 const&E, Point_5 const&F)const{ + Point const* t[6]={&A.p,&B.p,&C.p,&D.p,&E.p,&F.p}; + return Orientation_base(A.r)(make_transforming_iterator(t+0),make_transforming_iterator(t+6)); + } + }; +}; +template struct Orientation_of_points_5 : private Store_kernel { + CGAL_FUNCTOR_INIT_STORE(Orientation_of_points_5) + typedef typename Get_type::type Point; + typedef typename Get_type::type result_type; + typedef typename Get_functor::type CC; + typedef Adapter_5 Adapter; + template result_type operator()(Iter f, Iter CGAL_assertion_code(e))const{ + CC c(this->kernel()); + Point const& A=*f; + Point const& B=*++f; + Point const& C=*++f; + Point const& D=*++f; + Point const& E=*++f; + Point const& F=*++f; + CGAL_assertion(++f==e); + typedef typename Adapter::Point_5 P; + return typename internal::Static_filters_predicates::Orientation_5()(P(this->kernel(),c,A),P(this->kernel(),c,B),P(this->kernel(),c,C), + P(this->kernel(),c,D),P(this->kernel(),c,E),P(this->kernel(),c,F)); + } +}; + + } // namespace SFA template @@ -194,5 +243,18 @@ struct Cartesian_static_filters, R_, Derived_> : public R_ { typedef SFA::Side_of_oriented_sphere_3 type; }; }; + + +template +struct Cartesian_static_filters, R_, Derived_> : public R_ { + constexpr Cartesian_static_filters(){} + constexpr Cartesian_static_filters(int d):R_(d){} + typedef Cartesian_static_filters, R_, Derived_> Self; + typedef typename Default::Get::type Derived; + template struct Functor : Inherit_functor {}; + template struct Functor { + typedef SFA::Orientation_of_points_5 type; + }; +}; } // namespace CGAL #endif From f747db2774c88c88bbf77aecfe89bcadef7069ef Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Wed, 23 Apr 2025 13:48:57 +0100 Subject: [PATCH 07/49] rewrite predicate --- .../internal/Static_filters/Orientation_5.h | 2 +- .../include/CGAL/NewKernel_d/orientationC5.h | 373 +++++------------- 2 files changed, 104 insertions(+), 271 deletions(-) diff --git a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_5.h b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_5.h index f939914b51b..0a19e729751 100644 --- a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_5.h +++ b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_5.h @@ -1,4 +1,4 @@ -// Copyright (c) 20025 GeometryFactory (France). +// Copyright (c) 2025 GeometryFactory (France). // All rights reserved. // // This file is part of CGAL (www.cgal.org) diff --git a/NewKernel_d/include/CGAL/NewKernel_d/orientationC5.h b/NewKernel_d/include/CGAL/NewKernel_d/orientationC5.h index 5a07bc09d5e..295b9698ec2 100644 --- a/NewKernel_d/include/CGAL/NewKernel_d/orientationC5.h +++ b/NewKernel_d/include/CGAL/NewKernel_d/orientationC5.h @@ -1,276 +1,109 @@ +// Copyright (c) 2025 GeometryFactory (France). +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org) +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial +// +// +// Author(s) : Andreas Fabri -inline double determinant( double a00, double a01, double a02, double a03, double a04, double a10, double a11, double a12, double a13, double a14, double a20, double a21, double a22, double a23, double a24, double a30, double a31, double a32, double a33, double a34, double a40, double a41, double a42, double a43, double a44) { - double m01; - m01 = ((a10 * a01) - (a00 * a11)); - double m02; - m02 = ((a20 * a01) - (a00 * a21)); - double m03; - m03 = ((a30 * a01) - (a00 * a31)); - double m04; - m04 = ((a40 * a01) - (a00 * a41)); - double m12; - m12 = ((a20 * a11) - (a10 * a21)); - double m13; - m13 = ((a30 * a11) - (a10 * a31)); - double m14; - m14 = ((a40 * a11) - (a10 * a41)); - double m23; - m23 = ((a30 * a21) - (a20 * a31)); - double m24; - m24 = ((a40 * a21) - (a20 * a41)); - double m34; - m34 = ((a40 * a31) - (a30 * a41)); - double m012; - m012 = (((m12 * a02) - (m02 * a12)) + (m01 * a22)); - double m013; - m013 = (((m13 * a02) - (m03 * a12)) + (m01 * a32)); - double m014; - m014 = (((m14 * a02) - (m04 * a12)) + (m01 * a42)); - double m023; - m023 = (((m23 * a02) - (m03 * a22)) + (m02 * a32)); - double m024; - m024 = (((m24 * a02) - (m04 * a22)) + (m02 * a42)); - double m034; - m034 = (((m34 * a02) - (m04 * a32)) + (m03 * a42)); - double m123; - m123 = (((m23 * a12) - (m13 * a22)) + (m12 * a32)); - double m124; - m124 = (((m24 * a12) - (m14 * a22)) + (m12 * a42)); - double m134; - m134 = (((m34 * a12) - (m14 * a32)) + (m13 * a42)); - double m234; - m234 = (((m34 * a22) - (m24 * a32)) + (m23 * a42)); - double m0123; - m0123 = ((((m123 * a03) - (m023 * a13)) + (m013 * a23)) - (m012 * a33)); - double m0124; - m0124 = ((((m124 * a03) - (m024 * a13)) + (m014 * a23)) - (m012 * a43)); - double m0134; - m0134 = ((((m134 * a03) - (m034 * a13)) + (m014 * a33)) - (m013 * a43)); - double m0234; - m0234 = ((((m234 * a03) - (m034 * a23)) + (m024 * a33)) - (m023 * a43)); - double m1234; - m1234 = ((((m234 * a13) - (m134 * a23)) + (m124 * a33)) - (m123 * a43)); - double m01234; - m01234 = (((((m1234 * a04) - (m0234 * a14)) + (m0134 * a24)) - (m0124 * a34)) + (m0123 * a44)); - return m01234; +typedef double RT; + +RT +determinant_with_1_in_row_0( + RT a01, RT a02, RT a03, RT a04, RT a05, + RT a11, RT a12, RT a13, RT a14, RT a15, + RT a21, RT a22, RT a23, RT a24, RT a25, + RT a31, RT a32, RT a33, RT a34, RT a35, + RT a41, RT a42, RT a43, RT a44, RT a45, + RT a51, RT a52, RT a53, RT a54, RT a55) +{ +// First compute the det2x2 + const RT m01 = a11 - a01; + const RT m02 = a21 - a01; + const RT m03 = a31 - a01; + const RT m04 = a41 - a01; + const RT m05 = a51 - a01; + const RT m12 = a21 - a11; + const RT m13 = a31 - a11; + const RT m14 = a41 - a11; + const RT m15 = a51 - a11; + const RT m23 = a31 - a21; + const RT m24 = a41 - a21; + const RT m25 = a51 - a21; + const RT m34 = a41 - a31; + const RT m35 = a51 - a31; + const RT m45 = a51 - a41; +// Now compute the minors of rank 3 + const RT m012 = m01*a22 - m02*a12 + m12*a02; + const RT m013 = m01*a32 - m03*a12 + m13*a02; + const RT m014 = m01*a42 - m04*a12 + m14*a02; + const RT m015 = m01*a52 - m05*a12 + m15*a02; + const RT m023 = m02*a32 - m03*a22 + m23*a02; + const RT m024 = m02*a42 - m04*a22 + m24*a02; + const RT m025 = m02*a52 - m05*a22 + m25*a02; + const RT m034 = m03*a42 - m04*a32 + m34*a02; + const RT m035 = m03*a52 - m05*a32 + m35*a02; + const RT m045 = m04*a52 - m05*a42 + m45*a02; + const RT m123 = m12*a32 - m13*a22 + m23*a12; + const RT m124 = m12*a42 - m14*a22 + m24*a12; + const RT m125 = m12*a52 - m15*a22 + m25*a12; + const RT m134 = m13*a42 - m14*a32 + m34*a12; + const RT m135 = m13*a52 - m15*a32 + m35*a12; + const RT m145 = m14*a52 - m15*a42 + m45*a12; + const RT m234 = m23*a42 - m24*a32 + m34*a22; + const RT m235 = m23*a52 - m25*a32 + m35*a22; + const RT m245 = m24*a52 - m25*a42 + m45*a22; + const RT m345 = m34*a52 - m35*a42 + m45*a32; +// Now compute the minors of rank 4 + const RT m0123 = m012*a33 - m013*a23 + m023*a13 - m123*a03; + const RT m0124 = m012*a43 - m014*a23 + m024*a13 - m124*a03; + const RT m0125 = m012*a53 - m015*a23 + m025*a13 - m125*a03; + const RT m0134 = m013*a43 - m014*a33 + m034*a13 - m134*a03; + const RT m0135 = m013*a53 - m015*a33 + m035*a13 - m135*a03; + const RT m0145 = m014*a53 - m015*a43 + m045*a13 - m145*a03; + const RT m0234 = m023*a43 - m024*a33 + m034*a23 - m234*a03; + const RT m0235 = m023*a53 - m025*a33 + m035*a23 - m235*a03; + const RT m0245 = m024*a53 - m025*a43 + m045*a23 - m245*a03; + const RT m0345 = m034*a53 - m035*a43 + m045*a33 - m345*a03; + const RT m1234 = m123*a43 - m124*a33 + m134*a23 - m234*a13; + const RT m1235 = m123*a53 - m125*a33 + m135*a23 - m235*a13; + const RT m1245 = m124*a53 - m125*a43 + m145*a23 - m245*a13; + const RT m1345 = m134*a53 - m135*a43 + m145*a33 - m345*a13; + const RT m2345 = m234*a53 - m235*a43 + m245*a33 - m345*a23; +// Now compute the minors of rank 5 + const RT m01234 = m0123*a44 - m0124*a34 + m0134*a24 - m0234*a14 + m1234*a04; + const RT m01235 = m0123*a54 - m0125*a34 + m0135*a24 - m0235*a14 + m1235*a04; + const RT m01245 = m0124*a54 - m0125*a44 + m0145*a24 - m0245*a14 + m1245*a04; + const RT m01345 = m0134*a54 - m0135*a44 + m0145*a34 - m0345*a14 + m1345*a04; + const RT m02345 = m0234*a54 - m0235*a44 + m0245*a34 - m0345*a24 + m2345*a04; + const RT m12345 = m1234*a54 - m1235*a44 + m1245*a34 - m1345*a24 + m2345*a14; +// Now compute the minors of rank 6 + const RT m012345 = m01234*a55 - m01235*a45 + m01245*a35 - m01345*a25 + + m02345*a15 - m12345*a05; + return m012345; } -inline int orientationC5( double p0, double p1, double p2, double p3, double p4, double q0, double q1, double q2, double q3, double q4, double r0, double r1, double r2, double r3, double r4, double s0, double s1, double s2, double s3, double s4, double t0, double t1, double t2, double t3, double t4, double u0, double u1, double u2, double u3, double u4) { - double pq0; - pq0 = (q0 - p0); - double pq1; - pq1 = (q1 - p1); - double pq2; - pq2 = (q2 - p2); - double pq3; - pq3 = (q3 - p3); - double pq4; - pq4 = (q4 - p4); - double pr0; - pr0 = (r0 - p0); - double pr1; - pr1 = (r1 - p1); - double pr2; - pr2 = (r2 - p2); - double pr3; - pr3 = (r3 - p3); - double pr4; - pr4 = (r4 - p4); - double ps0; - ps0 = (s0 - p0); - double ps1; - ps1 = (s1 - p1); - double ps2; - ps2 = (s2 - p2); - double ps3; - ps3 = (s3 - p3); - double ps4; - ps4 = (s4 - p4); - double pt0; - pt0 = (t0 - p0); - double pt1; - pt1 = (t1 - p1); - double pt2; - pt2 = (t2 - p2); - double pt3; - pt3 = (t3 - p3); - double pt4; - pt4 = (t4 - p4); - double pu0; - pu0 = (t0 - p0); - double pu1; - pu1 = (u1 - p1); - double pu2; - pu2 = (u2 - p2); - double pu3; - pu3 = (u3 - p3); - double pu4; - pu4 = (u4 - p4); - double det; - det = determinant( pq0, pq1, pq2, pq3, pq4, pr0, pr1, pr2, pr3, pr4, ps0, ps1, ps2, ps3, ps4, pt0, pt1, pt2, pt3, pt4, pu0, pu1, pu2, pu3, pu4 ); - int int_tmp_result; - double eps; - double max1 = fabs(pq0); - if( (max1 < fabs(pr0)) ) - { - max1 = fabs(pr0); - } - if( (max1 < fabs(ps0)) ) - { - max1 = fabs(ps0); - } - if( (max1 < fabs(pt0)) ) - { - max1 = fabs(pt0); - } - if( (max1 < fabs(pu0)) ) - { - max1 = fabs(pu0); - } - double max2 = fabs(pq1); - if( (max2 < fabs(pr1)) ) - { - max2 = fabs(pr1); - } - if( (max2 < fabs(ps1)) ) - { - max2 = fabs(ps1); - } - if( (max2 < fabs(pt1)) ) - { - max2 = fabs(pt1); - } - if( (max2 < fabs(pu1)) ) - { - max2 = fabs(pu1); - } - double max3 = fabs(pq2); - if( (max3 < fabs(pr2)) ) - { - max3 = fabs(pr2); - } - if( (max3 < fabs(ps2)) ) - { - max3 = fabs(ps2); - } - if( (max3 < fabs(pt2)) ) - { - max3 = fabs(pt2); - } - if( (max3 < fabs(pu2)) ) - { - max3 = fabs(pu2); - } - double max4 = fabs(pq3); - if( (max4 < fabs(pr3)) ) - { - max4 = fabs(pr3); - } - if( (max4 < fabs(ps3)) ) - { - max4 = fabs(ps3); - } - if( (max4 < fabs(pt3)) ) - { - max4 = fabs(pt3); - } - if( (max4 < fabs(pu3)) ) - { - max4 = fabs(pu3); - } - double max5 = fabs(pq4); - if( (max5 < fabs(pr4)) ) - { - max5 = fabs(pr4); - } - if( (max5 < fabs(ps4)) ) - { - max5 = fabs(ps4); - } - if( (max5 < fabs(pt4)) ) - { - max5 = fabs(pt4); - } - if( (max5 < fabs(pu4)) ) - { - max5 = fabs(pu4); - } - double lower_bound_1; - double upper_bound_1; - lower_bound_1 = max5; - upper_bound_1 = max5; - if( (max1 < lower_bound_1) ) - { - lower_bound_1 = max1; - } - else - { - if( (max1 > upper_bound_1) ) - { - upper_bound_1 = max1; - } - } - if( (max2 < lower_bound_1) ) - { - lower_bound_1 = max2; - } - else - { - if( (max2 > upper_bound_1) ) - { - upper_bound_1 = max2; - } - } - if( (max3 < lower_bound_1) ) - { - lower_bound_1 = max3; - } - else - { - if( (max3 > upper_bound_1) ) - { - upper_bound_1 = max3; - } - } - if( (max4 < lower_bound_1) ) - { - lower_bound_1 = max4; - } - else - { - if( (max4 > upper_bound_1) ) - { - upper_bound_1 = max4; - } - } - if( (lower_bound_1 < 9.99657131447050328602e-60) ) - { - return FPG_UNCERTAIN_VALUE; - } - else - { - if( (upper_bound_1 > 3.21387608851797912384e+60) ) - { - return FPG_UNCERTAIN_VALUE; - } - eps = (2.22889232457534740153e-13 * ((((max1 * max2) * max3) * max4) * max5)); - if( (det > eps) ) - { - int_tmp_result = 1; - } - else - { - if( (det < -eps) ) - { - int_tmp_result = -1; - } - else - { - return FPG_UNCERTAIN_VALUE; - } - } - } - return int_tmp_result; + +inline int orientationC5( double p0, double p1, double p2, double p3, double p4, + double q0, double q1, double q2, double q3, double q4, + double r0, double r1, double r2, double r3, double r4, + double s0, double s1, double s2, double s3, double s4, + double t0, double t1, double t2, double t3, double t4, + double u0, double u1, double u2, double u3, double u4) +{ + RT det = determinant_with_1_in_row_0(p0, p1, p2, p3, p4, + q0, q1, q2, q3, q4, + r0, r1, r2, r3, r4, + s0, s1, s2, s3, s4, + t0, t1, t2, t3, t4, + u0, u1, u2, u3, u4); + if (det > 0) return 1; + if (det < 0) return -1; + return 0; } From 1c07d4c3b49124ac78e0bbf77479c6c07a2668c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 23 Apr 2025 14:55:29 +0200 Subject: [PATCH 08/49] FPG generated version --- .../include/CGAL/NewKernel_d/orientationC5.h | 549 +++++++++++++++--- 1 file changed, 457 insertions(+), 92 deletions(-) diff --git a/NewKernel_d/include/CGAL/NewKernel_d/orientationC5.h b/NewKernel_d/include/CGAL/NewKernel_d/orientationC5.h index 295b9698ec2..6433d905b4f 100644 --- a/NewKernel_d/include/CGAL/NewKernel_d/orientationC5.h +++ b/NewKernel_d/include/CGAL/NewKernel_d/orientationC5.h @@ -10,100 +10,465 @@ // // Author(s) : Andreas Fabri -typedef double RT; -RT -determinant_with_1_in_row_0( - RT a01, RT a02, RT a03, RT a04, RT a05, - RT a11, RT a12, RT a13, RT a14, RT a15, - RT a21, RT a22, RT a23, RT a24, RT a25, - RT a31, RT a32, RT a33, RT a34, RT a35, - RT a41, RT a42, RT a43, RT a44, RT a45, - RT a51, RT a52, RT a53, RT a54, RT a55) -{ -// First compute the det2x2 - const RT m01 = a11 - a01; - const RT m02 = a21 - a01; - const RT m03 = a31 - a01; - const RT m04 = a41 - a01; - const RT m05 = a51 - a01; - const RT m12 = a21 - a11; - const RT m13 = a31 - a11; - const RT m14 = a41 - a11; - const RT m15 = a51 - a11; - const RT m23 = a31 - a21; - const RT m24 = a41 - a21; - const RT m25 = a51 - a21; - const RT m34 = a41 - a31; - const RT m35 = a51 - a31; - const RT m45 = a51 - a41; -// Now compute the minors of rank 3 - const RT m012 = m01*a22 - m02*a12 + m12*a02; - const RT m013 = m01*a32 - m03*a12 + m13*a02; - const RT m014 = m01*a42 - m04*a12 + m14*a02; - const RT m015 = m01*a52 - m05*a12 + m15*a02; - const RT m023 = m02*a32 - m03*a22 + m23*a02; - const RT m024 = m02*a42 - m04*a22 + m24*a02; - const RT m025 = m02*a52 - m05*a22 + m25*a02; - const RT m034 = m03*a42 - m04*a32 + m34*a02; - const RT m035 = m03*a52 - m05*a32 + m35*a02; - const RT m045 = m04*a52 - m05*a42 + m45*a02; - const RT m123 = m12*a32 - m13*a22 + m23*a12; - const RT m124 = m12*a42 - m14*a22 + m24*a12; - const RT m125 = m12*a52 - m15*a22 + m25*a12; - const RT m134 = m13*a42 - m14*a32 + m34*a12; - const RT m135 = m13*a52 - m15*a32 + m35*a12; - const RT m145 = m14*a52 - m15*a42 + m45*a12; - const RT m234 = m23*a42 - m24*a32 + m34*a22; - const RT m235 = m23*a52 - m25*a32 + m35*a22; - const RT m245 = m24*a52 - m25*a42 + m45*a22; - const RT m345 = m34*a52 - m35*a42 + m45*a32; -// Now compute the minors of rank 4 - const RT m0123 = m012*a33 - m013*a23 + m023*a13 - m123*a03; - const RT m0124 = m012*a43 - m014*a23 + m024*a13 - m124*a03; - const RT m0125 = m012*a53 - m015*a23 + m025*a13 - m125*a03; - const RT m0134 = m013*a43 - m014*a33 + m034*a13 - m134*a03; - const RT m0135 = m013*a53 - m015*a33 + m035*a13 - m135*a03; - const RT m0145 = m014*a53 - m015*a43 + m045*a13 - m145*a03; - const RT m0234 = m023*a43 - m024*a33 + m034*a23 - m234*a03; - const RT m0235 = m023*a53 - m025*a33 + m035*a23 - m235*a03; - const RT m0245 = m024*a53 - m025*a43 + m045*a23 - m245*a03; - const RT m0345 = m034*a53 - m035*a43 + m045*a33 - m345*a03; - const RT m1234 = m123*a43 - m124*a33 + m134*a23 - m234*a13; - const RT m1235 = m123*a53 - m125*a33 + m135*a23 - m235*a13; - const RT m1245 = m124*a53 - m125*a43 + m145*a23 - m245*a13; - const RT m1345 = m134*a53 - m135*a43 + m145*a33 - m345*a13; - const RT m2345 = m234*a53 - m235*a43 + m245*a33 - m345*a23; -// Now compute the minors of rank 5 - const RT m01234 = m0123*a44 - m0124*a34 + m0134*a24 - m0234*a14 + m1234*a04; - const RT m01235 = m0123*a54 - m0125*a34 + m0135*a24 - m0235*a14 + m1235*a04; - const RT m01245 = m0124*a54 - m0125*a44 + m0145*a24 - m0245*a14 + m1245*a04; - const RT m01345 = m0134*a54 - m0135*a44 + m0145*a34 - m0345*a14 + m1345*a04; - const RT m02345 = m0234*a54 - m0235*a44 + m0245*a34 - m0345*a24 + m2345*a04; - const RT m12345 = m1234*a54 - m1235*a44 + m1245*a34 - m1345*a24 + m2345*a14; -// Now compute the minors of rank 6 - const RT m012345 = m01234*a55 - m01235*a45 + m01245*a35 - m01345*a25 - + m02345*a15 - m12345*a05; - return m012345; +inline double determinant_with_1_in_row_0( double a01, double a02, double a03, double a04, double a05, double a11, double a12, double a13, double a14, double a15, double a21, double a22, double a23, double a24, double a25, double a31, double a32, double a33, double a34, double a35, double a41, double a42, double a43, double a44, double a45, double a51, double a52, double a53, double a54, double a55) { + double m01; + m01 = (a11 - a01); + double m02; + m02 = (a21 - a01); + double m03; + m03 = (a31 - a01); + double m04; + m04 = (a41 - a01); + double m05; + m05 = (a51 - a01); + double m12; + m12 = (a21 - a11); + double m13; + m13 = (a31 - a11); + double m14; + m14 = (a41 - a11); + double m15; + m15 = (a51 - a11); + double m23; + m23 = (a31 - a21); + double m24; + m24 = (a41 - a21); + double m25; + m25 = (a51 - a21); + double m34; + m34 = (a41 - a31); + double m35; + m35 = (a51 - a31); + double m45; + m45 = (a51 - a41); + double m012; + m012 = (((m01 * a22) - (m02 * a12)) + (m12 * a02)); + double m013; + m013 = (((m01 * a32) - (m03 * a12)) + (m13 * a02)); + double m014; + m014 = (((m01 * a42) - (m04 * a12)) + (m14 * a02)); + double m015; + m015 = (((m01 * a52) - (m05 * a12)) + (m15 * a02)); + double m023; + m023 = (((m02 * a32) - (m03 * a22)) + (m23 * a02)); + double m024; + m024 = (((m02 * a42) - (m04 * a22)) + (m24 * a02)); + double m025; + m025 = (((m02 * a52) - (m05 * a22)) + (m25 * a02)); + double m034; + m034 = (((m03 * a42) - (m04 * a32)) + (m34 * a02)); + double m035; + m035 = (((m03 * a52) - (m05 * a32)) + (m35 * a02)); + double m045; + m045 = (((m04 * a52) - (m05 * a42)) + (m45 * a02)); + double m123; + m123 = (((m12 * a32) - (m13 * a22)) + (m23 * a12)); + double m124; + m124 = (((m12 * a42) - (m14 * a22)) + (m24 * a12)); + double m125; + m125 = (((m12 * a52) - (m15 * a22)) + (m25 * a12)); + double m134; + m134 = (((m13 * a42) - (m14 * a32)) + (m34 * a12)); + double m135; + m135 = (((m13 * a52) - (m15 * a32)) + (m35 * a12)); + double m145; + m145 = (((m14 * a52) - (m15 * a42)) + (m45 * a12)); + double m234; + m234 = (((m23 * a42) - (m24 * a32)) + (m34 * a22)); + double m235; + m235 = (((m23 * a52) - (m25 * a32)) + (m35 * a22)); + double m245; + m245 = (((m24 * a52) - (m25 * a42)) + (m45 * a22)); + double m345; + m345 = (((m34 * a52) - (m35 * a42)) + (m45 * a32)); + double m0123; + m0123 = ((((m012 * a33) - (m013 * a23)) + (m023 * a13)) - (m123 * a03)); + double m0124; + m0124 = ((((m012 * a43) - (m014 * a23)) + (m024 * a13)) - (m124 * a03)); + double m0125; + m0125 = ((((m012 * a53) - (m015 * a23)) + (m025 * a13)) - (m125 * a03)); + double m0134; + m0134 = ((((m013 * a43) - (m014 * a33)) + (m034 * a13)) - (m134 * a03)); + double m0135; + m0135 = ((((m013 * a53) - (m015 * a33)) + (m035 * a13)) - (m135 * a03)); + double m0145; + m0145 = ((((m014 * a53) - (m015 * a43)) + (m045 * a13)) - (m145 * a03)); + double m0234; + m0234 = ((((m023 * a43) - (m024 * a33)) + (m034 * a23)) - (m234 * a03)); + double m0235; + m0235 = ((((m023 * a53) - (m025 * a33)) + (m035 * a23)) - (m235 * a03)); + double m0245; + m0245 = ((((m024 * a53) - (m025 * a43)) + (m045 * a23)) - (m245 * a03)); + double m0345; + m0345 = ((((m034 * a53) - (m035 * a43)) + (m045 * a33)) - (m345 * a03)); + double m1234; + m1234 = ((((m123 * a43) - (m124 * a33)) + (m134 * a23)) - (m234 * a13)); + double m1235; + m1235 = ((((m123 * a53) - (m125 * a33)) + (m135 * a23)) - (m235 * a13)); + double m1245; + m1245 = ((((m124 * a53) - (m125 * a43)) + (m145 * a23)) - (m245 * a13)); + double m1345; + m1345 = ((((m134 * a53) - (m135 * a43)) + (m145 * a33)) - (m345 * a13)); + double m2345; + m2345 = ((((m234 * a53) - (m235 * a43)) + (m245 * a33)) - (m345 * a23)); + double m01234; + m01234 = (((((m0123 * a44) - (m0124 * a34)) + (m0134 * a24)) - (m0234 * a14)) + (m1234 * a04)); + double m01235; + m01235 = (((((m0123 * a54) - (m0125 * a34)) + (m0135 * a24)) - (m0235 * a14)) + (m1235 * a04)); + double m01245; + m01245 = (((((m0124 * a54) - (m0125 * a44)) + (m0145 * a24)) - (m0245 * a14)) + (m1245 * a04)); + double m01345; + m01345 = (((((m0134 * a54) - (m0135 * a44)) + (m0145 * a34)) - (m0345 * a14)) + (m1345 * a04)); + double m02345; + m02345 = (((((m0234 * a54) - (m0235 * a44)) + (m0245 * a34)) - (m0345 * a24)) + (m2345 * a04)); + double m12345; + m12345 = (((((m1234 * a54) - (m1235 * a44)) + (m1245 * a34)) - (m1345 * a24)) + (m2345 * a14)); + double m012345; + m012345 = ((((((m01234 * a55) - (m01235 * a45)) + (m01245 * a35)) - (m01345 * a25)) + (m02345 * a15)) - (m12345 * a05)); + return m012345; +} + + +inline int orientationC5( double p0, double p1, double p2, double p3, double p4, double q0, double q1, double q2, double q3, double q4, double r0, double r1, double r2, double r3, double r4, double s0, double s1, double s2, double s3, double s4, double t0, double t1, double t2, double t3, double t4, double u0, double u1, double u2, double u3, double u4) { + double det; + double determinant_with_1_in_row_0_return_value; + double m01; + m01 = (q0 - p0); + double m02; + m02 = (r0 - p0); + double m03; + m03 = (s0 - p0); + double m04; + m04 = (t0 - p0); + double m05; + m05 = (u0 - p0); + double m12; + m12 = (r0 - q0); + double m13; + m13 = (s0 - q0); + double m14; + m14 = (t0 - q0); + double m15; + m15 = (u0 - q0); + double m23; + m23 = (s0 - r0); + double m24; + m24 = (t0 - r0); + double m25; + m25 = (u0 - r0); + double m34; + m34 = (t0 - s0); + double m35; + m35 = (u0 - s0); + double m45; + m45 = (u0 - t0); + double m012; + m012 = (((m01 * r1) - (m02 * q1)) + (m12 * p1)); + double m013; + m013 = (((m01 * s1) - (m03 * q1)) + (m13 * p1)); + double m014; + m014 = (((m01 * t1) - (m04 * q1)) + (m14 * p1)); + double m015; + m015 = (((m01 * u1) - (m05 * q1)) + (m15 * p1)); + double m023; + m023 = (((m02 * s1) - (m03 * r1)) + (m23 * p1)); + double m024; + m024 = (((m02 * t1) - (m04 * r1)) + (m24 * p1)); + double m025; + m025 = (((m02 * u1) - (m05 * r1)) + (m25 * p1)); + double m034; + m034 = (((m03 * t1) - (m04 * s1)) + (m34 * p1)); + double m035; + m035 = (((m03 * u1) - (m05 * s1)) + (m35 * p1)); + double m045; + m045 = (((m04 * u1) - (m05 * t1)) + (m45 * p1)); + double m123; + m123 = (((m12 * s1) - (m13 * r1)) + (m23 * q1)); + double m124; + m124 = (((m12 * t1) - (m14 * r1)) + (m24 * q1)); + double m125; + m125 = (((m12 * u1) - (m15 * r1)) + (m25 * q1)); + double m134; + m134 = (((m13 * t1) - (m14 * s1)) + (m34 * q1)); + double m135; + m135 = (((m13 * u1) - (m15 * s1)) + (m35 * q1)); + double m145; + m145 = (((m14 * u1) - (m15 * t1)) + (m45 * q1)); + double m234; + m234 = (((m23 * t1) - (m24 * s1)) + (m34 * r1)); + double m235; + m235 = (((m23 * u1) - (m25 * s1)) + (m35 * r1)); + double m245; + m245 = (((m24 * u1) - (m25 * t1)) + (m45 * r1)); + double m345; + m345 = (((m34 * u1) - (m35 * t1)) + (m45 * s1)); + double m0123; + m0123 = ((((m012 * s2) - (m013 * r2)) + (m023 * q2)) - (m123 * p2)); + double m0124; + m0124 = ((((m012 * t2) - (m014 * r2)) + (m024 * q2)) - (m124 * p2)); + double m0125; + m0125 = ((((m012 * u2) - (m015 * r2)) + (m025 * q2)) - (m125 * p2)); + double m0134; + m0134 = ((((m013 * t2) - (m014 * s2)) + (m034 * q2)) - (m134 * p2)); + double m0135; + m0135 = ((((m013 * u2) - (m015 * s2)) + (m035 * q2)) - (m135 * p2)); + double m0145; + m0145 = ((((m014 * u2) - (m015 * t2)) + (m045 * q2)) - (m145 * p2)); + double m0234; + m0234 = ((((m023 * t2) - (m024 * s2)) + (m034 * r2)) - (m234 * p2)); + double m0235; + m0235 = ((((m023 * u2) - (m025 * s2)) + (m035 * r2)) - (m235 * p2)); + double m0245; + m0245 = ((((m024 * u2) - (m025 * t2)) + (m045 * r2)) - (m245 * p2)); + double m0345; + m0345 = ((((m034 * u2) - (m035 * t2)) + (m045 * s2)) - (m345 * p2)); + double m1234; + m1234 = ((((m123 * t2) - (m124 * s2)) + (m134 * r2)) - (m234 * q2)); + double m1235; + m1235 = ((((m123 * u2) - (m125 * s2)) + (m135 * r2)) - (m235 * q2)); + double m1245; + m1245 = ((((m124 * u2) - (m125 * t2)) + (m145 * r2)) - (m245 * q2)); + double m1345; + m1345 = ((((m134 * u2) - (m135 * t2)) + (m145 * s2)) - (m345 * q2)); + double m2345; + m2345 = ((((m234 * u2) - (m235 * t2)) + (m245 * s2)) - (m345 * r2)); + double m01234; + m01234 = (((((m0123 * t3) - (m0124 * s3)) + (m0134 * r3)) - (m0234 * q3)) + (m1234 * p3)); + double m01235; + m01235 = (((((m0123 * u3) - (m0125 * s3)) + (m0135 * r3)) - (m0235 * q3)) + (m1235 * p3)); + double m01245; + m01245 = (((((m0124 * u3) - (m0125 * t3)) + (m0145 * r3)) - (m0245 * q3)) + (m1245 * p3)); + double m01345; + m01345 = (((((m0134 * u3) - (m0135 * t3)) + (m0145 * s3)) - (m0345 * q3)) + (m1345 * p3)); + double m02345; + m02345 = (((((m0234 * u3) - (m0235 * t3)) + (m0245 * s3)) - (m0345 * r3)) + (m2345 * p3)); + double m12345; + m12345 = (((((m1234 * u3) - (m1235 * t3)) + (m1245 * s3)) - (m1345 * r3)) + (m2345 * q3)); + double m012345; + m012345 = ((((((m01234 * u4) - (m01235 * t4)) + (m01245 * s4)) - (m01345 * r4)) + (m02345 * q4)) - (m12345 * p4)); + determinant_with_1_in_row_0_return_value = m012345; + det = determinant_with_1_in_row_0_return_value; + int int_tmp_result; + double eps; + double max1 = fabs(p1); + if( (max1 < fabs(q1)) ) + { + max1 = fabs(q1); + } + if( (max1 < fabs(r1)) ) + { + max1 = fabs(r1); + } + if( (max1 < fabs(s1)) ) + { + max1 = fabs(s1); + } + if( (max1 < fabs(t1)) ) + { + max1 = fabs(t1); + } + if( (max1 < fabs(u1)) ) + { + max1 = fabs(u1); + } + double max2 = fabs(p2); + if( (max2 < fabs(q2)) ) + { + max2 = fabs(q2); + } + if( (max2 < fabs(r2)) ) + { + max2 = fabs(r2); + } + if( (max2 < fabs(s2)) ) + { + max2 = fabs(s2); + } + if( (max2 < fabs(t2)) ) + { + max2 = fabs(t2); + } + if( (max2 < fabs(u2)) ) + { + max2 = fabs(u2); + } + double max3 = fabs(p3); + if( (max3 < fabs(q3)) ) + { + max3 = fabs(q3); + } + if( (max3 < fabs(r3)) ) + { + max3 = fabs(r3); + } + if( (max3 < fabs(s3)) ) + { + max3 = fabs(s3); + } + if( (max3 < fabs(t3)) ) + { + max3 = fabs(t3); + } + if( (max3 < fabs(u3)) ) + { + max3 = fabs(u3); + } + double max4 = fabs(p4); + if( (max4 < fabs(q4)) ) + { + max4 = fabs(q4); + } + if( (max4 < fabs(r4)) ) + { + max4 = fabs(r4); + } + if( (max4 < fabs(s4)) ) + { + max4 = fabs(s4); + } + if( (max4 < fabs(t4)) ) + { + max4 = fabs(t4); + } + if( (max4 < fabs(u4)) ) + { + max4 = fabs(u4); + } + double max5 = fabs(m01); + if( (max5 < fabs(m05)) ) + { + max5 = fabs(m05); + } + if( (max5 < fabs(m04)) ) + { + max5 = fabs(m04); + } + if( (max5 < fabs(m03)) ) + { + max5 = fabs(m03); + } + if( (max5 < fabs(m02)) ) + { + max5 = fabs(m02); + } + if( (max5 < fabs(m15)) ) + { + max5 = fabs(m15); + } + if( (max5 < fabs(m14)) ) + { + max5 = fabs(m14); + } + if( (max5 < fabs(m13)) ) + { + max5 = fabs(m13); + } + if( (max5 < fabs(m12)) ) + { + max5 = fabs(m12); + } + if( (max5 < fabs(m34)) ) + { + max5 = fabs(m34); + } + if( (max5 < fabs(m25)) ) + { + max5 = fabs(m25); + } + if( (max5 < fabs(m24)) ) + { + max5 = fabs(m24); + } + if( (max5 < fabs(m23)) ) + { + max5 = fabs(m23); + } + if( (max5 < fabs(m45)) ) + { + max5 = fabs(m45); + } + if( (max5 < fabs(m35)) ) + { + max5 = fabs(m35); + } + double lower_bound_1; + double upper_bound_1; + lower_bound_1 = max5; + upper_bound_1 = max5; + if( (max1 < lower_bound_1) ) + { + lower_bound_1 = max1; + } + else + { + if( (max1 > upper_bound_1) ) + { + upper_bound_1 = max1; + } + } + if( (max2 < lower_bound_1) ) + { + lower_bound_1 = max2; + } + else + { + if( (max2 > upper_bound_1) ) + { + upper_bound_1 = max2; + } + } + if( (max3 < lower_bound_1) ) + { + lower_bound_1 = max3; + } + else + { + if( (max3 > upper_bound_1) ) + { + upper_bound_1 = max3; + } + } + if( (max4 < lower_bound_1) ) + { + lower_bound_1 = max4; + } + else + { + if( (max4 > upper_bound_1) ) + { + upper_bound_1 = max4; + } + } + if( (lower_bound_1 < 8.19482853969781542511e-60) ) + { + return FPG_UNCERTAIN_VALUE; + } + else + { + if( (upper_bound_1 > 3.21387608851797912384e+60) ) + { + return FPG_UNCERTAIN_VALUE; + } + eps = (6.02067348555779570000e-13 * ((((max5 * max1) * max2) * max3) * max4)); + if( (det > eps) ) + { + int_tmp_result = 1; + } + else + { + if( (det < -eps) ) + { + int_tmp_result = -1; + } + else + { + return FPG_UNCERTAIN_VALUE; + } + } + } + return int_tmp_result; } -inline int orientationC5( double p0, double p1, double p2, double p3, double p4, - double q0, double q1, double q2, double q3, double q4, - double r0, double r1, double r2, double r3, double r4, - double s0, double s1, double s2, double s3, double s4, - double t0, double t1, double t2, double t3, double t4, - double u0, double u1, double u2, double u3, double u4) -{ - RT det = determinant_with_1_in_row_0(p0, p1, p2, p3, p4, - q0, q1, q2, q3, q4, - r0, r1, r2, r3, r4, - s0, s1, s2, s3, s4, - t0, t1, t2, t3, t4, - u0, u1, u2, u3, u4); - if (det > 0) return 1; - if (det < 0) return -1; - return 0; -} - From 23526e4c3bd27d646834f814cf9ebde5d090bdf3 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Wed, 23 Apr 2025 14:23:54 +0100 Subject: [PATCH 09/49] Static filter works but is slower than unfiltered :< --- .../internal/Static_filters/Orientation_5.h | 518 +++++++++++------- 1 file changed, 319 insertions(+), 199 deletions(-) diff --git a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_5.h b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_5.h index 0a19e729751..0ddf9dfb364 100644 --- a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_5.h +++ b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_5.h @@ -19,6 +19,8 @@ namespace CGAL { namespace internal { namespace Static_filters_predicates { + + template < typename K_base > class Orientation_5 : public K_base::Orientation_5 @@ -35,8 +37,6 @@ public: const Point_5 &r, const Point_5 &s, const Point_5 &t, const Point_5 &u) const { - - // return Base::operator()(p, q, r, s, t, u); CGAL_BRANCH_PROFILER_3("semi-static failures/attempts/calls to : Orientation_5", tmp); double p0, p1, p2, p3, p4, q0, q1, q2, q3, q4, r0, r1, r2, r3, r4, s0, s1, s2, s3, s4, t0, t1, t2, t3, t4, u0, u1, u2, u3, u4; @@ -60,222 +60,342 @@ public: fit_in_double(u.c2(), u2) && fit_in_double(u.c3(), u3) && fit_in_double(u.c4(), u4)) { - Orientation should_be = Base::operator()(p, q, r, s, t, u); - double pq0; - pq0 = (q0 - p0); - double pq1; - pq1 = (q1 - p1); - double pq2; - pq2 = (q2 - p2); - double pq3; - pq3 = (q3 - p3); - double pq4; - pq4 = (q4 - p4); - double pr0; - pr0 = (r0 - p0); - double pr1; - pr1 = (r1 - p1); - double pr2; - pr2 = (r2 - p2); - double pr3; - pr3 = (r3 - p3); - double pr4; - pr4 = (r4 - p4); - double ps0; - ps0 = (s0 - p0); - double ps1; - ps1 = (s1 - p1); - double ps2; - ps2 = (s2 - p2); - double ps3; - ps3 = (s3 - p3); - double ps4; - ps4 = (s4 - p4); - double pt0; - pt0 = (t0 - p0); - double pt1; - pt1 = (t1 - p1); - double pt2; - pt2 = (t2 - p2); - double pt3; - pt3 = (t3 - p3); - double pt4; - pt4 = (t4 - p4); - double pu0; - pu0 = (t0 - p0); - double pu1; - pu1 = (u1 - p1); - double pu2; - pu2 = (u2 - p2); - double pu3; - pu3 = (u3 - p3); - double pu4; - pu4 = (u4 - p4); + CGAL_assertion_code(Orientation should_be = Base::operator()(p, q, r, s, t, u)); double det; - det = determinant( pq0, pq1, pq2, pq3, pq4, pr0, pr1, pr2, pr3, pr4, ps0, ps1, ps2, ps3, ps4, pt0, pt1, pt2, pt3, pt4, pu0, pu1, pu2, pu3, pu4 ); - Orientation result = ZERO; - double eps; - double max1 = CGAL::abs(pq0); - if( (max1 < CGAL::abs(pr0)) ) + double determinant_with_1_in_row_0_return_value; + double m01; + m01 = (q0 - p0); + double m02; + m02 = (r0 - p0); + double m03; + m03 = (s0 - p0); + double m04; + m04 = (t0 - p0); + double m05; + m05 = (u0 - p0); + double m12; + m12 = (r0 - q0); + double m13; + m13 = (s0 - q0); + double m14; + m14 = (t0 - q0); + double m15; + m15 = (u0 - q0); + double m23; + m23 = (s0 - r0); + double m24; + m24 = (t0 - r0); + double m25; + m25 = (u0 - r0); + double m34; + m34 = (t0 - s0); + double m35; + m35 = (u0 - s0); + double m45; + m45 = (u0 - t0); + double m012; + m012 = (((m01 * r1) - (m02 * q1)) + (m12 * p1)); + double m013; + m013 = (((m01 * s1) - (m03 * q1)) + (m13 * p1)); + double m014; + m014 = (((m01 * t1) - (m04 * q1)) + (m14 * p1)); + double m015; + m015 = (((m01 * u1) - (m05 * q1)) + (m15 * p1)); + double m023; + m023 = (((m02 * s1) - (m03 * r1)) + (m23 * p1)); + double m024; + m024 = (((m02 * t1) - (m04 * r1)) + (m24 * p1)); + double m025; + m025 = (((m02 * u1) - (m05 * r1)) + (m25 * p1)); + double m034; + m034 = (((m03 * t1) - (m04 * s1)) + (m34 * p1)); + double m035; + m035 = (((m03 * u1) - (m05 * s1)) + (m35 * p1)); + double m045; + m045 = (((m04 * u1) - (m05 * t1)) + (m45 * p1)); + double m123; + m123 = (((m12 * s1) - (m13 * r1)) + (m23 * q1)); + double m124; + m124 = (((m12 * t1) - (m14 * r1)) + (m24 * q1)); + double m125; + m125 = (((m12 * u1) - (m15 * r1)) + (m25 * q1)); + double m134; + m134 = (((m13 * t1) - (m14 * s1)) + (m34 * q1)); + double m135; + m135 = (((m13 * u1) - (m15 * s1)) + (m35 * q1)); + double m145; + m145 = (((m14 * u1) - (m15 * t1)) + (m45 * q1)); + double m234; + m234 = (((m23 * t1) - (m24 * s1)) + (m34 * r1)); + double m235; + m235 = (((m23 * u1) - (m25 * s1)) + (m35 * r1)); + double m245; + m245 = (((m24 * u1) - (m25 * t1)) + (m45 * r1)); + double m345; + m345 = (((m34 * u1) - (m35 * t1)) + (m45 * s1)); + double m0123; + m0123 = ((((m012 * s2) - (m013 * r2)) + (m023 * q2)) - (m123 * p2)); + double m0124; + m0124 = ((((m012 * t2) - (m014 * r2)) + (m024 * q2)) - (m124 * p2)); + double m0125; + m0125 = ((((m012 * u2) - (m015 * r2)) + (m025 * q2)) - (m125 * p2)); + double m0134; + m0134 = ((((m013 * t2) - (m014 * s2)) + (m034 * q2)) - (m134 * p2)); + double m0135; + m0135 = ((((m013 * u2) - (m015 * s2)) + (m035 * q2)) - (m135 * p2)); + double m0145; + m0145 = ((((m014 * u2) - (m015 * t2)) + (m045 * q2)) - (m145 * p2)); + double m0234; + m0234 = ((((m023 * t2) - (m024 * s2)) + (m034 * r2)) - (m234 * p2)); + double m0235; + m0235 = ((((m023 * u2) - (m025 * s2)) + (m035 * r2)) - (m235 * p2)); + double m0245; + m0245 = ((((m024 * u2) - (m025 * t2)) + (m045 * r2)) - (m245 * p2)); + double m0345; + m0345 = ((((m034 * u2) - (m035 * t2)) + (m045 * s2)) - (m345 * p2)); + double m1234; + m1234 = ((((m123 * t2) - (m124 * s2)) + (m134 * r2)) - (m234 * q2)); + double m1235; + m1235 = ((((m123 * u2) - (m125 * s2)) + (m135 * r2)) - (m235 * q2)); + double m1245; + m1245 = ((((m124 * u2) - (m125 * t2)) + (m145 * r2)) - (m245 * q2)); + double m1345; + m1345 = ((((m134 * u2) - (m135 * t2)) + (m145 * s2)) - (m345 * q2)); + double m2345; + m2345 = ((((m234 * u2) - (m235 * t2)) + (m245 * s2)) - (m345 * r2)); + double m01234; + m01234 = (((((m0123 * t3) - (m0124 * s3)) + (m0134 * r3)) - (m0234 * q3)) + (m1234 * p3)); + double m01235; + m01235 = (((((m0123 * u3) - (m0125 * s3)) + (m0135 * r3)) - (m0235 * q3)) + (m1235 * p3)); + double m01245; + m01245 = (((((m0124 * u3) - (m0125 * t3)) + (m0145 * r3)) - (m0245 * q3)) + (m1245 * p3)); + double m01345; + m01345 = (((((m0134 * u3) - (m0135 * t3)) + (m0145 * s3)) - (m0345 * q3)) + (m1345 * p3)); + double m02345; + m02345 = (((((m0234 * u3) - (m0235 * t3)) + (m0245 * s3)) - (m0345 * r3)) + (m2345 * p3)); + double m12345; + m12345 = (((((m1234 * u3) - (m1235 * t3)) + (m1245 * s3)) - (m1345 * r3)) + (m2345 * q3)); + double m012345; + m012345 = ((((((m01234 * u4) - (m01235 * t4)) + (m01245 * s4)) - (m01345 * r4)) + (m02345 * q4)) - (m12345 * p4)); + determinant_with_1_in_row_0_return_value = m012345; + det = determinant_with_1_in_row_0_return_value; + double eps; + double max1 = CGAL::abs(p1); + if( (max1 < CGAL::abs(q1)) ) + { + max1 = CGAL::abs(q1); + } + if( (max1 < CGAL::abs(r1)) ) + { + max1 = CGAL::abs(r1); + } + if( (max1 < CGAL::abs(s1)) ) + { + max1 = CGAL::abs(s1); + } + if( (max1 < CGAL::abs(t1)) ) + { + max1 = CGAL::abs(t1); + } + if( (max1 < CGAL::abs(u1)) ) + { + max1 = CGAL::abs(u1); + } + double max2 = CGAL::abs(p2); + if( (max2 < CGAL::abs(q2)) ) + { + max2 = CGAL::abs(q2); + } + if( (max2 < CGAL::abs(r2)) ) + { + max2 = CGAL::abs(r2); + } + if( (max2 < CGAL::abs(s2)) ) + { + max2 = CGAL::abs(s2); + } + if( (max2 < CGAL::abs(t2)) ) + { + max2 = CGAL::abs(t2); + } + if( (max2 < CGAL::abs(u2)) ) + { + max2 = CGAL::abs(u2); + } + double max3 = CGAL::abs(p3); + if( (max3 < CGAL::abs(q3)) ) + { + max3 = CGAL::abs(q3); + } + if( (max3 < CGAL::abs(r3)) ) + { + max3 = CGAL::abs(r3); + } + if( (max3 < CGAL::abs(s3)) ) + { + max3 = CGAL::abs(s3); + } + if( (max3 < CGAL::abs(t3)) ) + { + max3 = CGAL::abs(t3); + } + if( (max3 < CGAL::abs(u3)) ) + { + max3 = CGAL::abs(u3); + } + double max4 = CGAL::abs(p4); + if( (max4 < CGAL::abs(q4)) ) + { + max4 = CGAL::abs(q4); + } + if( (max4 < CGAL::abs(r4)) ) + { + max4 = CGAL::abs(r4); + } + if( (max4 < CGAL::abs(s4)) ) + { + max4 = CGAL::abs(s4); + } + if( (max4 < CGAL::abs(t4)) ) + { + max4 = CGAL::abs(t4); + } + if( (max4 < CGAL::abs(u4)) ) + { + max4 = CGAL::abs(u4); + } + double max5 = CGAL::abs(m01); + if( (max5 < CGAL::abs(m05)) ) + { + max5 = CGAL::abs(m05); + } + if( (max5 < CGAL::abs(m04)) ) + { + max5 = CGAL::abs(m04); + } + if( (max5 < CGAL::abs(m03)) ) + { + max5 = CGAL::abs(m03); + } + if( (max5 < CGAL::abs(m02)) ) + { + max5 = CGAL::abs(m02); + } + if( (max5 < CGAL::abs(m15)) ) + { + max5 = CGAL::abs(m15); + } + if( (max5 < CGAL::abs(m14)) ) + { + max5 = CGAL::abs(m14); + } + if( (max5 < CGAL::abs(m13)) ) + { + max5 = CGAL::abs(m13); + } + if( (max5 < CGAL::abs(m12)) ) + { + max5 = CGAL::abs(m12); + } + if( (max5 < CGAL::abs(m34)) ) + { + max5 = CGAL::abs(m34); + } + if( (max5 < CGAL::abs(m25)) ) + { + max5 = CGAL::abs(m25); + } + if( (max5 < CGAL::abs(m24)) ) + { + max5 = CGAL::abs(m24); + } + if( (max5 < CGAL::abs(m23)) ) + { + max5 = CGAL::abs(m23); + } + if( (max5 < CGAL::abs(m45)) ) + { + max5 = CGAL::abs(m45); + } + if( (max5 < CGAL::abs(m35)) ) + { + max5 = CGAL::abs(m35); + } + double lower_bound_1; + double upper_bound_1; + lower_bound_1 = max5; + upper_bound_1 = max5; + if( (max1 < lower_bound_1) ) + { + lower_bound_1 = max1; + } + else + { + if( (max1 > upper_bound_1) ) { - max1 = CGAL::abs(pr0); + upper_bound_1 = max1; } - if( (max1 < CGAL::abs(ps0)) ) + } + if( (max2 < lower_bound_1) ) + { + lower_bound_1 = max2; + } + else + { + if( (max2 > upper_bound_1) ) { - max1 = CGAL::abs(ps0); + upper_bound_1 = max2; } - if( (max1 < CGAL::abs(pt0)) ) + } + if( (max3 < lower_bound_1) ) + { + lower_bound_1 = max3; + } + else + { + if( (max3 > upper_bound_1) ) { - max1 = CGAL::abs(pt0); + upper_bound_1 = max3; } - if( (max1 < CGAL::abs(pu0)) ) + } + if( (max4 < lower_bound_1) ) + { + lower_bound_1 = max4; + } + else + { + if( (max4 > upper_bound_1) ) { - max1 = CGAL::abs(pu0); + upper_bound_1 = max4; } - double max2 = CGAL::abs(pq1); - if( (max2 < CGAL::abs(pr1)) ) - { - max2 = CGAL::abs(pr1); - } - if( (max2 < CGAL::abs(ps1)) ) - { - max2 = CGAL::abs(ps1); - } - if( (max2 < CGAL::abs(pt1)) ) - { - max2 = CGAL::abs(pt1); - } - if( (max2 < CGAL::abs(pu1)) ) - { - max2 = CGAL::abs(pu1); - } - double max3 = CGAL::abs(pq2); - if( (max3 < CGAL::abs(pr2)) ) - { - max3 = CGAL::abs(pr2); - } - if( (max3 < CGAL::abs(ps2)) ) - { - max3 = CGAL::abs(ps2); - } - if( (max3 < CGAL::abs(pt2)) ) - { - max3 = CGAL::abs(pt2); - } - if( (max3 < CGAL::abs(pu2)) ) - { - max3 = CGAL::abs(pu2); - } - double max4 = CGAL::abs(pq3); - if( (max4 < CGAL::abs(pr3)) ) - { - max4 = CGAL::abs(pr3); - } - if( (max4 < CGAL::abs(ps3)) ) - { - max4 = CGAL::abs(ps3); - } - if( (max4 < CGAL::abs(pt3)) ) - { - max4 = CGAL::abs(pt3); - } - if( (max4 < CGAL::abs(pu3)) ) - { - max4 = CGAL::abs(pu3); - } - double max5 = CGAL::abs(pq4); - if( (max5 < CGAL::abs(pr4)) ) - { - max5 = CGAL::abs(pr4); - } - if( (max5 < CGAL::abs(ps4)) ) - { - max5 = CGAL::abs(ps4); - } - if( (max5 < CGAL::abs(pt4)) ) - { - max5 = CGAL::abs(pt4); - } - if( (max5 < CGAL::abs(pu4)) ) - { - max5 = CGAL::abs(pu4); - } - double lower_bound_1; - double upper_bound_1; - lower_bound_1 = max5; - upper_bound_1 = max5; - if( (max1 < lower_bound_1) ) - { - lower_bound_1 = max1; - } - else - { - if( (max1 > upper_bound_1) ) - { - upper_bound_1 = max1; - } - } - if( (max2 < lower_bound_1) ) - { - lower_bound_1 = max2; - } - else - { - if( (max2 > upper_bound_1) ) - { - upper_bound_1 = max2; - } - } - if( (max3 < lower_bound_1) ) - { - lower_bound_1 = max3; - } - else - { - if( (max3 > upper_bound_1) ) - { - upper_bound_1 = max3; - } - } - if( (max4 < lower_bound_1) ) - { - lower_bound_1 = max4; - } - else - { - if( (max4 > upper_bound_1) ) - { - upper_bound_1 = max4; - } - } - if( (lower_bound_1 < 9.99657131447050328602e-60) ) + } + if( (lower_bound_1 < 8.19482853969781542511e-60) ) + { + return Base::operator()(p, q, r, s, t, u); + } + else + { + if( (upper_bound_1 > 3.21387608851797912384e+60) ) { return Base::operator()(p, q, r, s, t, u); } + eps = (6.02067348555779570000e-13 * ((((max5 * max1) * max2) * max3) * max4)); + if( (det > eps) ) + { + CGAL_assertion(should_be == POSITIVE); + return POSITIVE; + } else { - if( (upper_bound_1 > 3.21387608851797912384e+60) ) - { - return Base::operator()(p, q, r, s, t, u); - } - eps = (2.22889232457534740153e-13 * ((((max1 * max2) * max3) * max4) * max5)); - if( (det > eps) ) - { - if(should_be != POSITIVE){ - std::cout << "result should not be POSITIVE" << std::endl; - } - return POSITIVE; - } - if( (det < -eps) ) { - if(should_be != NEGATIVE){ - std::cout << "result should not be NEGATIVE" << std::endl; - } + CGAL_assertion(should_be == NEGATIVE); return NEGATIVE; } + } - } + } + } return Base::operator()(p, q, r, s, t, u); } From 41ecef0fa3a87972b5acb04fe78af163204e2373 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Wed, 23 Apr 2025 14:51:31 +0100 Subject: [PATCH 10/49] Add macro for disabling filtering CGAL_NO_STATIC_FILTER_5 --- .../include/CGAL/NewKernel_d/Cartesian_static_filters.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/NewKernel_d/include/CGAL/NewKernel_d/Cartesian_static_filters.h b/NewKernel_d/include/CGAL/NewKernel_d/Cartesian_static_filters.h index 5ff54ab1450..160c3206276 100644 --- a/NewKernel_d/include/CGAL/NewKernel_d/Cartesian_static_filters.h +++ b/NewKernel_d/include/CGAL/NewKernel_d/Cartesian_static_filters.h @@ -244,7 +244,7 @@ struct Cartesian_static_filters, R_, Derived_> : public R_ { }; }; - +#ifndef CGAL_NO_STATIC_FILTER_5 template struct Cartesian_static_filters, R_, Derived_> : public R_ { constexpr Cartesian_static_filters(){} @@ -256,5 +256,6 @@ struct Cartesian_static_filters, R_, Derived_> : public R_ { typedef SFA::Orientation_of_points_5 type; }; }; +#endif } // namespace CGAL #endif From 0e61fdc8e18c3d1f599729c21fa27702104d9e92 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Wed, 23 Apr 2025 15:44:20 +0100 Subject: [PATCH 11/49] vector for visited cells --- .../include/CGAL/Triangulation_data_structure.h | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Triangulation/include/CGAL/Triangulation_data_structure.h b/Triangulation/include/CGAL/Triangulation_data_structure.h index c93ddb76507..507ae9fd0b1 100644 --- a/Triangulation/include/CGAL/Triangulation_data_structure.h +++ b/Triangulation/include/CGAL/Triangulation_data_structure.h @@ -138,7 +138,7 @@ protected: // DATA MEMBERS int dmax_, dcur_; // dimension of the current triangulation Vertex_container vertices_; // list of all vertices Full_cell_container full_cells_; // list of all full cells - + mutable std::vector visited; private: void clean_dynamic_memory() @@ -667,8 +667,10 @@ Triangulation_data_structure TraversalPredicate & tp, OutputIterator & out) const /* Concept */ { + CGAL_precondition(visited.empty()); std::queue queue; set_visited(start, true); + visited.push_back(start); queue.push(start); const int cur_dim = current_dimension(); Facet ft; @@ -684,6 +686,7 @@ Triangulation_data_structure if( ! get_visited(n) ) { set_visited(n, true); + visited.push_back(n); if( tp(Facet(s, i)) ) queue.push(n); else @@ -691,7 +694,9 @@ Triangulation_data_structure } } } - clear_visited_marks(start); + for(auto fch : visited) + set_visited(fch, false); + visited.clear(); return ft; } From 9f07b04778e65b24f59dae13a9ef929d51b816b2 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Wed, 23 Apr 2025 17:41:25 +0100 Subject: [PATCH 12/49] Replace queue with stack> in insert_in_tagged_hole. static/data member would give even more speed --- Triangulation/include/CGAL/Triangulation_data_structure.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Triangulation/include/CGAL/Triangulation_data_structure.h b/Triangulation/include/CGAL/Triangulation_data_structure.h index 507ae9fd0b1..130d8e4f2fd 100644 --- a/Triangulation/include/CGAL/Triangulation_data_structure.h +++ b/Triangulation/include/CGAL/Triangulation_data_structure.h @@ -30,6 +30,7 @@ #include #include #include +#include #include namespace CGAL { @@ -939,13 +940,13 @@ Triangulation_data_structure const int cur_dim = current_dimension(); Full_cell_handle new_s; - std::queue task_queue; + std::stack> task_queue; task_queue.push( IITH_task(f, mirror_index(full_cell(f), index_of_covertex(f))) ); while (!task_queue.empty()) { - IITH_task task = task_queue.front(); + IITH_task task = task_queue.top(); task_queue.pop(); Full_cell_handle old_s = full_cell(task.boundary_facet); From d9c4f603ee8511579cd4247a4b029ba84c9003ce Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Wed, 23 Apr 2025 17:47:47 +0100 Subject: [PATCH 13/49] const& --- .../include/CGAL/Triangulation_data_structure.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Triangulation/include/CGAL/Triangulation_data_structure.h b/Triangulation/include/CGAL/Triangulation_data_structure.h index 130d8e4f2fd..dfd59e7b978 100644 --- a/Triangulation/include/CGAL/Triangulation_data_structure.h +++ b/Triangulation/include/CGAL/Triangulation_data_structure.h @@ -375,12 +375,12 @@ public: Vertex_handle insert_in_face(const Face &); /* Concept */ Vertex_handle insert_in_facet(const Facet &); /* Concept */ template< typename Forward_iterator > - Vertex_handle insert_in_hole(Forward_iterator, Forward_iterator, Facet); /* Concept */ + Vertex_handle insert_in_hole(Forward_iterator, Forward_iterator, const Facet&); /* Concept */ template< typename Forward_iterator, typename OutputIterator > - Vertex_handle insert_in_hole(Forward_iterator, Forward_iterator, Facet, OutputIterator); /* Concept */ + Vertex_handle insert_in_hole(Forward_iterator, Forward_iterator, const Facet&, OutputIterator); /* Concept */ template< typename OutputIterator > - Full_cell_handle insert_in_tagged_hole(Vertex_handle, Facet, OutputIterator); + Full_cell_handle insert_in_tagged_hole(Vertex_handle, const Facet&, OutputIterator); Vertex_handle insert_increase_dimension(Vertex_handle=Vertex_handle()); /* Concept */ @@ -932,7 +932,7 @@ template template < typename OutputIterator > typename Triangulation_data_structure::Full_cell_handle Triangulation_data_structure -::insert_in_tagged_hole(Vertex_handle v, Facet f, +::insert_in_tagged_hole(Vertex_handle v, const Facet& f, OutputIterator new_full_cells) { CGAL_assertion_msg(is_boundary_facet(f), "starting facet should be on the hole boundary"); @@ -1034,7 +1034,7 @@ template< class Dim, class Vb, class Fcb > template< typename Forward_iterator, typename OutputIterator > typename Triangulation_data_structure::Vertex_handle Triangulation_data_structure -::insert_in_hole(Forward_iterator start, Forward_iterator end, Facet f, +::insert_in_hole(Forward_iterator start, Forward_iterator end, const Facet& f, OutputIterator out) /* Concept */ { CGAL_expensive_precondition( @@ -1053,7 +1053,7 @@ template< class Dim, class Vb, class Fcb > template< typename Forward_iterator > typename Triangulation_data_structure::Vertex_handle Triangulation_data_structure -::insert_in_hole(Forward_iterator start, Forward_iterator end, Facet f) /* Concept */ +::insert_in_hole(Forward_iterator start, Forward_iterator end, const Facet& f) /* Concept */ { Emptyset_iterator out; return insert_in_hole(start, end, f, out); From f147e0f0cc623ada42de78cbb5a625dd2eae79a0 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Wed, 23 Apr 2025 20:54:42 +0100 Subject: [PATCH 14/49] Use TDS_full_cell_mirror_storage_policy --- Triangulation/benchmark/Triangulation/bench5d.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Triangulation/benchmark/Triangulation/bench5d.cpp b/Triangulation/benchmark/Triangulation/bench5d.cpp index cadef41b096..2bf6fc90bfc 100644 --- a/Triangulation/benchmark/Triangulation/bench5d.cpp +++ b/Triangulation/benchmark/Triangulation/bench5d.cpp @@ -9,7 +9,13 @@ #include typedef CGAL::Epick_d< CGAL::Dimension_tag<5> > K; -typedef CGAL::Triangulation Triangulation; +typedef CGAL::Triangulation_vertex Vertex; +typedef CGAL::Triangulation_ds_full_cell DS_full_cell; +typedef CGAL::Triangulation_full_cell Full_cell; +typedef CGAL::Triangulation_data_structure, + Vertex, + Full_cell> TDS; +typedef CGAL::Triangulation Triangulation; int main() From eef2bea7b1ad389465cd6f1829fa15b0499649b2 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Thu, 24 Apr 2025 08:11:39 +0100 Subject: [PATCH 15/49] Add doc for storage policies --- .../CGAL/TDS_full_cell_default_storage_policy.h | 10 ++++++++++ .../CGAL/TDS_full_cell_mirror_storage_policy.h | 11 +++++++++++ 2 files changed, 21 insertions(+) create mode 100644 Triangulation/doc/Triangulation/CGAL/TDS_full_cell_default_storage_policy.h create mode 100644 Triangulation/doc/Triangulation/CGAL/TDS_full_cell_mirror_storage_policy.h diff --git a/Triangulation/doc/Triangulation/CGAL/TDS_full_cell_default_storage_policy.h b/Triangulation/doc/Triangulation/CGAL/TDS_full_cell_default_storage_policy.h new file mode 100644 index 00000000000..b6ed9765723 --- /dev/null +++ b/Triangulation/doc/Triangulation/CGAL/TDS_full_cell_default_storage_policy.h @@ -0,0 +1,10 @@ + +namespace CGAL { + + /*! + \ingroup PkgTriangulationsRef + A tag class to indicate that mirror indices are not stored in full cells. + */ +class TDS_full_cell_mirror_storage_policy +{}; +} \ No newline at end of file diff --git a/Triangulation/doc/Triangulation/CGAL/TDS_full_cell_mirror_storage_policy.h b/Triangulation/doc/Triangulation/CGAL/TDS_full_cell_mirror_storage_policy.h new file mode 100644 index 00000000000..6b4136dd777 --- /dev/null +++ b/Triangulation/doc/Triangulation/CGAL/TDS_full_cell_mirror_storage_policy.h @@ -0,0 +1,11 @@ + +namespace CGAL { + + /*! + \ingroup PkgTriangulationsRef + A tag class to indicate that mirror indices are stored in full cells. + \precondition The dimension is not larger than 127. + */ +class TDS_full_cell_mirror_storage_policy +{}; +} \ No newline at end of file From 90a376de1796deb54fc853f57155d4429466713b Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Thu, 24 Apr 2025 08:39:07 +0100 Subject: [PATCH 16/49] Add to package description --- Triangulation/doc/Triangulation/PackageDescription.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Triangulation/doc/Triangulation/PackageDescription.txt b/Triangulation/doc/Triangulation/PackageDescription.txt index 2ef98bf9d84..ac8983ce685 100644 --- a/Triangulation/doc/Triangulation/PackageDescription.txt +++ b/Triangulation/doc/Triangulation/PackageDescription.txt @@ -101,6 +101,8 @@ The latter two concepts are also abbreviated respectively as `TrVertex` and `TrF - `CGAL::Triangulation_ds_vertex` - `CGAL::Triangulation_ds_full_cell` - `CGAL::Triangulation_face` +- `CGAL::TDS_full_cell_default_storage_policy` +- `CGAL::TDS_full_cell_mirror_storage_policy` \cgalCRPSection{(Geometric) Triangulations} From 3d0a5e54a2106de1b571a25eae472c256554495c Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Thu, 24 Apr 2025 09:19:00 +0100 Subject: [PATCH 17/49] Add source of Orientation_6 for FPG --- .../include/CGAL/NewKernel_d/orientationC6.h | 211 ++++++++++++++++++ 1 file changed, 211 insertions(+) create mode 100644 NewKernel_d/include/CGAL/NewKernel_d/orientationC6.h diff --git a/NewKernel_d/include/CGAL/NewKernel_d/orientationC6.h b/NewKernel_d/include/CGAL/NewKernel_d/orientationC6.h new file mode 100644 index 00000000000..63ba8232f6f --- /dev/null +++ b/NewKernel_d/include/CGAL/NewKernel_d/orientationC6.h @@ -0,0 +1,211 @@ +// Copyright (c) 2025 GeometryFactory (France). +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org) +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial +// +// +// Author(s) : Andreas Fabri + +typedef double RT; + +int +orientation( + RT a01,RT a02,RT a03,RT a04,RT a05,RT a06, + RT a11,RT a12,RT a13,RT a14,RT a15,RT a16, + RT a21,RT a22,RT a23,RT a24,RT a25,RT a26, + RT a31,RT a32,RT a33,RT a34,RT a35,RT a36, + RT a41,RT a42,RT a43,RT a44,RT a45,RT a46, + RT a51,RT a52,RT a53,RT a54,RT a55,RT a56, + RT a61,RT a62,RT a63,RT a64,RT a65,RT a66) +{ +// First compute the det2x2 + const RT m01 = a11 - a01; + const RT m02 = a21 - a01; + const RT m03 = a31 - a01; + const RT m04 = a41 - a01; + const RT m05 = a51 - a01; + const RT m06 = a61 - a01; + + const RT m12 = a21 - a11; + const RT m13 = a31 - a11; + const RT m14 = a41 - a11; + const RT m15 = a51 - a11; + const RT m16 = a61 - a11; + + const RT m23 = a31 - a21; + const RT m24 = a41 - a21; + const RT m25 = a51 - a21; + const RT m26 = a61 - a21; + + const RT m34 = a41 - a31; + const RT m35 = a51 - a31; + const RT m36 = a61 - a31; + + const RT m45 = a51 - a41; + const RT m46 = a61 - a41; + + const RT m56 = a61 - a51; + +// Now compute the minors of rank 3 + const RT m012 = m01*a22 - m02*a12 + m12*a02; + const RT m013 = m01*a32 - m03*a12 + m13*a02; + const RT m014 = m01*a42 - m04*a12 + m14*a02; + const RT m015 = m01*a52 - m05*a12 + m15*a02; + const RT m016 = m01*a62 - m06*a12 + m16*a02; + + const RT m023 = m02*a32 - m03*a22 + m23*a02; + const RT m024 = m02*a42 - m04*a22 + m24*a02; + const RT m025 = m02*a52 - m05*a22 + m25*a02; + const RT m026 = m02*a62 - m06*a22 + m26*a02; + const RT m034 = m03*a42 - m04*a32 + m34*a02; + const RT m035 = m03*a52 - m05*a32 + m35*a02; + const RT m036 = m03*a62 - m06*a32 + m36*a02; + + const RT m045 = m04*a52 - m05*a42 + m45*a02; + const RT m046 = m04*a62 - m06*a42 + m46*a02; + + const RT m056 = m05*a62 - m06*a52 + m56*a02; + + + const RT m123 = m12*a32 - m13*a22 + m23*a12; + const RT m124 = m12*a42 - m14*a22 + m24*a12; + const RT m125 = m12*a52 - m15*a22 + m25*a12; + const RT m126 = m12*a62 - m16*a22 + m26*a12; + + const RT m134 = m13*a42 - m14*a32 + m34*a12; + const RT m135 = m13*a52 - m15*a32 + m35*a12; + const RT m136 = m13*a62 - m16*a32 + m36*a12; + + const RT m145 = m14*a52 - m15*a42 + m45*a12; + const RT m146 = m14*a62 - m16*a42 + m46*a12; + + const RT m156 = m15*a62 - m16*a52 + m56*a12; + + const RT m234 = m23*a42 - m24*a32 + m34*a22; + const RT m235 = m23*a52 - m25*a32 + m35*a22; + const RT m236 = m23*a62 - m26*a32 + m36*a22; + + const RT m245 = m24*a52 - m25*a42 + m45*a22; + const RT m246 = m24*a62 - m26*a42 + m46*a22; + + const RT m256 = m25*a62 - m26*a52 + m56*a22; + + const RT m345 = m34*a52 - m35*a42 + m45*a32; + const RT m346 = m34*a62 - m36*a42 + m46*a32; + + const RT m356 = m35*a62 - m36*a52 + m56*a32; + + const RT m456 = m45*a62 - m46*a52 + m56*a42; + +// Now compute the minors of rank 4 + const RT m0123 = m012*a33 - m013*a23 + m023*a13 - m123*a03; + + const RT m0124 = m012*a43 - m014*a23 + m024*a13 - m124*a03; + const RT m0125 = m012*a53 - m015*a23 + m025*a13 - m125*a03; + const RT m0126 = m012*a63 - m016*a23 + m026*a13 - m126*a03; + + const RT m0134 = m013*a43 - m014*a33 + m034*a13 - m134*a03; + const RT m0135 = m013*a53 - m015*a33 + m035*a13 - m135*a03; + const RT m0136 = m013*a63 - m016*a33 + m036*a13 - m136*a03; + + const RT m0145 = m014*a53 - m015*a43 + m045*a13 - m145*a03; + const RT m0146 = m014*a63 - m016*a43 + m046*a13 - m146*a03; + + const RT m0156 = m015*a63 - m016*a53 + m056*a13 - m156*a03; + + const RT m0234 = m023*a43 - m024*a33 + m034*a23 - m234*a03; + const RT m0235 = m023*a53 - m025*a33 + m035*a23 - m235*a03; + const RT m0236 = m023*a63 - m026*a33 + m036*a23 - m236*a03; + + const RT m0245 = m024*a53 - m025*a43 + m045*a23 - m245*a03; + const RT m0246 = m024*a63 - m026*a43 + m046*a23 - m246*a03; + + const RT m0256 = m025*a63 - m026*a53 + m056*a23 - m256*a03; + + const RT m0345 = m034*a53 - m035*a43 + m045*a33 - m345*a03; + const RT m0346 = m034*a63 - m036*a43 + m046*a33 - m346*a03; + + const RT m0356 = m035*a63 - m036*a53 + m056*a33 - m356*a03; + + const RT m0456 = m045*a63 - m046*a53 + m056*a43 - m456*a03; + + const RT m1234 = m123*a43 - m124*a33 + m134*a23 - m234*a13; + const RT m1235 = m123*a53 - m125*a33 + m135*a23 - m235*a13; + const RT m1236 = m123*a63 - m126*a33 + m136*a23 - m236*a13; + + const RT m1245 = m124*a53 - m125*a43 + m145*a23 - m245*a13; + const RT m1246 = m124*a63 - m126*a43 + m146*a23 - m246*a13; + + const RT m1256 = m125*a63 - m126*a53 + m156*a23 - m256*a13; + + const RT m1345 = m134*a53 - m135*a43 + m145*a33 - m345*a13; + const RT m1346 = m134*a63 - m136*a43 + m146*a33 - m346*a13; + + const RT m1356 = m135*a63 - m136*a53 + m156*a33 - m356*a13; + const RT m1456 = m145*a63 - m146*a53 + m156*a43 - m456*a13; + + const RT m2345 = m234*a53 - m235*a43 + m245*a33 - m345*a23; + const RT m2346 = m234*a63 - m236*a43 + m246*a33 - m346*a23; + + const RT m2356 = m235*a63 - m236*a53 + m256*a33 - m356*a23; + const RT m2456 = m245*a63 - m246*a53 + m256*a43 - m456*a23; + + const RT m3456 = m345*a63 - m346*a53 + m356*a43 - m456*a33; + + + // Now compute the minors of rank 5 + const RT m01234 = m0123*a44 - m0124*a34 + m0134*a24 - m0234*a14 + m1234*a04; + + const RT m01235 = m0123*a54 - m0125*a34 + m0135*a24 - m0235*a14 + m1235*a04; + + const RT m01236 = m0123*a64 - m0126*a34 + m0136*a24 - m0236*a14 + m1236*a04; + + const RT m01245 = m0124*a54 - m0125*a44 + m0145*a24 - m0245*a14 + m1245*a04; + const RT m01246 = m0124*a64 - m0126*a44 + m0146*a24 - m0246*a14 + m1246*a04; + + const RT m01256 = m0125*a64 - m0126*a54 + m0156*a24 - m0256*a14 + m1256*a04; + + const RT m01345 = m0134*a54 - m0135*a44 + m0145*a34 - m0345*a14 + m1345*a04; + const RT m01346 = m0134*a64 - m0136*a44 + m0146*a34 - m0346*a14 + m1346*a04; + + const RT m01356 = m0135*a64 - m0136*a54 + m0156*a34 - m0356*a14 + m1356*a04; + const RT m01456 = m0145*a64 - m0146*a54 + m0156*a44 - m0456*a14 + m1456*a04; + + const RT m02345 = m0234*a54 - m0235*a44 + m0245*a34 - m0345*a24 + m2345*a04; + const RT m02346 = m0234*a64 - m0236*a44 + m0246*a34 - m0346*a24 + m2346*a04; + + const RT m02356 = m0235*a64 - m0236*a54 + m0256*a34 - m0356*a24 + m2356*a04; + const RT m02456 = m0245*a64 - m0246*a54 + m0256*a44 - m0456*a24 + m2456*a04; + const RT m03456 = m0345*a64 - m0346*a54 + m0356*a44 - m0456*a34 + m3456*a04; + + const RT m12345 = m1234*a54 - m1235*a44 + m1245*a34 - m1345*a24 + m2345*a14; + const RT m12346 = m1234*a64 - m1236*a44 + m1246*a34 - m1346*a24 + m2346*a14; + + + const RT m12356 = m1235*a64 - m1236*a54 + m1256*a34 - m1356*a24 + m2356*a14; + const RT m12456 = m1245*a64 - m1246*a54 + m1256*a44 - m1456*a24 + m2456*a14; + const RT m13456 = m1345*a64 - m1346*a54 + m1356*a44 - m1456*a34 + m3456*a14; + + const RT m23456 = m2345*a64 - m2346*a54 + m2356*a44 - m2456*a34 + m3456*a24; + +// Now compute the minors of rank 6 + const RT m012345 = m01234*a55 - m01235*a45 + m01245*a35 - m01345*a25 + m02345*a15 - m12345*a05; + const RT m012346 = m01234*a65 - m01236*a45 + m01246*a35 - m01346*a25 + m02346*a15 - m12346*a05; + const RT m012356 = m01235*a65 - m01236*a55 + m01256*a35 - m01356*a25 + m02356*a15 - m12356*a05; + const RT m012456 = m01245*a65 - m01246*a55 + m01256*a45 - m01456*a25 + m02456*a15 - m12456*a05; + const RT m013456 = m01345*a65 - m01346*a55 + m01356*a45 - m01456*a35 + m03456*a15 - m13456*a05; + const RT m023456 = m02345*a65 - m02346*a55 + m02356*a45 - m02456*a35 + m03456*a25 - m23456*a05; + const RT m123456 = m12345*a65 - m12346*a55 + m12356*a45 - m12456*a35 + m13456*a25 - m23456*a15; + + + // Now compute the minors of rank 7 + const RT m0123456 = m012345 * a66 - m012346 * a56 + m012356 * a46 - m012456 * a36 + m013456 * a26 - m023456 * a16 + m123456 * a06; + + if(m0123456 > 0) return 1; + if(m0123456 < 0) return -1; + return 0; +} From c75cc8aabddc864616527444c5714c442d5fd1b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 24 Apr 2025 10:23:25 +0200 Subject: [PATCH 18/49] FPG output for the orientationC6 --- .../include/CGAL/NewKernel_d/orientationC6.h | 734 +++++++++++++----- 1 file changed, 537 insertions(+), 197 deletions(-) diff --git a/NewKernel_d/include/CGAL/NewKernel_d/orientationC6.h b/NewKernel_d/include/CGAL/NewKernel_d/orientationC6.h index 63ba8232f6f..77525c8a21b 100644 --- a/NewKernel_d/include/CGAL/NewKernel_d/orientationC6.h +++ b/NewKernel_d/include/CGAL/NewKernel_d/orientationC6.h @@ -10,202 +10,542 @@ // // Author(s) : Andreas Fabri -typedef double RT; -int -orientation( - RT a01,RT a02,RT a03,RT a04,RT a05,RT a06, - RT a11,RT a12,RT a13,RT a14,RT a15,RT a16, - RT a21,RT a22,RT a23,RT a24,RT a25,RT a26, - RT a31,RT a32,RT a33,RT a34,RT a35,RT a36, - RT a41,RT a42,RT a43,RT a44,RT a45,RT a46, - RT a51,RT a52,RT a53,RT a54,RT a55,RT a56, - RT a61,RT a62,RT a63,RT a64,RT a65,RT a66) -{ -// First compute the det2x2 - const RT m01 = a11 - a01; - const RT m02 = a21 - a01; - const RT m03 = a31 - a01; - const RT m04 = a41 - a01; - const RT m05 = a51 - a01; - const RT m06 = a61 - a01; - - const RT m12 = a21 - a11; - const RT m13 = a31 - a11; - const RT m14 = a41 - a11; - const RT m15 = a51 - a11; - const RT m16 = a61 - a11; - - const RT m23 = a31 - a21; - const RT m24 = a41 - a21; - const RT m25 = a51 - a21; - const RT m26 = a61 - a21; - - const RT m34 = a41 - a31; - const RT m35 = a51 - a31; - const RT m36 = a61 - a31; - - const RT m45 = a51 - a41; - const RT m46 = a61 - a41; - - const RT m56 = a61 - a51; - -// Now compute the minors of rank 3 - const RT m012 = m01*a22 - m02*a12 + m12*a02; - const RT m013 = m01*a32 - m03*a12 + m13*a02; - const RT m014 = m01*a42 - m04*a12 + m14*a02; - const RT m015 = m01*a52 - m05*a12 + m15*a02; - const RT m016 = m01*a62 - m06*a12 + m16*a02; - - const RT m023 = m02*a32 - m03*a22 + m23*a02; - const RT m024 = m02*a42 - m04*a22 + m24*a02; - const RT m025 = m02*a52 - m05*a22 + m25*a02; - const RT m026 = m02*a62 - m06*a22 + m26*a02; - const RT m034 = m03*a42 - m04*a32 + m34*a02; - const RT m035 = m03*a52 - m05*a32 + m35*a02; - const RT m036 = m03*a62 - m06*a32 + m36*a02; - - const RT m045 = m04*a52 - m05*a42 + m45*a02; - const RT m046 = m04*a62 - m06*a42 + m46*a02; - - const RT m056 = m05*a62 - m06*a52 + m56*a02; - - - const RT m123 = m12*a32 - m13*a22 + m23*a12; - const RT m124 = m12*a42 - m14*a22 + m24*a12; - const RT m125 = m12*a52 - m15*a22 + m25*a12; - const RT m126 = m12*a62 - m16*a22 + m26*a12; - - const RT m134 = m13*a42 - m14*a32 + m34*a12; - const RT m135 = m13*a52 - m15*a32 + m35*a12; - const RT m136 = m13*a62 - m16*a32 + m36*a12; - - const RT m145 = m14*a52 - m15*a42 + m45*a12; - const RT m146 = m14*a62 - m16*a42 + m46*a12; - - const RT m156 = m15*a62 - m16*a52 + m56*a12; - - const RT m234 = m23*a42 - m24*a32 + m34*a22; - const RT m235 = m23*a52 - m25*a32 + m35*a22; - const RT m236 = m23*a62 - m26*a32 + m36*a22; - - const RT m245 = m24*a52 - m25*a42 + m45*a22; - const RT m246 = m24*a62 - m26*a42 + m46*a22; - - const RT m256 = m25*a62 - m26*a52 + m56*a22; - - const RT m345 = m34*a52 - m35*a42 + m45*a32; - const RT m346 = m34*a62 - m36*a42 + m46*a32; - - const RT m356 = m35*a62 - m36*a52 + m56*a32; - - const RT m456 = m45*a62 - m46*a52 + m56*a42; - -// Now compute the minors of rank 4 - const RT m0123 = m012*a33 - m013*a23 + m023*a13 - m123*a03; - - const RT m0124 = m012*a43 - m014*a23 + m024*a13 - m124*a03; - const RT m0125 = m012*a53 - m015*a23 + m025*a13 - m125*a03; - const RT m0126 = m012*a63 - m016*a23 + m026*a13 - m126*a03; - - const RT m0134 = m013*a43 - m014*a33 + m034*a13 - m134*a03; - const RT m0135 = m013*a53 - m015*a33 + m035*a13 - m135*a03; - const RT m0136 = m013*a63 - m016*a33 + m036*a13 - m136*a03; - - const RT m0145 = m014*a53 - m015*a43 + m045*a13 - m145*a03; - const RT m0146 = m014*a63 - m016*a43 + m046*a13 - m146*a03; - - const RT m0156 = m015*a63 - m016*a53 + m056*a13 - m156*a03; - - const RT m0234 = m023*a43 - m024*a33 + m034*a23 - m234*a03; - const RT m0235 = m023*a53 - m025*a33 + m035*a23 - m235*a03; - const RT m0236 = m023*a63 - m026*a33 + m036*a23 - m236*a03; - - const RT m0245 = m024*a53 - m025*a43 + m045*a23 - m245*a03; - const RT m0246 = m024*a63 - m026*a43 + m046*a23 - m246*a03; - - const RT m0256 = m025*a63 - m026*a53 + m056*a23 - m256*a03; - - const RT m0345 = m034*a53 - m035*a43 + m045*a33 - m345*a03; - const RT m0346 = m034*a63 - m036*a43 + m046*a33 - m346*a03; - - const RT m0356 = m035*a63 - m036*a53 + m056*a33 - m356*a03; - - const RT m0456 = m045*a63 - m046*a53 + m056*a43 - m456*a03; - - const RT m1234 = m123*a43 - m124*a33 + m134*a23 - m234*a13; - const RT m1235 = m123*a53 - m125*a33 + m135*a23 - m235*a13; - const RT m1236 = m123*a63 - m126*a33 + m136*a23 - m236*a13; - - const RT m1245 = m124*a53 - m125*a43 + m145*a23 - m245*a13; - const RT m1246 = m124*a63 - m126*a43 + m146*a23 - m246*a13; - - const RT m1256 = m125*a63 - m126*a53 + m156*a23 - m256*a13; - - const RT m1345 = m134*a53 - m135*a43 + m145*a33 - m345*a13; - const RT m1346 = m134*a63 - m136*a43 + m146*a33 - m346*a13; - - const RT m1356 = m135*a63 - m136*a53 + m156*a33 - m356*a13; - const RT m1456 = m145*a63 - m146*a53 + m156*a43 - m456*a13; - - const RT m2345 = m234*a53 - m235*a43 + m245*a33 - m345*a23; - const RT m2346 = m234*a63 - m236*a43 + m246*a33 - m346*a23; - - const RT m2356 = m235*a63 - m236*a53 + m256*a33 - m356*a23; - const RT m2456 = m245*a63 - m246*a53 + m256*a43 - m456*a23; - - const RT m3456 = m345*a63 - m346*a53 + m356*a43 - m456*a33; - - - // Now compute the minors of rank 5 - const RT m01234 = m0123*a44 - m0124*a34 + m0134*a24 - m0234*a14 + m1234*a04; - - const RT m01235 = m0123*a54 - m0125*a34 + m0135*a24 - m0235*a14 + m1235*a04; - - const RT m01236 = m0123*a64 - m0126*a34 + m0136*a24 - m0236*a14 + m1236*a04; - - const RT m01245 = m0124*a54 - m0125*a44 + m0145*a24 - m0245*a14 + m1245*a04; - const RT m01246 = m0124*a64 - m0126*a44 + m0146*a24 - m0246*a14 + m1246*a04; - - const RT m01256 = m0125*a64 - m0126*a54 + m0156*a24 - m0256*a14 + m1256*a04; - - const RT m01345 = m0134*a54 - m0135*a44 + m0145*a34 - m0345*a14 + m1345*a04; - const RT m01346 = m0134*a64 - m0136*a44 + m0146*a34 - m0346*a14 + m1346*a04; - - const RT m01356 = m0135*a64 - m0136*a54 + m0156*a34 - m0356*a14 + m1356*a04; - const RT m01456 = m0145*a64 - m0146*a54 + m0156*a44 - m0456*a14 + m1456*a04; - - const RT m02345 = m0234*a54 - m0235*a44 + m0245*a34 - m0345*a24 + m2345*a04; - const RT m02346 = m0234*a64 - m0236*a44 + m0246*a34 - m0346*a24 + m2346*a04; - - const RT m02356 = m0235*a64 - m0236*a54 + m0256*a34 - m0356*a24 + m2356*a04; - const RT m02456 = m0245*a64 - m0246*a54 + m0256*a44 - m0456*a24 + m2456*a04; - const RT m03456 = m0345*a64 - m0346*a54 + m0356*a44 - m0456*a34 + m3456*a04; - - const RT m12345 = m1234*a54 - m1235*a44 + m1245*a34 - m1345*a24 + m2345*a14; - const RT m12346 = m1234*a64 - m1236*a44 + m1246*a34 - m1346*a24 + m2346*a14; - - - const RT m12356 = m1235*a64 - m1236*a54 + m1256*a34 - m1356*a24 + m2356*a14; - const RT m12456 = m1245*a64 - m1246*a54 + m1256*a44 - m1456*a24 + m2456*a14; - const RT m13456 = m1345*a64 - m1346*a54 + m1356*a44 - m1456*a34 + m3456*a14; - - const RT m23456 = m2345*a64 - m2346*a54 + m2356*a44 - m2456*a34 + m3456*a24; - -// Now compute the minors of rank 6 - const RT m012345 = m01234*a55 - m01235*a45 + m01245*a35 - m01345*a25 + m02345*a15 - m12345*a05; - const RT m012346 = m01234*a65 - m01236*a45 + m01246*a35 - m01346*a25 + m02346*a15 - m12346*a05; - const RT m012356 = m01235*a65 - m01236*a55 + m01256*a35 - m01356*a25 + m02356*a15 - m12356*a05; - const RT m012456 = m01245*a65 - m01246*a55 + m01256*a45 - m01456*a25 + m02456*a15 - m12456*a05; - const RT m013456 = m01345*a65 - m01346*a55 + m01356*a45 - m01456*a35 + m03456*a15 - m13456*a05; - const RT m023456 = m02345*a65 - m02346*a55 + m02356*a45 - m02456*a35 + m03456*a25 - m23456*a05; - const RT m123456 = m12345*a65 - m12346*a55 + m12356*a45 - m12456*a35 + m13456*a25 - m23456*a15; - - - // Now compute the minors of rank 7 - const RT m0123456 = m012345 * a66 - m012346 * a56 + m012356 * a46 - m012456 * a36 + m013456 * a26 - m023456 * a16 + m123456 * a06; - - if(m0123456 > 0) return 1; - if(m0123456 < 0) return -1; - return 0; +inline int orientation( double a01, double a02, double a03, double a04, double a05, double a06, double a11, double a12, double a13, double a14, double a15, double a16, double a21, double a22, double a23, double a24, double a25, double a26, double a31, double a32, double a33, double a34, double a35, double a36, double a41, double a42, double a43, double a44, double a45, double a46, double a51, double a52, double a53, double a54, double a55, double a56, double a61, double a62, double a63, double a64, double a65, double a66) { + double m01; + m01 = (a11 - a01); + double m02; + m02 = (a21 - a01); + double m03; + m03 = (a31 - a01); + double m04; + m04 = (a41 - a01); + double m05; + m05 = (a51 - a01); + double m06; + m06 = (a61 - a01); + double m12; + m12 = (a21 - a11); + double m13; + m13 = (a31 - a11); + double m14; + m14 = (a41 - a11); + double m15; + m15 = (a51 - a11); + double m16; + m16 = (a61 - a11); + double m23; + m23 = (a31 - a21); + double m24; + m24 = (a41 - a21); + double m25; + m25 = (a51 - a21); + double m26; + m26 = (a61 - a21); + double m34; + m34 = (a41 - a31); + double m35; + m35 = (a51 - a31); + double m36; + m36 = (a61 - a31); + double m45; + m45 = (a51 - a41); + double m46; + m46 = (a61 - a41); + double m56; + m56 = (a61 - a51); + double m012; + m012 = (((m01 * a22) - (m02 * a12)) + (m12 * a02)); + double m013; + m013 = (((m01 * a32) - (m03 * a12)) + (m13 * a02)); + double m014; + m014 = (((m01 * a42) - (m04 * a12)) + (m14 * a02)); + double m015; + m015 = (((m01 * a52) - (m05 * a12)) + (m15 * a02)); + double m016; + m016 = (((m01 * a62) - (m06 * a12)) + (m16 * a02)); + double m023; + m023 = (((m02 * a32) - (m03 * a22)) + (m23 * a02)); + double m024; + m024 = (((m02 * a42) - (m04 * a22)) + (m24 * a02)); + double m025; + m025 = (((m02 * a52) - (m05 * a22)) + (m25 * a02)); + double m026; + m026 = (((m02 * a62) - (m06 * a22)) + (m26 * a02)); + double m034; + m034 = (((m03 * a42) - (m04 * a32)) + (m34 * a02)); + double m035; + m035 = (((m03 * a52) - (m05 * a32)) + (m35 * a02)); + double m036; + m036 = (((m03 * a62) - (m06 * a32)) + (m36 * a02)); + double m045; + m045 = (((m04 * a52) - (m05 * a42)) + (m45 * a02)); + double m046; + m046 = (((m04 * a62) - (m06 * a42)) + (m46 * a02)); + double m056; + m056 = (((m05 * a62) - (m06 * a52)) + (m56 * a02)); + double m123; + m123 = (((m12 * a32) - (m13 * a22)) + (m23 * a12)); + double m124; + m124 = (((m12 * a42) - (m14 * a22)) + (m24 * a12)); + double m125; + m125 = (((m12 * a52) - (m15 * a22)) + (m25 * a12)); + double m126; + m126 = (((m12 * a62) - (m16 * a22)) + (m26 * a12)); + double m134; + m134 = (((m13 * a42) - (m14 * a32)) + (m34 * a12)); + double m135; + m135 = (((m13 * a52) - (m15 * a32)) + (m35 * a12)); + double m136; + m136 = (((m13 * a62) - (m16 * a32)) + (m36 * a12)); + double m145; + m145 = (((m14 * a52) - (m15 * a42)) + (m45 * a12)); + double m146; + m146 = (((m14 * a62) - (m16 * a42)) + (m46 * a12)); + double m156; + m156 = (((m15 * a62) - (m16 * a52)) + (m56 * a12)); + double m234; + m234 = (((m23 * a42) - (m24 * a32)) + (m34 * a22)); + double m235; + m235 = (((m23 * a52) - (m25 * a32)) + (m35 * a22)); + double m236; + m236 = (((m23 * a62) - (m26 * a32)) + (m36 * a22)); + double m245; + m245 = (((m24 * a52) - (m25 * a42)) + (m45 * a22)); + double m246; + m246 = (((m24 * a62) - (m26 * a42)) + (m46 * a22)); + double m256; + m256 = (((m25 * a62) - (m26 * a52)) + (m56 * a22)); + double m345; + m345 = (((m34 * a52) - (m35 * a42)) + (m45 * a32)); + double m346; + m346 = (((m34 * a62) - (m36 * a42)) + (m46 * a32)); + double m356; + m356 = (((m35 * a62) - (m36 * a52)) + (m56 * a32)); + double m456; + m456 = (((m45 * a62) - (m46 * a52)) + (m56 * a42)); + double m0123; + m0123 = ((((m012 * a33) - (m013 * a23)) + (m023 * a13)) - (m123 * a03)); + double m0124; + m0124 = ((((m012 * a43) - (m014 * a23)) + (m024 * a13)) - (m124 * a03)); + double m0125; + m0125 = ((((m012 * a53) - (m015 * a23)) + (m025 * a13)) - (m125 * a03)); + double m0126; + m0126 = ((((m012 * a63) - (m016 * a23)) + (m026 * a13)) - (m126 * a03)); + double m0134; + m0134 = ((((m013 * a43) - (m014 * a33)) + (m034 * a13)) - (m134 * a03)); + double m0135; + m0135 = ((((m013 * a53) - (m015 * a33)) + (m035 * a13)) - (m135 * a03)); + double m0136; + m0136 = ((((m013 * a63) - (m016 * a33)) + (m036 * a13)) - (m136 * a03)); + double m0145; + m0145 = ((((m014 * a53) - (m015 * a43)) + (m045 * a13)) - (m145 * a03)); + double m0146; + m0146 = ((((m014 * a63) - (m016 * a43)) + (m046 * a13)) - (m146 * a03)); + double m0156; + m0156 = ((((m015 * a63) - (m016 * a53)) + (m056 * a13)) - (m156 * a03)); + double m0234; + m0234 = ((((m023 * a43) - (m024 * a33)) + (m034 * a23)) - (m234 * a03)); + double m0235; + m0235 = ((((m023 * a53) - (m025 * a33)) + (m035 * a23)) - (m235 * a03)); + double m0236; + m0236 = ((((m023 * a63) - (m026 * a33)) + (m036 * a23)) - (m236 * a03)); + double m0245; + m0245 = ((((m024 * a53) - (m025 * a43)) + (m045 * a23)) - (m245 * a03)); + double m0246; + m0246 = ((((m024 * a63) - (m026 * a43)) + (m046 * a23)) - (m246 * a03)); + double m0256; + m0256 = ((((m025 * a63) - (m026 * a53)) + (m056 * a23)) - (m256 * a03)); + double m0345; + m0345 = ((((m034 * a53) - (m035 * a43)) + (m045 * a33)) - (m345 * a03)); + double m0346; + m0346 = ((((m034 * a63) - (m036 * a43)) + (m046 * a33)) - (m346 * a03)); + double m0356; + m0356 = ((((m035 * a63) - (m036 * a53)) + (m056 * a33)) - (m356 * a03)); + double m0456; + m0456 = ((((m045 * a63) - (m046 * a53)) + (m056 * a43)) - (m456 * a03)); + double m1234; + m1234 = ((((m123 * a43) - (m124 * a33)) + (m134 * a23)) - (m234 * a13)); + double m1235; + m1235 = ((((m123 * a53) - (m125 * a33)) + (m135 * a23)) - (m235 * a13)); + double m1236; + m1236 = ((((m123 * a63) - (m126 * a33)) + (m136 * a23)) - (m236 * a13)); + double m1245; + m1245 = ((((m124 * a53) - (m125 * a43)) + (m145 * a23)) - (m245 * a13)); + double m1246; + m1246 = ((((m124 * a63) - (m126 * a43)) + (m146 * a23)) - (m246 * a13)); + double m1256; + m1256 = ((((m125 * a63) - (m126 * a53)) + (m156 * a23)) - (m256 * a13)); + double m1345; + m1345 = ((((m134 * a53) - (m135 * a43)) + (m145 * a33)) - (m345 * a13)); + double m1346; + m1346 = ((((m134 * a63) - (m136 * a43)) + (m146 * a33)) - (m346 * a13)); + double m1356; + m1356 = ((((m135 * a63) - (m136 * a53)) + (m156 * a33)) - (m356 * a13)); + double m1456; + m1456 = ((((m145 * a63) - (m146 * a53)) + (m156 * a43)) - (m456 * a13)); + double m2345; + m2345 = ((((m234 * a53) - (m235 * a43)) + (m245 * a33)) - (m345 * a23)); + double m2346; + m2346 = ((((m234 * a63) - (m236 * a43)) + (m246 * a33)) - (m346 * a23)); + double m2356; + m2356 = ((((m235 * a63) - (m236 * a53)) + (m256 * a33)) - (m356 * a23)); + double m2456; + m2456 = ((((m245 * a63) - (m246 * a53)) + (m256 * a43)) - (m456 * a23)); + double m3456; + m3456 = ((((m345 * a63) - (m346 * a53)) + (m356 * a43)) - (m456 * a33)); + double m01234; + m01234 = (((((m0123 * a44) - (m0124 * a34)) + (m0134 * a24)) - (m0234 * a14)) + (m1234 * a04)); + double m01235; + m01235 = (((((m0123 * a54) - (m0125 * a34)) + (m0135 * a24)) - (m0235 * a14)) + (m1235 * a04)); + double m01236; + m01236 = (((((m0123 * a64) - (m0126 * a34)) + (m0136 * a24)) - (m0236 * a14)) + (m1236 * a04)); + double m01245; + m01245 = (((((m0124 * a54) - (m0125 * a44)) + (m0145 * a24)) - (m0245 * a14)) + (m1245 * a04)); + double m01246; + m01246 = (((((m0124 * a64) - (m0126 * a44)) + (m0146 * a24)) - (m0246 * a14)) + (m1246 * a04)); + double m01256; + m01256 = (((((m0125 * a64) - (m0126 * a54)) + (m0156 * a24)) - (m0256 * a14)) + (m1256 * a04)); + double m01345; + m01345 = (((((m0134 * a54) - (m0135 * a44)) + (m0145 * a34)) - (m0345 * a14)) + (m1345 * a04)); + double m01346; + m01346 = (((((m0134 * a64) - (m0136 * a44)) + (m0146 * a34)) - (m0346 * a14)) + (m1346 * a04)); + double m01356; + m01356 = (((((m0135 * a64) - (m0136 * a54)) + (m0156 * a34)) - (m0356 * a14)) + (m1356 * a04)); + double m01456; + m01456 = (((((m0145 * a64) - (m0146 * a54)) + (m0156 * a44)) - (m0456 * a14)) + (m1456 * a04)); + double m02345; + m02345 = (((((m0234 * a54) - (m0235 * a44)) + (m0245 * a34)) - (m0345 * a24)) + (m2345 * a04)); + double m02346; + m02346 = (((((m0234 * a64) - (m0236 * a44)) + (m0246 * a34)) - (m0346 * a24)) + (m2346 * a04)); + double m02356; + m02356 = (((((m0235 * a64) - (m0236 * a54)) + (m0256 * a34)) - (m0356 * a24)) + (m2356 * a04)); + double m02456; + m02456 = (((((m0245 * a64) - (m0246 * a54)) + (m0256 * a44)) - (m0456 * a24)) + (m2456 * a04)); + double m03456; + m03456 = (((((m0345 * a64) - (m0346 * a54)) + (m0356 * a44)) - (m0456 * a34)) + (m3456 * a04)); + double m12345; + m12345 = (((((m1234 * a54) - (m1235 * a44)) + (m1245 * a34)) - (m1345 * a24)) + (m2345 * a14)); + double m12346; + m12346 = (((((m1234 * a64) - (m1236 * a44)) + (m1246 * a34)) - (m1346 * a24)) + (m2346 * a14)); + double m12356; + m12356 = (((((m1235 * a64) - (m1236 * a54)) + (m1256 * a34)) - (m1356 * a24)) + (m2356 * a14)); + double m12456; + m12456 = (((((m1245 * a64) - (m1246 * a54)) + (m1256 * a44)) - (m1456 * a24)) + (m2456 * a14)); + double m13456; + m13456 = (((((m1345 * a64) - (m1346 * a54)) + (m1356 * a44)) - (m1456 * a34)) + (m3456 * a14)); + double m23456; + m23456 = (((((m2345 * a64) - (m2346 * a54)) + (m2356 * a44)) - (m2456 * a34)) + (m3456 * a24)); + double m012345; + m012345 = ((((((m01234 * a55) - (m01235 * a45)) + (m01245 * a35)) - (m01345 * a25)) + (m02345 * a15)) - (m12345 * a05)); + double m012346; + m012346 = ((((((m01234 * a65) - (m01236 * a45)) + (m01246 * a35)) - (m01346 * a25)) + (m02346 * a15)) - (m12346 * a05)); + double m012356; + m012356 = ((((((m01235 * a65) - (m01236 * a55)) + (m01256 * a35)) - (m01356 * a25)) + (m02356 * a15)) - (m12356 * a05)); + double m012456; + m012456 = ((((((m01245 * a65) - (m01246 * a55)) + (m01256 * a45)) - (m01456 * a25)) + (m02456 * a15)) - (m12456 * a05)); + double m013456; + m013456 = ((((((m01345 * a65) - (m01346 * a55)) + (m01356 * a45)) - (m01456 * a35)) + (m03456 * a15)) - (m13456 * a05)); + double m023456; + m023456 = ((((((m02345 * a65) - (m02346 * a55)) + (m02356 * a45)) - (m02456 * a35)) + (m03456 * a25)) - (m23456 * a05)); + double m123456; + m123456 = ((((((m12345 * a65) - (m12346 * a55)) + (m12356 * a45)) - (m12456 * a35)) + (m13456 * a25)) - (m23456 * a15)); + double m0123456; + m0123456 = (((((((m012345 * a66) - (m012346 * a56)) + (m012356 * a46)) - (m012456 * a36)) + (m013456 * a26)) - (m023456 * a16)) + (m123456 * a06)); + int int_tmp_result; + double eps; + double max1 = fabs(a02); + if( (max1 < fabs(a12)) ) + { + max1 = fabs(a12); + } + if( (max1 < fabs(a22)) ) + { + max1 = fabs(a22); + } + if( (max1 < fabs(a32)) ) + { + max1 = fabs(a32); + } + if( (max1 < fabs(a42)) ) + { + max1 = fabs(a42); + } + if( (max1 < fabs(a52)) ) + { + max1 = fabs(a52); + } + if( (max1 < fabs(a62)) ) + { + max1 = fabs(a62); + } + double max2 = fabs(a03); + if( (max2 < fabs(a13)) ) + { + max2 = fabs(a13); + } + if( (max2 < fabs(a23)) ) + { + max2 = fabs(a23); + } + if( (max2 < fabs(a33)) ) + { + max2 = fabs(a33); + } + if( (max2 < fabs(a43)) ) + { + max2 = fabs(a43); + } + if( (max2 < fabs(a53)) ) + { + max2 = fabs(a53); + } + if( (max2 < fabs(a63)) ) + { + max2 = fabs(a63); + } + double max3 = fabs(a04); + if( (max3 < fabs(a14)) ) + { + max3 = fabs(a14); + } + if( (max3 < fabs(a24)) ) + { + max3 = fabs(a24); + } + if( (max3 < fabs(a34)) ) + { + max3 = fabs(a34); + } + if( (max3 < fabs(a44)) ) + { + max3 = fabs(a44); + } + if( (max3 < fabs(a54)) ) + { + max3 = fabs(a54); + } + if( (max3 < fabs(a64)) ) + { + max3 = fabs(a64); + } + double max4 = fabs(a05); + if( (max4 < fabs(a15)) ) + { + max4 = fabs(a15); + } + if( (max4 < fabs(a25)) ) + { + max4 = fabs(a25); + } + if( (max4 < fabs(a35)) ) + { + max4 = fabs(a35); + } + if( (max4 < fabs(a45)) ) + { + max4 = fabs(a45); + } + if( (max4 < fabs(a55)) ) + { + max4 = fabs(a55); + } + if( (max4 < fabs(a65)) ) + { + max4 = fabs(a65); + } + double max5 = fabs(a06); + if( (max5 < fabs(a16)) ) + { + max5 = fabs(a16); + } + if( (max5 < fabs(a26)) ) + { + max5 = fabs(a26); + } + if( (max5 < fabs(a36)) ) + { + max5 = fabs(a36); + } + if( (max5 < fabs(a46)) ) + { + max5 = fabs(a46); + } + if( (max5 < fabs(a56)) ) + { + max5 = fabs(a56); + } + if( (max5 < fabs(a66)) ) + { + max5 = fabs(a66); + } + double max6 = fabs(m01); + if( (max6 < fabs(m02)) ) + { + max6 = fabs(m02); + } + if( (max6 < fabs(m03)) ) + { + max6 = fabs(m03); + } + if( (max6 < fabs(m04)) ) + { + max6 = fabs(m04); + } + if( (max6 < fabs(m05)) ) + { + max6 = fabs(m05); + } + if( (max6 < fabs(m06)) ) + { + max6 = fabs(m06); + } + if( (max6 < fabs(m12)) ) + { + max6 = fabs(m12); + } + if( (max6 < fabs(m13)) ) + { + max6 = fabs(m13); + } + if( (max6 < fabs(m14)) ) + { + max6 = fabs(m14); + } + if( (max6 < fabs(m15)) ) + { + max6 = fabs(m15); + } + if( (max6 < fabs(m16)) ) + { + max6 = fabs(m16); + } + if( (max6 < fabs(m23)) ) + { + max6 = fabs(m23); + } + if( (max6 < fabs(m24)) ) + { + max6 = fabs(m24); + } + if( (max6 < fabs(m25)) ) + { + max6 = fabs(m25); + } + if( (max6 < fabs(m26)) ) + { + max6 = fabs(m26); + } + if( (max6 < fabs(m34)) ) + { + max6 = fabs(m34); + } + if( (max6 < fabs(m35)) ) + { + max6 = fabs(m35); + } + if( (max6 < fabs(m36)) ) + { + max6 = fabs(m36); + } + if( (max6 < fabs(m45)) ) + { + max6 = fabs(m45); + } + if( (max6 < fabs(m46)) ) + { + max6 = fabs(m46); + } + if( (max6 < fabs(m56)) ) + { + max6 = fabs(m56); + } + double lower_bound_1; + double upper_bound_1; + lower_bound_1 = max6; + upper_bound_1 = max6; + if( (max5 < lower_bound_1) ) + { + lower_bound_1 = max5; + } + else + { + if( (max5 > upper_bound_1) ) + { + upper_bound_1 = max5; + } + } + if( (max1 < lower_bound_1) ) + { + lower_bound_1 = max1; + } + else + { + if( (max1 > upper_bound_1) ) + { + upper_bound_1 = max1; + } + } + if( (max2 < lower_bound_1) ) + { + lower_bound_1 = max2; + } + else + { + if( (max2 > upper_bound_1) ) + { + upper_bound_1 = max2; + } + } + if( (max3 < lower_bound_1) ) + { + lower_bound_1 = max3; + } + else + { + if( (max3 > upper_bound_1) ) + { + upper_bound_1 = max3; + } + } + if( (max4 < lower_bound_1) ) + { + lower_bound_1 = max4; + } + else + { + if( (max4 > upper_bound_1) ) + { + upper_bound_1 = max4; + } + } + if( (lower_bound_1 < 3.98278627399642140002e-50) ) + { + return FPG_UNCERTAIN_VALUE; + } + else + { + if( (upper_bound_1 > 1.87072209578355511223e+50) ) + { + return FPG_UNCERTAIN_VALUE; + } + eps = (5.57471180948088246730e-12 * (((((max6 * max1) * max2) * max3) * max4) * max5)); + if( (m0123456 > eps) ) + { + int_tmp_result = 1; + } + else + { + if( (m0123456 < -eps) ) + { + int_tmp_result = -1; + } + else + { + return FPG_UNCERTAIN_VALUE; + } + } + } + return int_tmp_result; } + From e45f8faaa7b2b20785e7a3e58c918faaf4044f53 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Thu, 24 Apr 2025 09:24:05 +0100 Subject: [PATCH 19/49] typo --- .../Triangulation/CGAL/TDS_full_cell_default_storage_policy.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Triangulation/doc/Triangulation/CGAL/TDS_full_cell_default_storage_policy.h b/Triangulation/doc/Triangulation/CGAL/TDS_full_cell_default_storage_policy.h index b6ed9765723..225ee67becb 100644 --- a/Triangulation/doc/Triangulation/CGAL/TDS_full_cell_default_storage_policy.h +++ b/Triangulation/doc/Triangulation/CGAL/TDS_full_cell_default_storage_policy.h @@ -3,8 +3,8 @@ namespace CGAL { /*! \ingroup PkgTriangulationsRef - A tag class to indicate that mirror indices are not stored in full cells. + A tag class to indicate that no mirror indices are stored in full cells. */ -class TDS_full_cell_mirror_storage_policy +class TDS_full_cell_default_storage_policy {}; } \ No newline at end of file From 717f6aff449cbd4cf587b3927dfac1f72efbafe7 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Thu, 24 Apr 2025 10:32:25 +0100 Subject: [PATCH 20/49] Add benchmark and static filter for 6D --- .../internal/Static_filters/Orientation_6.h | 613 ++++++++++++++++++ .../NewKernel_d/Cartesian_static_filters.h | 62 ++ .../benchmark/Triangulation/CMakeLists.txt | 3 + .../benchmark/Triangulation/bench6d.cpp | 60 ++ .../benchmark/Triangulation/generate_d.cpp | 6 +- 5 files changed, 741 insertions(+), 3 deletions(-) create mode 100644 Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_6.h create mode 100644 Triangulation/benchmark/Triangulation/bench6d.cpp diff --git a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_6.h b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_6.h new file mode 100644 index 00000000000..7ad22e52128 --- /dev/null +++ b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_6.h @@ -0,0 +1,613 @@ +// Copyright (c) 2025 GeometryFactory (France). +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org) +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial +// +// +// Author(s) : Andreas Fabri + +#ifndef CGAL_INTERNAL_STATIC_FILTERS_ORIENTATION_6_H +#define CGAL_INTERNAL_STATIC_FILTERS_ORIENTATION_6_H + +#include +#include +#include + +namespace CGAL { namespace internal { namespace Static_filters_predicates { + + + +template < typename K_base > +class Orientation_6 + : public K_base::Orientation_6 +{ + typedef typename K_base::Orientation Orientation; + typedef typename K_base::Point_6 Point_6; + typedef typename K_base::Orientation_6 Base; + +public: + using Base::operator(); + + Orientation + operator()(const Point_6 &p, const Point_6 &q, + const Point_6 &r, const Point_6 &s, + const Point_6 &t, const Point_6 &u, const Point_6 &v) const + { + CGAL_BRANCH_PROFILER_3("semi-static failures/attempts/calls to : Orientation_6", tmp); + + double p0, p1, p2, p3, p4, q0, q1, q2, q3, q4, r0, r1, r2, r3, r4, s0, s1, s2, s3, s4, t0, t1, t2, t3, t4, u0, u1, u2, u3, u4; + + if (fit_in_double(p.c0(), a01) && fit_in_double(p.c1(), a02) && + fit_in_double(p.c2(), a03) && fit_in_double(p.c3(), a04) && + fit_in_double(p.c4(), a05) && fit_in_double(p.c5(), a06) && + + fit_in_double(q.c0(), a11) && fit_in_double(q.c1(), a12) && + fit_in_double(q.c2(), a13) && fit_in_double(q.c3(), a14) && + fit_in_double(q.c4(), a15) && fit_in_double(q.c4(), a16) && + + fit_in_double(r.c0(), a21) && fit_in_double(r.c1(), a22) && + fit_in_double(r.c2(), a23) && fit_in_double(r.c3(), a24) && + fit_in_double(r.c4(), a25) && fit_in_double(r.c5(), a26) && + + fit_in_double(s.c0(), a31) && fit_in_double(s.c1(), a32) && + fit_in_double(s.c2(), a33) && fit_in_double(s.c3(), a34) && + fit_in_double(s.c4(), a35) && fit_in_double(s.c5(), a36) && + + fit_in_double(t.c0(), a41) && fit_in_double(t.c1(), a42) && + fit_in_double(t.c2(), a43) && fit_in_double(t.c3(), a44) && + fit_in_double(t.c4(), a45) && fit_in_double(t.c5(), a46) && + + fit_in_double(u.c0(), a51) && fit_in_double(u.c1(), a52) && + fit_in_double(u.c2(), a53) && fit_in_double(u.c3(), a54) && + fit_in_double(u.c4(), a55) && fit_in_double(u.c5(), a56) && + fit_in_double(v.c0(), a61) && fit_in_double(v.c1(), a62) && + fit_in_double(v.c2(), a63) && fit_in_double(v.c3(), a64) && + fit_in_double(v.c4(), a65) && fit_in_double(v.c5(), a66)) + { + CGAL_assertion_code(Orientation should_be = Base::operator()(p, q, r, s, t, u, v)); + double m01; + m01 = (a11 - a01); + double m02; + m02 = (a21 - a01); + double m03; + m03 = (a31 - a01); + double m04; + m04 = (a41 - a01); + double m05; + m05 = (a51 - a01); + double m06; + m06 = (a61 - a01); + double m12; + m12 = (a21 - a11); + double m13; + m13 = (a31 - a11); + double m14; + m14 = (a41 - a11); + double m15; + m15 = (a51 - a11); + double m16; + m16 = (a61 - a11); + double m23; + m23 = (a31 - a21); + double m24; + m24 = (a41 - a21); + double m25; + m25 = (a51 - a21); + double m26; + m26 = (a61 - a21); + double m34; + m34 = (a41 - a31); + double m35; + m35 = (a51 - a31); + double m36; + m36 = (a61 - a31); + double m45; + m45 = (a51 - a41); + double m46; + m46 = (a61 - a41); + double m56; + m56 = (a61 - a51); + double m012; + m012 = (((m01 * a22) - (m02 * a12)) + (m12 * a02)); + double m013; + m013 = (((m01 * a32) - (m03 * a12)) + (m13 * a02)); + double m014; + m014 = (((m01 * a42) - (m04 * a12)) + (m14 * a02)); + double m015; + m015 = (((m01 * a52) - (m05 * a12)) + (m15 * a02)); + double m016; + m016 = (((m01 * a62) - (m06 * a12)) + (m16 * a02)); + double m023; + m023 = (((m02 * a32) - (m03 * a22)) + (m23 * a02)); + double m024; + m024 = (((m02 * a42) - (m04 * a22)) + (m24 * a02)); + double m025; + m025 = (((m02 * a52) - (m05 * a22)) + (m25 * a02)); + double m026; + m026 = (((m02 * a62) - (m06 * a22)) + (m26 * a02)); + double m034; + m034 = (((m03 * a42) - (m04 * a32)) + (m34 * a02)); + double m035; + m035 = (((m03 * a52) - (m05 * a32)) + (m35 * a02)); + double m036; + m036 = (((m03 * a62) - (m06 * a32)) + (m36 * a02)); + double m045; + m045 = (((m04 * a52) - (m05 * a42)) + (m45 * a02)); + double m046; + m046 = (((m04 * a62) - (m06 * a42)) + (m46 * a02)); + double m056; + m056 = (((m05 * a62) - (m06 * a52)) + (m56 * a02)); + double m123; + m123 = (((m12 * a32) - (m13 * a22)) + (m23 * a12)); + double m124; + m124 = (((m12 * a42) - (m14 * a22)) + (m24 * a12)); + double m125; + m125 = (((m12 * a52) - (m15 * a22)) + (m25 * a12)); + double m126; + m126 = (((m12 * a62) - (m16 * a22)) + (m26 * a12)); + double m134; + m134 = (((m13 * a42) - (m14 * a32)) + (m34 * a12)); + double m135; + m135 = (((m13 * a52) - (m15 * a32)) + (m35 * a12)); + double m136; + m136 = (((m13 * a62) - (m16 * a32)) + (m36 * a12)); + double m145; + m145 = (((m14 * a52) - (m15 * a42)) + (m45 * a12)); + double m146; + m146 = (((m14 * a62) - (m16 * a42)) + (m46 * a12)); + double m156; + m156 = (((m15 * a62) - (m16 * a52)) + (m56 * a12)); + double m234; + m234 = (((m23 * a42) - (m24 * a32)) + (m34 * a22)); + double m235; + m235 = (((m23 * a52) - (m25 * a32)) + (m35 * a22)); + double m236; + m236 = (((m23 * a62) - (m26 * a32)) + (m36 * a22)); + double m245; + m245 = (((m24 * a52) - (m25 * a42)) + (m45 * a22)); + double m246; + m246 = (((m24 * a62) - (m26 * a42)) + (m46 * a22)); + double m256; + m256 = (((m25 * a62) - (m26 * a52)) + (m56 * a22)); + double m345; + m345 = (((m34 * a52) - (m35 * a42)) + (m45 * a32)); + double m346; + m346 = (((m34 * a62) - (m36 * a42)) + (m46 * a32)); + double m356; + m356 = (((m35 * a62) - (m36 * a52)) + (m56 * a32)); + double m456; + m456 = (((m45 * a62) - (m46 * a52)) + (m56 * a42)); + double m0123; + m0123 = ((((m012 * a33) - (m013 * a23)) + (m023 * a13)) - (m123 * a03)); + double m0124; + m0124 = ((((m012 * a43) - (m014 * a23)) + (m024 * a13)) - (m124 * a03)); + double m0125; + m0125 = ((((m012 * a53) - (m015 * a23)) + (m025 * a13)) - (m125 * a03)); + double m0126; + m0126 = ((((m012 * a63) - (m016 * a23)) + (m026 * a13)) - (m126 * a03)); + double m0134; + m0134 = ((((m013 * a43) - (m014 * a33)) + (m034 * a13)) - (m134 * a03)); + double m0135; + m0135 = ((((m013 * a53) - (m015 * a33)) + (m035 * a13)) - (m135 * a03)); + double m0136; + m0136 = ((((m013 * a63) - (m016 * a33)) + (m036 * a13)) - (m136 * a03)); + double m0145; + m0145 = ((((m014 * a53) - (m015 * a43)) + (m045 * a13)) - (m145 * a03)); + double m0146; + m0146 = ((((m014 * a63) - (m016 * a43)) + (m046 * a13)) - (m146 * a03)); + double m0156; + m0156 = ((((m015 * a63) - (m016 * a53)) + (m056 * a13)) - (m156 * a03)); + double m0234; + m0234 = ((((m023 * a43) - (m024 * a33)) + (m034 * a23)) - (m234 * a03)); + double m0235; + m0235 = ((((m023 * a53) - (m025 * a33)) + (m035 * a23)) - (m235 * a03)); + double m0236; + m0236 = ((((m023 * a63) - (m026 * a33)) + (m036 * a23)) - (m236 * a03)); + double m0245; + m0245 = ((((m024 * a53) - (m025 * a43)) + (m045 * a23)) - (m245 * a03)); + double m0246; + m0246 = ((((m024 * a63) - (m026 * a43)) + (m046 * a23)) - (m246 * a03)); + double m0256; + m0256 = ((((m025 * a63) - (m026 * a53)) + (m056 * a23)) - (m256 * a03)); + double m0345; + m0345 = ((((m034 * a53) - (m035 * a43)) + (m045 * a33)) - (m345 * a03)); + double m0346; + m0346 = ((((m034 * a63) - (m036 * a43)) + (m046 * a33)) - (m346 * a03)); + double m0356; + m0356 = ((((m035 * a63) - (m036 * a53)) + (m056 * a33)) - (m356 * a03)); + double m0456; + m0456 = ((((m045 * a63) - (m046 * a53)) + (m056 * a43)) - (m456 * a03)); + double m1234; + m1234 = ((((m123 * a43) - (m124 * a33)) + (m134 * a23)) - (m234 * a13)); + double m1235; + m1235 = ((((m123 * a53) - (m125 * a33)) + (m135 * a23)) - (m235 * a13)); + double m1236; + m1236 = ((((m123 * a63) - (m126 * a33)) + (m136 * a23)) - (m236 * a13)); + double m1245; + m1245 = ((((m124 * a53) - (m125 * a43)) + (m145 * a23)) - (m245 * a13)); + double m1246; + m1246 = ((((m124 * a63) - (m126 * a43)) + (m146 * a23)) - (m246 * a13)); + double m1256; + m1256 = ((((m125 * a63) - (m126 * a53)) + (m156 * a23)) - (m256 * a13)); + double m1345; + m1345 = ((((m134 * a53) - (m135 * a43)) + (m145 * a33)) - (m345 * a13)); + double m1346; + m1346 = ((((m134 * a63) - (m136 * a43)) + (m146 * a33)) - (m346 * a13)); + double m1356; + m1356 = ((((m135 * a63) - (m136 * a53)) + (m156 * a33)) - (m356 * a13)); + double m1456; + m1456 = ((((m145 * a63) - (m146 * a53)) + (m156 * a43)) - (m456 * a13)); + double m2345; + m2345 = ((((m234 * a53) - (m235 * a43)) + (m245 * a33)) - (m345 * a23)); + double m2346; + m2346 = ((((m234 * a63) - (m236 * a43)) + (m246 * a33)) - (m346 * a23)); + double m2356; + m2356 = ((((m235 * a63) - (m236 * a53)) + (m256 * a33)) - (m356 * a23)); + double m2456; + m2456 = ((((m245 * a63) - (m246 * a53)) + (m256 * a43)) - (m456 * a23)); + double m3456; + m3456 = ((((m345 * a63) - (m346 * a53)) + (m356 * a43)) - (m456 * a33)); + double m01234; + m01234 = (((((m0123 * a44) - (m0124 * a34)) + (m0134 * a24)) - (m0234 * a14)) + (m1234 * a04)); + double m01235; + m01235 = (((((m0123 * a54) - (m0125 * a34)) + (m0135 * a24)) - (m0235 * a14)) + (m1235 * a04)); + double m01236; + m01236 = (((((m0123 * a64) - (m0126 * a34)) + (m0136 * a24)) - (m0236 * a14)) + (m1236 * a04)); + double m01245; + m01245 = (((((m0124 * a54) - (m0125 * a44)) + (m0145 * a24)) - (m0245 * a14)) + (m1245 * a04)); + double m01246; + m01246 = (((((m0124 * a64) - (m0126 * a44)) + (m0146 * a24)) - (m0246 * a14)) + (m1246 * a04)); + double m01256; + m01256 = (((((m0125 * a64) - (m0126 * a54)) + (m0156 * a24)) - (m0256 * a14)) + (m1256 * a04)); + double m01345; + m01345 = (((((m0134 * a54) - (m0135 * a44)) + (m0145 * a34)) - (m0345 * a14)) + (m1345 * a04)); + double m01346; + m01346 = (((((m0134 * a64) - (m0136 * a44)) + (m0146 * a34)) - (m0346 * a14)) + (m1346 * a04)); + double m01356; + m01356 = (((((m0135 * a64) - (m0136 * a54)) + (m0156 * a34)) - (m0356 * a14)) + (m1356 * a04)); + double m01456; + m01456 = (((((m0145 * a64) - (m0146 * a54)) + (m0156 * a44)) - (m0456 * a14)) + (m1456 * a04)); + double m02345; + m02345 = (((((m0234 * a54) - (m0235 * a44)) + (m0245 * a34)) - (m0345 * a24)) + (m2345 * a04)); + double m02346; + m02346 = (((((m0234 * a64) - (m0236 * a44)) + (m0246 * a34)) - (m0346 * a24)) + (m2346 * a04)); + double m02356; + m02356 = (((((m0235 * a64) - (m0236 * a54)) + (m0256 * a34)) - (m0356 * a24)) + (m2356 * a04)); + double m02456; + m02456 = (((((m0245 * a64) - (m0246 * a54)) + (m0256 * a44)) - (m0456 * a24)) + (m2456 * a04)); + double m03456; + m03456 = (((((m0345 * a64) - (m0346 * a54)) + (m0356 * a44)) - (m0456 * a34)) + (m3456 * a04)); + double m12345; + m12345 = (((((m1234 * a54) - (m1235 * a44)) + (m1245 * a34)) - (m1345 * a24)) + (m2345 * a14)); + double m12346; + m12346 = (((((m1234 * a64) - (m1236 * a44)) + (m1246 * a34)) - (m1346 * a24)) + (m2346 * a14)); + double m12356; + m12356 = (((((m1235 * a64) - (m1236 * a54)) + (m1256 * a34)) - (m1356 * a24)) + (m2356 * a14)); + double m12456; + m12456 = (((((m1245 * a64) - (m1246 * a54)) + (m1256 * a44)) - (m1456 * a24)) + (m2456 * a14)); + double m13456; + m13456 = (((((m1345 * a64) - (m1346 * a54)) + (m1356 * a44)) - (m1456 * a34)) + (m3456 * a14)); + double m23456; + m23456 = (((((m2345 * a64) - (m2346 * a54)) + (m2356 * a44)) - (m2456 * a34)) + (m3456 * a24)); + double m012345; + m012345 = ((((((m01234 * a55) - (m01235 * a45)) + (m01245 * a35)) - (m01345 * a25)) + (m02345 * a15)) - (m12345 * a05)); + double m012346; + m012346 = ((((((m01234 * a65) - (m01236 * a45)) + (m01246 * a35)) - (m01346 * a25)) + (m02346 * a15)) - (m12346 * a05)); + double m012356; + m012356 = ((((((m01235 * a65) - (m01236 * a55)) + (m01256 * a35)) - (m01356 * a25)) + (m02356 * a15)) - (m12356 * a05)); + double m012456; + m012456 = ((((((m01245 * a65) - (m01246 * a55)) + (m01256 * a45)) - (m01456 * a25)) + (m02456 * a15)) - (m12456 * a05)); + double m013456; + m013456 = ((((((m01345 * a65) - (m01346 * a55)) + (m01356 * a45)) - (m01456 * a35)) + (m03456 * a15)) - (m13456 * a05)); + double m023456; + m023456 = ((((((m02345 * a65) - (m02346 * a55)) + (m02356 * a45)) - (m02456 * a35)) + (m03456 * a25)) - (m23456 * a05)); + double m123456; + m123456 = ((((((m12345 * a65) - (m12346 * a55)) + (m12356 * a45)) - (m12456 * a35)) + (m13456 * a25)) - (m23456 * a15)); + double m0123456; + m0123456 = (((((((m012345 * a66) - (m012346 * a56)) + (m012356 * a46)) - (m012456 * a36)) + (m013456 * a26)) - (m023456 * a16)) + (m123456 * a06)); + int int_tmp_result; + double eps; + double max1 = fabs(a02); + if( (max1 < fabs(a12)) ) + { + max1 = fabs(a12); + } + if( (max1 < fabs(a22)) ) + { + max1 = fabs(a22); + } + if( (max1 < fabs(a32)) ) + { + max1 = fabs(a32); + } + if( (max1 < fabs(a42)) ) + { + max1 = fabs(a42); + } + if( (max1 < fabs(a52)) ) + { + max1 = fabs(a52); + } + if( (max1 < fabs(a62)) ) + { + max1 = fabs(a62); + } + double max2 = fabs(a03); + if( (max2 < fabs(a13)) ) + { + max2 = fabs(a13); + } + if( (max2 < fabs(a23)) ) + { + max2 = fabs(a23); + } + if( (max2 < fabs(a33)) ) + { + max2 = fabs(a33); + } + if( (max2 < fabs(a43)) ) + { + max2 = fabs(a43); + } + if( (max2 < fabs(a53)) ) + { + max2 = fabs(a53); + } + if( (max2 < fabs(a63)) ) + { + max2 = fabs(a63); + } + double max3 = fabs(a04); + if( (max3 < fabs(a14)) ) + { + max3 = fabs(a14); + } + if( (max3 < fabs(a24)) ) + { + max3 = fabs(a24); + } + if( (max3 < fabs(a34)) ) + { + max3 = fabs(a34); + } + if( (max3 < fabs(a44)) ) + { + max3 = fabs(a44); + } + if( (max3 < fabs(a54)) ) + { + max3 = fabs(a54); + } + if( (max3 < fabs(a64)) ) + { + max3 = fabs(a64); + } + double max4 = fabs(a05); + if( (max4 < fabs(a15)) ) + { + max4 = fabs(a15); + } + if( (max4 < fabs(a25)) ) + { + max4 = fabs(a25); + } + if( (max4 < fabs(a35)) ) + { + max4 = fabs(a35); + } + if( (max4 < fabs(a45)) ) + { + max4 = fabs(a45); + } + if( (max4 < fabs(a55)) ) + { + max4 = fabs(a55); + } + if( (max4 < fabs(a65)) ) + { + max4 = fabs(a65); + } + double max5 = fabs(a06); + if( (max5 < fabs(a16)) ) + { + max5 = fabs(a16); + } + if( (max5 < fabs(a26)) ) + { + max5 = fabs(a26); + } + if( (max5 < fabs(a36)) ) + { + max5 = fabs(a36); + } + if( (max5 < fabs(a46)) ) + { + max5 = fabs(a46); + } + if( (max5 < fabs(a56)) ) + { + max5 = fabs(a56); + } + if( (max5 < fabs(a66)) ) + { + max5 = fabs(a66); + } + double max6 = fabs(m01); + if( (max6 < fabs(m02)) ) + { + max6 = fabs(m02); + } + if( (max6 < fabs(m03)) ) + { + max6 = fabs(m03); + } + if( (max6 < fabs(m04)) ) + { + max6 = fabs(m04); + } + if( (max6 < fabs(m05)) ) + { + max6 = fabs(m05); + } + if( (max6 < fabs(m06)) ) + { + max6 = fabs(m06); + } + if( (max6 < fabs(m12)) ) + { + max6 = fabs(m12); + } + if( (max6 < fabs(m13)) ) + { + max6 = fabs(m13); + } + if( (max6 < fabs(m14)) ) + { + max6 = fabs(m14); + } + if( (max6 < fabs(m15)) ) + { + max6 = fabs(m15); + } + if( (max6 < fabs(m16)) ) + { + max6 = fabs(m16); + } + if( (max6 < fabs(m23)) ) + { + max6 = fabs(m23); + } + if( (max6 < fabs(m24)) ) + { + max6 = fabs(m24); + } + if( (max6 < fabs(m25)) ) + { + max6 = fabs(m25); + } + if( (max6 < fabs(m26)) ) + { + max6 = fabs(m26); + } + if( (max6 < fabs(m34)) ) + { + max6 = fabs(m34); + } + if( (max6 < fabs(m35)) ) + { + max6 = fabs(m35); + } + if( (max6 < fabs(m36)) ) + { + max6 = fabs(m36); + } + if( (max6 < fabs(m45)) ) + { + max6 = fabs(m45); + } + if( (max6 < fabs(m46)) ) + { + max6 = fabs(m46); + } + if( (max6 < fabs(m56)) ) + { + max6 = fabs(m56); + } + double lower_bound_1; + double upper_bound_1; + lower_bound_1 = max6; + upper_bound_1 = max6; + if( (max5 < lower_bound_1) ) + { + lower_bound_1 = max5; + } + else + { + if( (max5 > upper_bound_1) ) + { + upper_bound_1 = max5; + } + } + if( (max1 < lower_bound_1) ) + { + lower_bound_1 = max1; + } + else + { + if( (max1 > upper_bound_1) ) + { + upper_bound_1 = max1; + } + } + if( (max2 < lower_bound_1) ) + { + lower_bound_1 = max2; + } + else + { + if( (max2 > upper_bound_1) ) + { + upper_bound_1 = max2; + } + } + if( (max3 < lower_bound_1) ) + { + lower_bound_1 = max3; + } + else + { + if( (max3 > upper_bound_1) ) + { + upper_bound_1 = max3; + } + } + if( (max4 < lower_bound_1) ) + { + lower_bound_1 = max4; + } + else + { + if( (max4 > upper_bound_1) ) + { + upper_bound_1 = max4; + } + } + if( (lower_bound_1 < 3.98278627399642140002e-50) ) + { + return Base::operator()(p, q, r, s, t, u, v); + } + else + { + if( (upper_bound_1 > 1.87072209578355511223e+50) ) + { + return Base::operator()(p, q, r, s, t, u, v); + } + eps = (5.57471180948088246730e-12 * (((((max6 * max1) * max2) * max3) * max4) * max5)); + if( (m0123456 > eps) ) + { + CGAL_assertion(should_be == POSITIVE); + return POSITIVE; + } + else + { + if( (m0123456 < -eps) ) + { + CGAL_assertion(should_be == NEGATIVE); + return NEGATIVE; + } + } + } + } + return Base::operator()(p, q, r, s, t, u, v); + } + + +}; + +} } } // namespace CGAL::internal::Static_filters_predicates + +#endif // CGAL_INTERNAL_STATIC_FILTERS_ORIENTATION_6_H diff --git a/NewKernel_d/include/CGAL/NewKernel_d/Cartesian_static_filters.h b/NewKernel_d/include/CGAL/NewKernel_d/Cartesian_static_filters.h index 160c3206276..66be77c020d 100644 --- a/NewKernel_d/include/CGAL/NewKernel_d/Cartesian_static_filters.h +++ b/NewKernel_d/include/CGAL/NewKernel_d/Cartesian_static_filters.h @@ -19,6 +19,7 @@ #include #include #include +#include namespace CGAL { namespace SFA { // static filter adapter @@ -199,6 +200,55 @@ template struct Orientation_of_points_5 : private Store_k } }; +template struct Adapter_6 { + typedef typename Get_type::type Orientation; + typedef typename Get_type::type Oriented_side; + typedef typename Get_type::type Point; + typedef typename Get_functor::type CC; + typedef typename Get_functor::type Orientation_base; + struct Point_6 { + R_ const&r; CC const&c; Point const& p; + Point_6(R_ const&r_, CC const&c_, Point const&p_):r(r_),c(c_),p(p_){} + decltype(auto) c0()const{return c(p,0);} + decltype(auto) c1()const{return c(p,1);} + decltype(auto) c2()const{return c(p,2);} + decltype(auto) c3()const{return c(p,3);} + decltype(auto) c4()const{return c(p,4);} + decltype(auto) c5()const{return c(p,5);} + }; + struct Orientation_6 { + typedef typename Get_type::type result_type; + auto operator()(Point_5 const&A, Point6 const&B, Point6 const&C, + Point6 const&D, Point6 const&E, Point6 const&F, Point6 const&G)const{ + Point const* t[7]={&A.p,&B.p,&C.p,&D.p,&E.p,&F.p,&G.p}; + return Orientation_base(A.r)(make_transforming_iterator(t+0),make_transforming_iterator(t+7)); + } + }; +}; +template struct Orientation_of_points_6 : private Store_kernel { + CGAL_FUNCTOR_INIT_STORE(Orientation_of_points_6) + typedef typename Get_type::type Point; + typedef typename Get_type::type result_type; + typedef typename Get_functor::type CC; + typedef Adapter_5 Adapter; + template result_type operator()(Iter f, Iter CGAL_assertion_code(e))const{ + CC c(this->kernel()); + Point const& A=*f; + Point const& B=*++f; + Point const& C=*++f; + Point const& D=*++f; + Point const& E=*++f; + Point const& F=*++f; + Point const& G=*++f; + CGAL_assertion(++f==e); + typedef typename Adapter::Point_6 P; + return typename internal::Static_filters_predicates::Orientation_6()(P(this->kernel(),c,A),P(this->kernel(),c,B),P(this->kernel(),c,C), + P(this->kernel(),c,D),P(this->kernel(),c,E),P(this->kernel(),c,F), + P(this->kernel(),c,G)); + } +}; + + } // namespace SFA @@ -256,6 +306,18 @@ struct Cartesian_static_filters, R_, Derived_> : public R_ { typedef SFA::Orientation_of_points_5 type; }; }; + +template +struct Cartesian_static_filters, R_, Derived_> : public R_ { + constexpr Cartesian_static_filters(){} + constexpr Cartesian_static_filters(int d):R_(d){} + typedef Cartesian_static_filters, R_, Derived_> Self; + typedef typename Default::Get::type Derived; + template struct Functor : Inherit_functor {}; + template struct Functor { + typedef SFA::Orientation_of_points_6 type; + }; +}; #endif } // namespace CGAL #endif diff --git a/Triangulation/benchmark/Triangulation/CMakeLists.txt b/Triangulation/benchmark/Triangulation/CMakeLists.txt index befd92e97c5..7513af82322 100644 --- a/Triangulation/benchmark/Triangulation/CMakeLists.txt +++ b/Triangulation/benchmark/Triangulation/CMakeLists.txt @@ -11,12 +11,15 @@ include(CGAL_Eigen3_support) if(TARGET CGAL::Eigen3_support) include_directories(BEFORE "include") + create_single_source_cgal_program("generate_d.cpp") create_single_source_cgal_program("bench5d.cpp") + create_single_source_cgal_program("bench6d.cpp") create_single_source_cgal_program("delaunay.cpp") target_link_libraries(delaunay PRIVATE CGAL::Eigen3_support) create_single_source_cgal_program("Td_vs_T2_and_T3.cpp") target_link_libraries(Td_vs_T2_and_T3 PRIVATE CGAL::Eigen3_support) target_link_libraries(bench5d PRIVATE CGAL::Eigen3_support) + target_link_libraries(bench6d PRIVATE CGAL::Eigen3_support) else() message("NOTICE: Executables in this directory require Eigen 3.1 (or greater), and will not be compiled.") endif() diff --git a/Triangulation/benchmark/Triangulation/bench6d.cpp b/Triangulation/benchmark/Triangulation/bench6d.cpp new file mode 100644 index 00000000000..ee5aeae6547 --- /dev/null +++ b/Triangulation/benchmark/Triangulation/bench6d.cpp @@ -0,0 +1,60 @@ + +#include +#include +#include +#include +#include +#include +#include +#include + +typedef CGAL::Epick_d< CGAL::Dimension_tag<6> > K; +typedef CGAL::Triangulation_vertex Vertex; +typedef CGAL::Triangulation_ds_full_cell DS_full_cell; +typedef CGAL::Triangulation_full_cell Full_cell; +typedef CGAL::Triangulation_data_structure, + Vertex, + Full_cell> TDS; +typedef CGAL::Triangulation Triangulation; + + +int main() +{ + const int D = 6; // we work in Euclidean 6-space + + std::vector points; + std::ifstream in("points_6.txt"); + Triangulation::Point p; + int d; + in >> d; + assert(d == D); + int n; + in >> n; + points.reserve(n); + while (in >> p) { + points.push_back(p); + } + + CGAL::Timer timer; + timer.start(); + Triangulation t(D); // create triangulation + assert(t.empty()); + + + t.insert(points.begin(), points.end()); // compute triangulation + + std::cout << "Time taken to insert "<< points.size() << " points: " << timer.time() << " seconds." << std::endl; + timer.reset(); + assert( t.is_valid() ); + // - - - - - - - - - - - - - - - - - - - - - - - - STEP 2 + typedef Triangulation::Face Face; + typedef std::vector Faces; + Faces edges; + std::back_insert_iterator out(edges); + t.tds().incident_faces(t.infinite_vertex(), 1, out); + // collect faces of dimension 1 (edges) incident to the infinite vertex + std::cout << "There are " << edges.size() + << " vertices on the convex hull." << std::endl; + std::cout << "Time taken to find edges: " << timer.time() << " seconds." << std::endl; + return 0; +} \ No newline at end of file diff --git a/Triangulation/benchmark/Triangulation/generate_d.cpp b/Triangulation/benchmark/Triangulation/generate_d.cpp index 32f8da1a300..5ba73aa57a3 100644 --- a/Triangulation/benchmark/Triangulation/generate_d.cpp +++ b/Triangulation/benchmark/Triangulation/generate_d.cpp @@ -5,10 +5,10 @@ int main() { CGAL::Random rng; std::cout.precision(17); - std ::cout << 5 << std::endl; + std ::cout << 6 << std::endl; std::cout << 100000 << std::endl; for(int i = 0; i < 100000; ++i) { - std::array arr; + std::array arr; double slength = 0; for(int i = 0; i < arr.size(); ++i) { arr[i] = rng.get_double(-1, 1); @@ -18,7 +18,7 @@ int main() { for(int i = 0; i < arr.size(); ++i) { arr[i] /= slength; } - std::cout << "5 " << arr[0] << " " << arr[1] << " " << arr[2] << " " << arr[3] << " " << arr[4] << std::endl; + std::cout << "6 " << arr[0] << " " << arr[1] << " " << arr[2] << " " << arr[3] << " " << arr[4]<< " " << arr[5] << std::endl; } return 0; } From a9621595e59797fdd26e4975d14cc6cdd4f744fd Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Thu, 24 Apr 2025 13:42:44 +0100 Subject: [PATCH 21/49] Fixed code for 6D. For 100K points: 133 instead of 239 sec --- .../internal/Static_filters/Orientation_6.h | 9 +++++++-- .../include/CGAL/NewKernel_d/Cartesian_static_filters.h | 6 +++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_6.h b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_6.h index 7ad22e52128..562a4aedc1e 100644 --- a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_6.h +++ b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_6.h @@ -39,7 +39,11 @@ public: { CGAL_BRANCH_PROFILER_3("semi-static failures/attempts/calls to : Orientation_6", tmp); - double p0, p1, p2, p3, p4, q0, q1, q2, q3, q4, r0, r1, r2, r3, r4, s0, s1, s2, s3, s4, t0, t1, t2, t3, t4, u0, u1, u2, u3, u4; + double a01, a02, a03, a04, a05, a06, a11, a12, a13, a14, a15, a16, + a21, a22, a23, a24, a25, a26, a31, a32, a33, a34, a35, + a36, a41, a42, a43, a44, a45, a46, + a51, a52, a53, a54, a55, a56, + a61, a62, a63, a64, a65, a66; if (fit_in_double(p.c0(), a01) && fit_in_double(p.c1(), a02) && fit_in_double(p.c2(), a03) && fit_in_double(p.c3(), a04) && @@ -47,7 +51,7 @@ public: fit_in_double(q.c0(), a11) && fit_in_double(q.c1(), a12) && fit_in_double(q.c2(), a13) && fit_in_double(q.c3(), a14) && - fit_in_double(q.c4(), a15) && fit_in_double(q.c4(), a16) && + fit_in_double(q.c4(), a15) && fit_in_double(q.c5(), a16) && fit_in_double(r.c0(), a21) && fit_in_double(r.c1(), a22) && fit_in_double(r.c2(), a23) && fit_in_double(r.c3(), a24) && @@ -64,6 +68,7 @@ public: fit_in_double(u.c0(), a51) && fit_in_double(u.c1(), a52) && fit_in_double(u.c2(), a53) && fit_in_double(u.c3(), a54) && fit_in_double(u.c4(), a55) && fit_in_double(u.c5(), a56) && + fit_in_double(v.c0(), a61) && fit_in_double(v.c1(), a62) && fit_in_double(v.c2(), a63) && fit_in_double(v.c3(), a64) && fit_in_double(v.c4(), a65) && fit_in_double(v.c5(), a66)) diff --git a/NewKernel_d/include/CGAL/NewKernel_d/Cartesian_static_filters.h b/NewKernel_d/include/CGAL/NewKernel_d/Cartesian_static_filters.h index 66be77c020d..67a2d84070a 100644 --- a/NewKernel_d/include/CGAL/NewKernel_d/Cartesian_static_filters.h +++ b/NewKernel_d/include/CGAL/NewKernel_d/Cartesian_static_filters.h @@ -218,8 +218,8 @@ template struct Adapter_6 { }; struct Orientation_6 { typedef typename Get_type::type result_type; - auto operator()(Point_5 const&A, Point6 const&B, Point6 const&C, - Point6 const&D, Point6 const&E, Point6 const&F, Point6 const&G)const{ + auto operator()(Point_6 const&A, Point_6 const&B, Point_6 const&C, + Point_6 const&D, Point_6 const&E, Point_6 const&F, Point_6 const&G)const{ Point const* t[7]={&A.p,&B.p,&C.p,&D.p,&E.p,&F.p,&G.p}; return Orientation_base(A.r)(make_transforming_iterator(t+0),make_transforming_iterator(t+7)); } @@ -230,7 +230,7 @@ template struct Orientation_of_points_6 : private Store_k typedef typename Get_type::type Point; typedef typename Get_type::type result_type; typedef typename Get_functor::type CC; - typedef Adapter_5 Adapter; + typedef Adapter_6 Adapter; template result_type operator()(Iter f, Iter CGAL_assertion_code(e))const{ CC c(this->kernel()); Point const& A=*f; From 9e588e9b1adf0ec70c0600090202b15098eb1465 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Thu, 24 Apr 2025 13:57:51 +0100 Subject: [PATCH 22/49] fabs > CGAL::abs --- .../internal/Static_filters/Orientation_6.h | 212 +++++++++--------- 1 file changed, 106 insertions(+), 106 deletions(-) diff --git a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_6.h b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_6.h index 562a4aedc1e..b647e238802 100644 --- a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_6.h +++ b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_6.h @@ -316,211 +316,211 @@ public: m0123456 = (((((((m012345 * a66) - (m012346 * a56)) + (m012356 * a46)) - (m012456 * a36)) + (m013456 * a26)) - (m023456 * a16)) + (m123456 * a06)); int int_tmp_result; double eps; - double max1 = fabs(a02); - if( (max1 < fabs(a12)) ) + double max1 = CGAL::abs(a02); + if( (max1 < CGAL::abs(a12)) ) { - max1 = fabs(a12); + max1 = CGAL::abs(a12); } - if( (max1 < fabs(a22)) ) + if( (max1 < CGAL::abs(a22)) ) { - max1 = fabs(a22); + max1 = CGAL::abs(a22); } - if( (max1 < fabs(a32)) ) + if( (max1 < CGAL::abs(a32)) ) { - max1 = fabs(a32); + max1 = CGAL::abs(a32); } - if( (max1 < fabs(a42)) ) + if( (max1 < CGAL::abs(a42)) ) { - max1 = fabs(a42); + max1 = CGAL::abs(a42); } - if( (max1 < fabs(a52)) ) + if( (max1 < CGAL::abs(a52)) ) { - max1 = fabs(a52); + max1 = CGAL::abs(a52); } - if( (max1 < fabs(a62)) ) + if( (max1 < CGAL::abs(a62)) ) { - max1 = fabs(a62); + max1 = CGAL::abs(a62); } - double max2 = fabs(a03); - if( (max2 < fabs(a13)) ) + double max2 = CGAL::abs(a03); + if( (max2 < CGAL::abs(a13)) ) { - max2 = fabs(a13); + max2 = CGAL::abs(a13); } - if( (max2 < fabs(a23)) ) + if( (max2 < CGAL::abs(a23)) ) { - max2 = fabs(a23); + max2 = CGAL::abs(a23); } - if( (max2 < fabs(a33)) ) + if( (max2 < CGAL::abs(a33)) ) { - max2 = fabs(a33); + max2 = CGAL::abs(a33); } - if( (max2 < fabs(a43)) ) + if( (max2 < CGAL::abs(a43)) ) { - max2 = fabs(a43); + max2 = CGAL::abs(a43); } - if( (max2 < fabs(a53)) ) + if( (max2 < CGAL::abs(a53)) ) { - max2 = fabs(a53); + max2 = CGAL::abs(a53); } - if( (max2 < fabs(a63)) ) + if( (max2 < CGAL::abs(a63)) ) { - max2 = fabs(a63); + max2 = CGAL::abs(a63); } - double max3 = fabs(a04); - if( (max3 < fabs(a14)) ) + double max3 = CGAL::abs(a04); + if( (max3 < CGAL::abs(a14)) ) { - max3 = fabs(a14); + max3 = CGAL::abs(a14); } - if( (max3 < fabs(a24)) ) + if( (max3 < CGAL::abs(a24)) ) { - max3 = fabs(a24); + max3 = CGAL::abs(a24); } - if( (max3 < fabs(a34)) ) + if( (max3 < CGAL::abs(a34)) ) { - max3 = fabs(a34); + max3 = CGAL::abs(a34); } - if( (max3 < fabs(a44)) ) + if( (max3 < CGAL::abs(a44)) ) { - max3 = fabs(a44); + max3 = CGAL::abs(a44); } - if( (max3 < fabs(a54)) ) + if( (max3 < CGAL::abs(a54)) ) { - max3 = fabs(a54); + max3 = CGAL::abs(a54); } - if( (max3 < fabs(a64)) ) + if( (max3 < CGAL::abs(a64)) ) { - max3 = fabs(a64); + max3 = CGAL::abs(a64); } - double max4 = fabs(a05); - if( (max4 < fabs(a15)) ) + double max4 = CGAL::abs(a05); + if( (max4 < CGAL::abs(a15)) ) { - max4 = fabs(a15); + max4 = CGAL::abs(a15); } - if( (max4 < fabs(a25)) ) + if( (max4 < CGAL::abs(a25)) ) { - max4 = fabs(a25); + max4 = CGAL::abs(a25); } - if( (max4 < fabs(a35)) ) + if( (max4 < CGAL::abs(a35)) ) { - max4 = fabs(a35); + max4 = CGAL::abs(a35); } - if( (max4 < fabs(a45)) ) + if( (max4 < CGAL::abs(a45)) ) { - max4 = fabs(a45); + max4 = CGAL::abs(a45); } - if( (max4 < fabs(a55)) ) + if( (max4 < CGAL::abs(a55)) ) { - max4 = fabs(a55); + max4 = CGAL::abs(a55); } - if( (max4 < fabs(a65)) ) + if( (max4 < CGAL::abs(a65)) ) { - max4 = fabs(a65); + max4 = CGAL::abs(a65); } - double max5 = fabs(a06); - if( (max5 < fabs(a16)) ) + double max5 = CGAL::abs(a06); + if( (max5 < CGAL::abs(a16)) ) { - max5 = fabs(a16); + max5 = CGAL::abs(a16); } - if( (max5 < fabs(a26)) ) + if( (max5 < CGAL::abs(a26)) ) { - max5 = fabs(a26); + max5 = CGAL::abs(a26); } - if( (max5 < fabs(a36)) ) + if( (max5 < CGAL::abs(a36)) ) { - max5 = fabs(a36); + max5 = CGAL::abs(a36); } - if( (max5 < fabs(a46)) ) + if( (max5 < CGAL::abs(a46)) ) { - max5 = fabs(a46); + max5 = CGAL::abs(a46); } - if( (max5 < fabs(a56)) ) + if( (max5 < CGAL::abs(a56)) ) { - max5 = fabs(a56); + max5 = CGAL::abs(a56); } - if( (max5 < fabs(a66)) ) + if( (max5 < CGAL::abs(a66)) ) { - max5 = fabs(a66); + max5 = CGAL::abs(a66); } - double max6 = fabs(m01); - if( (max6 < fabs(m02)) ) + double max6 = CGAL::abs(m01); + if( (max6 < CGAL::abs(m02)) ) { - max6 = fabs(m02); + max6 = CGAL::abs(m02); } - if( (max6 < fabs(m03)) ) + if( (max6 < CGAL::abs(m03)) ) { - max6 = fabs(m03); + max6 = CGAL::abs(m03); } - if( (max6 < fabs(m04)) ) + if( (max6 < CGAL::abs(m04)) ) { - max6 = fabs(m04); + max6 = CGAL::abs(m04); } - if( (max6 < fabs(m05)) ) + if( (max6 < CGAL::abs(m05)) ) { - max6 = fabs(m05); + max6 = CGAL::abs(m05); } - if( (max6 < fabs(m06)) ) + if( (max6 < CGAL::abs(m06)) ) { - max6 = fabs(m06); + max6 = CGAL::abs(m06); } - if( (max6 < fabs(m12)) ) + if( (max6 < CGAL::abs(m12)) ) { - max6 = fabs(m12); + max6 = CGAL::abs(m12); } - if( (max6 < fabs(m13)) ) + if( (max6 < CGAL::abs(m13)) ) { - max6 = fabs(m13); + max6 = CGAL::abs(m13); } - if( (max6 < fabs(m14)) ) + if( (max6 < CGAL::abs(m14)) ) { - max6 = fabs(m14); + max6 = CGAL::abs(m14); } - if( (max6 < fabs(m15)) ) + if( (max6 < CGAL::abs(m15)) ) { - max6 = fabs(m15); + max6 = CGAL::abs(m15); } - if( (max6 < fabs(m16)) ) + if( (max6 < CGAL::abs(m16)) ) { - max6 = fabs(m16); + max6 = CGAL::abs(m16); } - if( (max6 < fabs(m23)) ) + if( (max6 < CGAL::abs(m23)) ) { - max6 = fabs(m23); + max6 = CGAL::abs(m23); } - if( (max6 < fabs(m24)) ) + if( (max6 < CGAL::abs(m24)) ) { - max6 = fabs(m24); + max6 = CGAL::abs(m24); } - if( (max6 < fabs(m25)) ) + if( (max6 < CGAL::abs(m25)) ) { - max6 = fabs(m25); + max6 = CGAL::abs(m25); } - if( (max6 < fabs(m26)) ) + if( (max6 < CGAL::abs(m26)) ) { - max6 = fabs(m26); + max6 = CGAL::abs(m26); } - if( (max6 < fabs(m34)) ) + if( (max6 < CGAL::abs(m34)) ) { - max6 = fabs(m34); + max6 = CGAL::abs(m34); } - if( (max6 < fabs(m35)) ) + if( (max6 < CGAL::abs(m35)) ) { - max6 = fabs(m35); + max6 = CGAL::abs(m35); } - if( (max6 < fabs(m36)) ) + if( (max6 < CGAL::abs(m36)) ) { - max6 = fabs(m36); + max6 = CGAL::abs(m36); } - if( (max6 < fabs(m45)) ) + if( (max6 < CGAL::abs(m45)) ) { - max6 = fabs(m45); + max6 = CGAL::abs(m45); } - if( (max6 < fabs(m46)) ) + if( (max6 < CGAL::abs(m46)) ) { - max6 = fabs(m46); + max6 = CGAL::abs(m46); } - if( (max6 < fabs(m56)) ) + if( (max6 < CGAL::abs(m56)) ) { - max6 = fabs(m56); + max6 = CGAL::abs(m56); } double lower_bound_1; double upper_bound_1; From f75ddf8eda6e55d57a978be8c8f8572d7a18f343 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Thu, 24 Apr 2025 21:48:35 +0100 Subject: [PATCH 23/49] less abs() calls --- .../internal/Static_filters/Orientation_6.h | 252 +++++++++++------- 1 file changed, 152 insertions(+), 100 deletions(-) diff --git a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_6.h b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_6.h index b647e238802..935b164645d 100644 --- a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_6.h +++ b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_6.h @@ -317,211 +317,263 @@ public: int int_tmp_result; double eps; double max1 = CGAL::abs(a02); - if( (max1 < CGAL::abs(a12)) ) + double tmp = CGAL::abs(a12); + if( max1 < tmp ) { - max1 = CGAL::abs(a12); + max1 = tmp; } - if( (max1 < CGAL::abs(a22)) ) + tmp = CGAL::abs(a22); + if( max1 < tmp ) { - max1 = CGAL::abs(a22); + max1 = tmp; } - if( (max1 < CGAL::abs(a32)) ) + tmp = CGAL::abs(a32); + if( max1 < tmp) { - max1 = CGAL::abs(a32); + max1 = tmp; } - if( (max1 < CGAL::abs(a42)) ) + tmp = CGAL::abs(a42); + if( max1 < tmp) { - max1 = CGAL::abs(a42); + max1 = tmp; } - if( (max1 < CGAL::abs(a52)) ) + tmp = CGAL::abs(a52); + if(max1 < tmp ) { - max1 = CGAL::abs(a52); + max1 = tmp; } - if( (max1 < CGAL::abs(a62)) ) + tmp = CGAL::abs(a62); + if( (max1 < tmp) ) { - max1 = CGAL::abs(a62); + max1 = tmp; } double max2 = CGAL::abs(a03); - if( (max2 < CGAL::abs(a13)) ) + tmp = CGAL::abs(a13); + if( (max2 < tmp) ) { - max2 = CGAL::abs(a13); + max2 = tmp; } - if( (max2 < CGAL::abs(a23)) ) + tmp = CGAL::abs(a23); + if( (max2 < tmp) ) { - max2 = CGAL::abs(a23); + max2 = tmp; } - if( (max2 < CGAL::abs(a33)) ) + tmp = CGAL::abs(a33); + if( (max2 < tmp) ) { - max2 = CGAL::abs(a33); + max2 = tmp; } - if( (max2 < CGAL::abs(a43)) ) + tmp = CGAL::abs(a43); + if( (max2 < tmp) ) { - max2 = CGAL::abs(a43); + max2 = tmp; } - if( (max2 < CGAL::abs(a53)) ) + tmp = CGAL::abs(a53); + if( (max2 < tmp) ) { - max2 = CGAL::abs(a53); + max2 = tmp; } - if( (max2 < CGAL::abs(a63)) ) + tmp = CGAL::abs(a63); + if( (max2 < tmp) ) { - max2 = CGAL::abs(a63); + max2 = tmp; } double max3 = CGAL::abs(a04); - if( (max3 < CGAL::abs(a14)) ) + tmp = CGAL::abs(a14); + if( (max3 < tmp) ) { - max3 = CGAL::abs(a14); + max3 = tmp; } - if( (max3 < CGAL::abs(a24)) ) + tmp = CGAL::abs(a24); + if( (max3 < tmp) ) { - max3 = CGAL::abs(a24); + max3 = tmp; } - if( (max3 < CGAL::abs(a34)) ) + tmp = CGAL::abs(a34); + if( (max3 < tmp) ) { - max3 = CGAL::abs(a34); + max3 = tmp; } - if( (max3 < CGAL::abs(a44)) ) + tmp = CGAL::abs(a44); + if( (max3 < tmp) ) { - max3 = CGAL::abs(a44); + max3 = tmp; } - if( (max3 < CGAL::abs(a54)) ) + tmp = CGAL::abs(a54); + if( (max3 < tmp) ) { - max3 = CGAL::abs(a54); + max3 = tmp; } - if( (max3 < CGAL::abs(a64)) ) + tmp = CGAL::abs(a64); + if( (max3 < tmp) ) { - max3 = CGAL::abs(a64); + max3 = tmp; } double max4 = CGAL::abs(a05); - if( (max4 < CGAL::abs(a15)) ) + tmp = CGAL::abs(a15); + if( (max4 < tmp) ) { - max4 = CGAL::abs(a15); + max4 = tmp; } - if( (max4 < CGAL::abs(a25)) ) + tmp = CGAL::abs(a25); + if( (max4 < tmp) ) { - max4 = CGAL::abs(a25); + max4 = tmp; } - if( (max4 < CGAL::abs(a35)) ) + tmp = CGAL::abs(a35); + if( (max4 < tmp) ) { - max4 = CGAL::abs(a35); + max4 = tmp; } - if( (max4 < CGAL::abs(a45)) ) + tmp = CGAL::abs(a45); + if( (max4 < tmp) ) { - max4 = CGAL::abs(a45); + max4 = tmp; } - if( (max4 < CGAL::abs(a55)) ) + tmp = CGAL::abs(a55); + if( (max4 < tmp) ) { - max4 = CGAL::abs(a55); + max4 = tmp; } - if( (max4 < CGAL::abs(a65)) ) + tmp = CGAL::abs(a65); + if( (max4 < tmp) ) { - max4 = CGAL::abs(a65); + max4 = tmp; } double max5 = CGAL::abs(a06); - if( (max5 < CGAL::abs(a16)) ) + tmp = CGAL::abs(a16); + if( (max5 < tmp) ) { - max5 = CGAL::abs(a16); + max5 = tmp; } - if( (max5 < CGAL::abs(a26)) ) + tmp = CGAL::abs(a26); + if( (max5 < tmp) ) { - max5 = CGAL::abs(a26); + max5 = tmp; } - if( (max5 < CGAL::abs(a36)) ) + tmp = CGAL::abs(a36); + if( (max5 < tmp) ) { - max5 = CGAL::abs(a36); + max5 = tmp; } - if( (max5 < CGAL::abs(a46)) ) + tmp = CGAL::abs(a46); + if( (max5 < tmp) ) { - max5 = CGAL::abs(a46); + max5 = tmp; } - if( (max5 < CGAL::abs(a56)) ) + tmp = CGAL::abs(a56); + if( (max5 < tmp) ) { - max5 = CGAL::abs(a56); + max5 = tmp; } - if( (max5 < CGAL::abs(a66)) ) + tmp = CGAL::abs(a66); + if( (max5 < tmp) ) { - max5 = CGAL::abs(a66); + max5 = tmp; } + double max6 = CGAL::abs(m01); - if( (max6 < CGAL::abs(m02)) ) + tmp = CGAL::abs(m02); + if( (max6 < tmp) ) { - max6 = CGAL::abs(m02); + max6 = tmp; } - if( (max6 < CGAL::abs(m03)) ) + tmp = CGAL::abs(m03); + if( (max6 < tmp) ) { - max6 = CGAL::abs(m03); + max6 = tmp; } - if( (max6 < CGAL::abs(m04)) ) + tmp = CGAL::abs(m04); + if( (max6 < tmp) ) { - max6 = CGAL::abs(m04); + max6 = tmp; } - if( (max6 < CGAL::abs(m05)) ) + tmp = CGAL::abs(m05); + if( (max6 < tmp) ) { - max6 = CGAL::abs(m05); + max6 = tmp; } - if( (max6 < CGAL::abs(m06)) ) + tmp = CGAL::abs(m06); + if( (max6 < tmp) ) { - max6 = CGAL::abs(m06); + max6 = tmp; } - if( (max6 < CGAL::abs(m12)) ) + tmp = CGAL::abs(m12); + if( (max6 < tmp) ) { - max6 = CGAL::abs(m12); + max6 = tmp; } - if( (max6 < CGAL::abs(m13)) ) + tmp = CGAL::abs(m13); + if( (max6 < tmp) ) { - max6 = CGAL::abs(m13); + max6 = tmp; } - if( (max6 < CGAL::abs(m14)) ) + tmp = CGAL::abs(m14); + if( (max6 < tmp) ) { - max6 = CGAL::abs(m14); + max6 = tmp; } - if( (max6 < CGAL::abs(m15)) ) + tmp = CGAL::abs(m15); + if( (max6 < tmp) ) { - max6 = CGAL::abs(m15); + max6 = tmp; } - if( (max6 < CGAL::abs(m16)) ) + tmp = CGAL::abs(m16); + if( (max6 < tmp) ) { - max6 = CGAL::abs(m16); + max6 = tmp; } - if( (max6 < CGAL::abs(m23)) ) + tmp = CGAL::abs(m23); + if( (max6 < tmp) ) { - max6 = CGAL::abs(m23); + max6 = tmp; } - if( (max6 < CGAL::abs(m24)) ) + tmp = CGAL::abs(m24); + if( (max6 < tmp) ) { - max6 = CGAL::abs(m24); + max6 = tmp; } - if( (max6 < CGAL::abs(m25)) ) + tmp = CGAL::abs(m25); + if( (max6 < tmp) ) { - max6 = CGAL::abs(m25); + max6 = tmp; } - if( (max6 < CGAL::abs(m26)) ) + tmp = CGAL::abs(m26); + if( (max6 < tmp) ) { - max6 = CGAL::abs(m26); + max6 = tmp; } - if( (max6 < CGAL::abs(m34)) ) + tmp = CGAL::abs(m34); + if( (max6 < tmp) ) { - max6 = CGAL::abs(m34); + max6 = tmp; } - if( (max6 < CGAL::abs(m35)) ) + tmp = CGAL::abs(m35); + if( (max6 < tmp) ) { - max6 = CGAL::abs(m35); + max6 = tmp; } - if( (max6 < CGAL::abs(m36)) ) + tmp = CGAL::abs(m36); + if( (max6 < tmp) ) { - max6 = CGAL::abs(m36); + max6 = tmp; } - if( (max6 < CGAL::abs(m45)) ) + tmp = CGAL::abs(m45); + if( (max6 < tmp) ) { - max6 = CGAL::abs(m45); + max6 = tmp; } - if( (max6 < CGAL::abs(m46)) ) + tmp = CGAL::abs(m46); + if( (max6 < tmp) ) { - max6 = CGAL::abs(m46); + max6 = tmp; } - if( (max6 < CGAL::abs(m56)) ) + tmp = CGAL::abs(m56); + if( (max6 < tmp) ) { - max6 = CGAL::abs(m56); + max6 = tmp; } + double lower_bound_1; double upper_bound_1; lower_bound_1 = max6; From a2cfa40a263a4ee4e88ae67220605a6ebddcd2c0 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Fri, 25 Apr 2025 15:19:38 +0100 Subject: [PATCH 24/49] Add CGAL:: in a concept --- .../doc/Triangulation/Concepts/TriangulationDataStructure.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Triangulation/doc/Triangulation/Concepts/TriangulationDataStructure.h b/Triangulation/doc/Triangulation/Concepts/TriangulationDataStructure.h index e12ab593ff7..e9d3d22a209 100644 --- a/Triangulation/doc/Triangulation/Concepts/TriangulationDataStructure.h +++ b/Triangulation/doc/Triangulation/Concepts/TriangulationDataStructure.h @@ -26,8 +26,8 @@ which is also the unique vertex and the unique full cell in the `TriangulationDataStructure`. In a geometric realization of the `TriangulationDataStructure` (e.g., in a -`Triangulation` or a -`Delaunay_triangulation`), this vertex +`CGAL::Triangulation` or a +`CGAL::Delaunay_triangulation`), this vertex corresponds to the vertex at infinity.
0
This corresponds to two vertices, each incident to one \f$ 0\f$-face; From 400c1da75147102ad4a90069ee9b90d1c1ed5c4f Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Fri, 25 Apr 2025 17:26:18 +0100 Subject: [PATCH 25/49] In bench6.cpp add indices to the vertices, and report the edges on the convex hull --- .../benchmark/Triangulation/bench6d.cpp | 48 ++++++++++++++----- Triangulation/include/CGAL/Triangulation.h | 32 +++++++++++++ .../CGAL/Triangulation_data_structure.h | 2 + 3 files changed, 69 insertions(+), 13 deletions(-) diff --git a/Triangulation/benchmark/Triangulation/bench6d.cpp b/Triangulation/benchmark/Triangulation/bench6d.cpp index ee5aeae6547..a14dba4bed4 100644 --- a/Triangulation/benchmark/Triangulation/bench6d.cpp +++ b/Triangulation/benchmark/Triangulation/bench6d.cpp @@ -9,7 +9,7 @@ #include typedef CGAL::Epick_d< CGAL::Dimension_tag<6> > K; -typedef CGAL::Triangulation_vertex Vertex; +typedef CGAL::Triangulation_vertex Vertex; typedef CGAL::Triangulation_ds_full_cell DS_full_cell; typedef CGAL::Triangulation_full_cell Full_cell; typedef CGAL::Triangulation_data_structure, @@ -18,12 +18,12 @@ typedef CGAL::Triangulation_data_structure, typedef CGAL::Triangulation Triangulation; -int main() +int main(int argc, char* argv[]) { const int D = 6; // we work in Euclidean 6-space std::vector points; - std::ifstream in("points_6.txt"); + std::ifstream in(argv[1]); Triangulation::Point p; int d; in >> d; @@ -41,20 +41,42 @@ int main() assert(t.empty()); - t.insert(points.begin(), points.end()); // compute triangulation + t.insert_and_index(points.begin(), points.end()); // compute triangulation std::cout << "Time taken to insert "<< points.size() << " points: " << timer.time() << " seconds." << std::endl; timer.reset(); assert( t.is_valid() ); - // - - - - - - - - - - - - - - - - - - - - - - - - STEP 2 - typedef Triangulation::Face Face; - typedef std::vector Faces; - Faces edges; - std::back_insert_iterator out(edges); - t.tds().incident_faces(t.infinite_vertex(), 1, out); - // collect faces of dimension 1 (edges) incident to the infinite vertex - std::cout << "There are " << edges.size() - << " vertices on the convex hull." << std::endl; + + std::vector infinite_cells; + t.tds().incident_full_cells(t.infinite_vertex(), std::back_inserter(infinite_cells)); + + std::set> edges; + + for(auto ch : infinite_cells) { + std::vector vertices; + std::cout << "cell" << std::endl; + vertices.reserve(D); + for(int i = 0; i < D + 1; ++i) { + if(ch->vertex(i) != t.infinite_vertex()) { + vertices.push_back(ch->vertex(i)); + std::cout << ch->vertex(i)->data() << " "; + } + } + std::cout << std::endl; + for (int i = 0; i < D-1; i++) { + for (int j = 0; j < D-1; j++) { + + if((i != j) && (vertices[i]->data() < vertices[j]->data())) { + edges.insert(std::make_pair(vertices[i]->data(), vertices[j]->data())); + } + } + } + } + for(auto pair : edges) { + std::cout << "edge between vertices " << pair.first << " and " << pair.second << std::endl; + } + std::cout << "Time taken to find edges: " << timer.time() << " seconds." << std::endl; + return 0; } \ No newline at end of file diff --git a/Triangulation/include/CGAL/Triangulation.h b/Triangulation/include/CGAL/Triangulation.h index 10d71f3b549..8271cdb27c5 100644 --- a/Triangulation/include/CGAL/Triangulation.h +++ b/Triangulation/include/CGAL/Triangulation.h @@ -22,6 +22,8 @@ #include #include #include +#include +#include // for CGAL::Identity_property_map #include #include #include @@ -683,6 +685,36 @@ public: } return number_of_vertices() - n; } + + + template< typename RandomAccessIterator > + size_type insert_and_index(RandomAccessIterator start, RandomAccessIterator end) + { + size_type n = number_of_vertices(); + std::vector indices(boost::counting_iterator(0), + boost::counting_iterator(end - start)); + + using Point_property_map = boost::iterator_property_map>; + using Search_traits_d = CGAL::Spatial_sort_traits_adapter_d; + + CGAL::spatial_sort(indices.begin(), indices.end(), Search_traits_d(start)); + std::vector points(start, end); + spatial_sort(points.begin(), points.end(), geom_traits()); + Full_cell_handle hint = Full_cell_handle(); + + for (auto index : indices) { + typename Triangulation::Vertex_handle pos = insert(*(start+index), hint); + if (pos != nullptr) { + // Save index value as data to retrieve it after insertion + pos->data() = n+index; + hint = pos->full_cell(); + } + } + return number_of_vertices() - n; + } + + Vertex_handle insert(const Point &, Locate_type, const Face &, const Facet &, Full_cell_handle); Vertex_handle insert(const Point &, Full_cell_handle start = Full_cell_handle()); Vertex_handle insert(const Point &, Vertex_handle); diff --git a/Triangulation/include/CGAL/Triangulation_data_structure.h b/Triangulation/include/CGAL/Triangulation_data_structure.h index dfd59e7b978..37fbd8914e9 100644 --- a/Triangulation/include/CGAL/Triangulation_data_structure.h +++ b/Triangulation/include/CGAL/Triangulation_data_structure.h @@ -33,6 +33,8 @@ #include #include +#include + namespace CGAL { template< class Dimen, From 338b31bf32c8197bf4899feeb24dd9aa40f0d992 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Mon, 28 Apr 2025 12:07:16 +0100 Subject: [PATCH 26/49] Add dependency --- Triangulation/package_info/Triangulation/dependencies | 1 + 1 file changed, 1 insertion(+) diff --git a/Triangulation/package_info/Triangulation/dependencies b/Triangulation/package_info/Triangulation/dependencies index c7893bd09b0..b13119b12fe 100644 --- a/Triangulation/package_info/Triangulation/dependencies +++ b/Triangulation/package_info/Triangulation/dependencies @@ -6,6 +6,7 @@ Kernel_23 Modular_arithmetic Number_types Profiling_tools +Property_map Random_numbers STL_Extension Spatial_sorting From 9a134d21457b1d6a07338a30e42fe70af15fefc4 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Mon, 28 Apr 2025 15:39:43 +0100 Subject: [PATCH 27/49] Adress some items of Issue #8802 --- Triangulation/benchmark/Triangulation/bench6d.cpp | 1 + Triangulation/doc/Triangulation/CGAL/Triangulation.h | 2 +- .../doc/Triangulation/Concepts/TriangulationDataStructure.h | 6 +++--- Triangulation/include/CGAL/Triangulation_data_structure.h | 4 ++-- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/Triangulation/benchmark/Triangulation/bench6d.cpp b/Triangulation/benchmark/Triangulation/bench6d.cpp index a14dba4bed4..90fc41c680a 100644 --- a/Triangulation/benchmark/Triangulation/bench6d.cpp +++ b/Triangulation/benchmark/Triangulation/bench6d.cpp @@ -50,6 +50,7 @@ int main(int argc, char* argv[]) std::vector infinite_cells; t.tds().incident_full_cells(t.infinite_vertex(), std::back_inserter(infinite_cells)); + return 0; std::set> edges; for(auto ch : infinite_cells) { diff --git a/Triangulation/doc/Triangulation/CGAL/Triangulation.h b/Triangulation/doc/Triangulation/CGAL/Triangulation.h index 32188c44323..49ffb246f1c 100644 --- a/Triangulation/doc/Triangulation/CGAL/Triangulation.h +++ b/Triangulation/doc/Triangulation/CGAL/Triangulation.h @@ -520,7 +520,7 @@ position `p`. Returns a handle to that vertex. \pre The boundary of the union of full cells incident to `f` must be a triangulation of a sphere of dimension `tr`.`current_dimension()`). */ -Vertex_handle collapse_face(const Point & p, const Face & f); +Vertex_handle contract_face(const Point & p, const Face & f); /// @} diff --git a/Triangulation/doc/Triangulation/Concepts/TriangulationDataStructure.h b/Triangulation/doc/Triangulation/Concepts/TriangulationDataStructure.h index e9d3d22a209..370bbad3e8e 100644 --- a/Triangulation/doc/Triangulation/Concepts/TriangulationDataStructure.h +++ b/Triangulation/doc/Triangulation/Concepts/TriangulationDataStructure.h @@ -456,14 +456,14 @@ Insertion in a hole, \f$ d=2\f$ \cgalAdvancedEnd */ template< class ForwardIterator > Vertex_handle -insert_in_hole(ForwardIterator start, ForwardIterator end, Facet f); +insert_in_hole(ForwardIterator s, ForwardIterator e, Facet f); /*! Same as above, but handles to the new full cells are appended to the `out` output iterator. */ template< class ForwardIterator, class OutputIterator > -Vertex_handle insert_in_hole(ForwardIterator start, ForwardIterator end, Facet +Vertex_handle insert_in_hole(ForwardIterator s, ForwardIterator e, Facet f, OutputIterator out); /*! @@ -594,7 +594,7 @@ Calls `delete_full_cell` over an iterator range of value type `Full_cell_handle` \cgalAdvancedEnd */ template< typename ForwardIterator > void -delete_full_cells(ForwardIterator start, ForwardIterator end); +delete_full_cells(ForwardIterator s, ForwardIterator e); /// @} diff --git a/Triangulation/include/CGAL/Triangulation_data_structure.h b/Triangulation/include/CGAL/Triangulation_data_structure.h index 37fbd8914e9..10e71e9178e 100644 --- a/Triangulation/include/CGAL/Triangulation_data_structure.h +++ b/Triangulation/include/CGAL/Triangulation_data_structure.h @@ -309,10 +309,10 @@ public: return s->mirror_index(i); } - int mirror_vertex(Full_cell_handle s, int i) const /* Concept */ + Vertex_handle mirror_vertex(Full_cell_handle s, int i) const /* Concept */ { CGAL_precondition(Full_cell_handle() != s && check_range(i)); - return s->mirror_vertex(i); + return s->mirror_vertex(i, current_dimension); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FACETS OPERATIONS From 6b729748e1794ef27ae16545f3d4e5285ff4fccd Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Mon, 28 Apr 2025 16:09:13 +0100 Subject: [PATCH 28/49] Adress some items of Issue #8802 --- Triangulation/include/CGAL/Triangulation_data_structure.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Triangulation/include/CGAL/Triangulation_data_structure.h b/Triangulation/include/CGAL/Triangulation_data_structure.h index 10e71e9178e..1e35253f466 100644 --- a/Triangulation/include/CGAL/Triangulation_data_structure.h +++ b/Triangulation/include/CGAL/Triangulation_data_structure.h @@ -368,7 +368,7 @@ protected: public: // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - REMOVALS - Vertex_handle collapse_face(const Face &); /* Concept */ + Vertex_handle contract_face(const Face &); /* Concept */ void remove_decrease_dimension(Vertex_handle, Vertex_handle); /* Concept */ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - INSERTIONS @@ -784,7 +784,7 @@ Triangulation_data_structure template typename Triangulation_data_structure::Vertex_handle Triangulation_data_structure -::collapse_face(const Face & f) /* Concept */ +::contract_face(const Face & f) /* Concept */ { const int fd = f.face_dimension(); CGAL_precondition( (1 <= fd ) && (fd < current_dimension())); From 51d035d9d9d560fb63a1c012b1ba2325e9d6eefc Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Mon, 28 Apr 2025 16:23:27 +0100 Subject: [PATCH 29/49] 'Fix' in an untested function --- Triangulation/include/CGAL/Triangulation_data_structure.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Triangulation/include/CGAL/Triangulation_data_structure.h b/Triangulation/include/CGAL/Triangulation_data_structure.h index 1e35253f466..8b45ccaa6e9 100644 --- a/Triangulation/include/CGAL/Triangulation_data_structure.h +++ b/Triangulation/include/CGAL/Triangulation_data_structure.h @@ -790,7 +790,7 @@ Triangulation_data_structure CGAL_precondition( (1 <= fd ) && (fd < current_dimension())); std::vector simps; // save the Face's vertices: - Full_cell s; + Full_cell s(current_dimension); for( int i = 0; i <= fd; ++i ) s.set_vertex(i, f.vertex(i)); // compute the star of f From 5bfaaac6509e9e1b6165d01906fc255fec06cfc9 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Tue, 1 Jul 2025 11:41:06 +0100 Subject: [PATCH 30/49] Addd source for filter generator --- .../include/CGAL/NewKernel_d/orientationC4.h | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 NewKernel_d/include/CGAL/NewKernel_d/orientationC4.h diff --git a/NewKernel_d/include/CGAL/NewKernel_d/orientationC4.h b/NewKernel_d/include/CGAL/NewKernel_d/orientationC4.h new file mode 100644 index 00000000000..0a12b57b258 --- /dev/null +++ b/NewKernel_d/include/CGAL/NewKernel_d/orientationC4.h @@ -0,0 +1,62 @@ + + + +inline int orientationC4(double p0, double p1, double p2, double p3, + double q0, double q1, double q2, double q3, + double r0, double r1, double r2, double r3, + double s0, double s1, double s2, double s3, + double t0, double t1, double t2, double t3) +{ + + double m01; + m01 = (q0 - p0); + double m02; + m02 = (r0 - p0); + double m03; + m03 = (s0 - p0); + double m04; + m04 = (t0 - p0); + + double m11; + m01 = (q1 - p1); + double m12; + m02 = (r1 - p1); + double m13; + m03 = (s1 - p1); + double m14; + m04 = (t1 - p1); + + double m21; + m01 = (q2 - p2); + double m22; + m02 = (r2 - p2); + double m23; + m03 = (s2 - p2); + double m24; + m04 = (t2 - p2); + + double m31; + m01 = (q3 - p3); + double m32; + m02 = (r3 - p3); + double m33; + m03 = (s3 - p3); + double m34; + m04 = (t3 - p3); + + double det = determinant(m01, m02, m03, m04, + m11, m12, m13, m14, + m21, m22, m23, m24, + m31, m32, m33, m34); + if (det > 0) { + return 1; // positive orientation + } else if (det < 0) { + return -1; // negative orientation + } else { + return 0; // zero orientation + } + +} + + + From 8daad7fc093457ebf9f0a7f129f4178187a87ae9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 1 Jul 2025 15:47:57 +0200 Subject: [PATCH 31/49] fix predicate and add filtered version --- .../include/CGAL/NewKernel_d/orientationC4.h | 258 ++++++++- .../include/CGAL/NewKernel_d/orientationC5.h | 523 ++++++++---------- 2 files changed, 452 insertions(+), 329 deletions(-) diff --git a/NewKernel_d/include/CGAL/NewKernel_d/orientationC4.h b/NewKernel_d/include/CGAL/NewKernel_d/orientationC4.h index 0a12b57b258..1c6cce210e0 100644 --- a/NewKernel_d/include/CGAL/NewKernel_d/orientationC4.h +++ b/NewKernel_d/include/CGAL/NewKernel_d/orientationC4.h @@ -1,11 +1,34 @@ +double determinant( + double a00, double a01, double a02, double a03, + double a10, double a11, double a12, double a13, + double a20, double a21, double a22, double a23, + double a30, double a31, double a32, double a33) +{ + double m01 = a10*a01 - a00*a11; + double m02 = a20*a01 - a00*a21; + double m03 = a30*a01 - a00*a31; + double m12 = a20*a11 - a10*a21; + double m13 = a30*a11 - a10*a31; + double m23 = a30*a21 - a20*a31; + double m012 = m12*a02 - m02*a12 + m01*a22; + double m013 = m13*a02 - m03*a12 + m01*a32; + double m023 = m23*a02 - m03*a22 + m02*a32; + double m123 = m23*a12 - m13*a22 + m12*a32; + double m0123 = m123*a03 - m023*a13 + m013*a23 - m012*a33; + return m0123; +} -inline int orientationC4(double p0, double p1, double p2, double p3, - double q0, double q1, double q2, double q3, - double r0, double r1, double r2, double r3, - double s0, double s1, double s2, double s3, - double t0, double t1, double t2, double t3) +int orientationC4(double p0, double p1, double p2, double p3, + double q0, double q1, double q2, double q3, + double r0, double r1, double r2, double r3, + double s0, double s1, double s2, double s3, + double t0, double t1, double t2, double t3) +group p0 q0 r0 t0 q0; +group p1 q1 r1 t1 q1; +group p2 q2 r2 t2 q2; +group p3 q3 r3 t3 q3; { double m01; @@ -18,45 +41,232 @@ inline int orientationC4(double p0, double p1, double p2, double p3, m04 = (t0 - p0); double m11; - m01 = (q1 - p1); + m11 = (q1 - p1); double m12; - m02 = (r1 - p1); + m12 = (r1 - p1); double m13; - m03 = (s1 - p1); + m13 = (s1 - p1); double m14; - m04 = (t1 - p1); + m14 = (t1 - p1); double m21; - m01 = (q2 - p2); + m21 = (q2 - p2); double m22; - m02 = (r2 - p2); + m22 = (r2 - p2); double m23; - m03 = (s2 - p2); + m23 = (s2 - p2); double m24; - m04 = (t2 - p2); + m24 = (t2 - p2); double m31; - m01 = (q3 - p3); + m31 = (q3 - p3); double m32; - m02 = (r3 - p3); + m32 = (r3 - p3); double m33; - m03 = (s3 - p3); + m33 = (s3 - p3); double m34; - m04 = (t3 - p3); + m34 = (t3 - p3); double det = determinant(m01, m02, m03, m04, m11, m12, m13, m14, m21, m22, m23, m24, m31, m32, m33, m34); - if (det > 0) { - return 1; // positive orientation - } else if (det < 0) { - return -1; // negative orientation - } else { - return 0; // zero orientation - } + return sign(det); + } +//===========generated ================== +inline int orientationC4( double p0, double p1, double p2, double p3, double q0, double q1, double q2, double q3, double r0, double r1, double r2, double r3, double s0, double s1, double s2, double s3, double t0, double t1, double t2, double t3) { + double m01; + m01 = (q0 - p0); + double m02; + m02 = (r0 - p0); + double m03; + m03 = (s0 - p0); + double m04; + m04 = (t0 - p0); + double m11; + m11 = (q1 - p1); + double m12; + m12 = (r1 - p1); + double m13; + m13 = (s1 - p1); + double m14; + m14 = (t1 - p1); + double m21; + m21 = (q2 - p2); + double m22; + m22 = (r2 - p2); + double m23; + m23 = (s2 - p2); + double m24; + m24 = (t2 - p2); + double m31; + m31 = (q3 - p3); + double m32; + m32 = (r3 - p3); + double m33; + m33 = (s3 - p3); + double m34; + m34 = (t3 - p3); + double det; + det = determinant( m01, m02, m03, m04, m11, m12, m13, m14, m21, m22, m23, m24, m31, m32, m33, m34 ); + int int_tmp_result; + double eps; + double max1 = fabs(m01); + if( (max1 < fabs(m02)) ) + { + max1 = fabs(m02); + } + if( (max1 < fabs(m03)) ) + { + max1 = fabs(m03); + } + if( (max1 < fabs(m11)) ) + { + max1 = fabs(m11); + } + if( (max1 < fabs(m12)) ) + { + max1 = fabs(m12); + } + if( (max1 < fabs(m13)) ) + { + max1 = fabs(m13); + } + if( (max1 < fabs(m23)) ) + { + max1 = fabs(m23); + } + double max2 = fabs(m01); + if( (max2 < fabs(m02)) ) + { + max2 = fabs(m02); + } + if( (max2 < fabs(m11)) ) + { + max2 = fabs(m11); + } + if( (max2 < fabs(m12)) ) + { + max2 = fabs(m12); + } + if( (max2 < fabs(m21)) ) + { + max2 = fabs(m21); + } + if( (max2 < fabs(m22)) ) + { + max2 = fabs(m22); + } + if( (max2 < fabs(m23)) ) + { + max2 = fabs(m23); + } + if( (max2 < fabs(m33)) ) + { + max2 = fabs(m33); + } + double max3 = fabs(m04); + if( (max3 < fabs(m14)) ) + { + max3 = fabs(m14); + } + if( (max3 < fabs(m24)) ) + { + max3 = fabs(m24); + } + if( (max3 < fabs(m34)) ) + { + max3 = fabs(m34); + } + double max4 = fabs(m11); + if( (max4 < fabs(m12)) ) + { + max4 = fabs(m12); + } + if( (max4 < fabs(m21)) ) + { + max4 = fabs(m21); + } + if( (max4 < fabs(m22)) ) + { + max4 = fabs(m22); + } + if( (max4 < fabs(m31)) ) + { + max4 = fabs(m31); + } + if( (max4 < fabs(m32)) ) + { + max4 = fabs(m32); + } + double lower_bound_1; + double upper_bound_1; + lower_bound_1 = max1; + upper_bound_1 = max1; + if( (max2 < lower_bound_1) ) + { + lower_bound_1 = max2; + } + else + { + if( (max2 > upper_bound_1) ) + { + upper_bound_1 = max2; + } + } + if( (max3 < lower_bound_1) ) + { + lower_bound_1 = max3; + } + else + { + if( (max3 > upper_bound_1) ) + { + upper_bound_1 = max3; + } + } + if( (max4 < lower_bound_1) ) + { + lower_bound_1 = max4; + } + else + { + if( (max4 > upper_bound_1) ) + { + upper_bound_1 = max4; + } + } + if( (lower_bound_1 < 2.89273249588395272840e-74) ) + { + return FPG_UNCERTAIN_VALUE; + } + else + { + if( (upper_bound_1 > 7.23700557733225900010e+75) ) + { + return FPG_UNCERTAIN_VALUE; + } + eps = (3.17768858673611327578e-14 * (((max4 * max2) * max1) * max3)); + if( (det > eps) ) + { + int_tmp_result = 1; + } + else + { + if( (det < -eps) ) + { + int_tmp_result = -1; + } + else + { + return FPG_UNCERTAIN_VALUE; + } + } + } + return int_tmp_result; +} diff --git a/NewKernel_d/include/CGAL/NewKernel_d/orientationC5.h b/NewKernel_d/include/CGAL/NewKernel_d/orientationC5.h index 6433d905b4f..981395fd978 100644 --- a/NewKernel_d/include/CGAL/NewKernel_d/orientationC5.h +++ b/NewKernel_d/include/CGAL/NewKernel_d/orientationC5.h @@ -1,138 +1,52 @@ -// Copyright (c) 2025 GeometryFactory (France). -// All rights reserved. -// -// This file is part of CGAL (www.cgal.org) -// -// $URL$ -// $Id$ -// SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial -// -// -// Author(s) : Andreas Fabri - - -inline double determinant_with_1_in_row_0( double a01, double a02, double a03, double a04, double a05, double a11, double a12, double a13, double a14, double a15, double a21, double a22, double a23, double a24, double a25, double a31, double a32, double a33, double a34, double a35, double a41, double a42, double a43, double a44, double a45, double a51, double a52, double a53, double a54, double a55) { - double m01; - m01 = (a11 - a01); - double m02; - m02 = (a21 - a01); - double m03; - m03 = (a31 - a01); - double m04; - m04 = (a41 - a01); - double m05; - m05 = (a51 - a01); - double m12; - m12 = (a21 - a11); - double m13; - m13 = (a31 - a11); - double m14; - m14 = (a41 - a11); - double m15; - m15 = (a51 - a11); - double m23; - m23 = (a31 - a21); - double m24; - m24 = (a41 - a21); - double m25; - m25 = (a51 - a21); - double m34; - m34 = (a41 - a31); - double m35; - m35 = (a51 - a31); - double m45; - m45 = (a51 - a41); - double m012; - m012 = (((m01 * a22) - (m02 * a12)) + (m12 * a02)); - double m013; - m013 = (((m01 * a32) - (m03 * a12)) + (m13 * a02)); - double m014; - m014 = (((m01 * a42) - (m04 * a12)) + (m14 * a02)); - double m015; - m015 = (((m01 * a52) - (m05 * a12)) + (m15 * a02)); - double m023; - m023 = (((m02 * a32) - (m03 * a22)) + (m23 * a02)); - double m024; - m024 = (((m02 * a42) - (m04 * a22)) + (m24 * a02)); - double m025; - m025 = (((m02 * a52) - (m05 * a22)) + (m25 * a02)); - double m034; - m034 = (((m03 * a42) - (m04 * a32)) + (m34 * a02)); - double m035; - m035 = (((m03 * a52) - (m05 * a32)) + (m35 * a02)); - double m045; - m045 = (((m04 * a52) - (m05 * a42)) + (m45 * a02)); - double m123; - m123 = (((m12 * a32) - (m13 * a22)) + (m23 * a12)); - double m124; - m124 = (((m12 * a42) - (m14 * a22)) + (m24 * a12)); - double m125; - m125 = (((m12 * a52) - (m15 * a22)) + (m25 * a12)); - double m134; - m134 = (((m13 * a42) - (m14 * a32)) + (m34 * a12)); - double m135; - m135 = (((m13 * a52) - (m15 * a32)) + (m35 * a12)); - double m145; - m145 = (((m14 * a52) - (m15 * a42)) + (m45 * a12)); - double m234; - m234 = (((m23 * a42) - (m24 * a32)) + (m34 * a22)); - double m235; - m235 = (((m23 * a52) - (m25 * a32)) + (m35 * a22)); - double m245; - m245 = (((m24 * a52) - (m25 * a42)) + (m45 * a22)); - double m345; - m345 = (((m34 * a52) - (m35 * a42)) + (m45 * a32)); - double m0123; - m0123 = ((((m012 * a33) - (m013 * a23)) + (m023 * a13)) - (m123 * a03)); - double m0124; - m0124 = ((((m012 * a43) - (m014 * a23)) + (m024 * a13)) - (m124 * a03)); - double m0125; - m0125 = ((((m012 * a53) - (m015 * a23)) + (m025 * a13)) - (m125 * a03)); - double m0134; - m0134 = ((((m013 * a43) - (m014 * a33)) + (m034 * a13)) - (m134 * a03)); - double m0135; - m0135 = ((((m013 * a53) - (m015 * a33)) + (m035 * a13)) - (m135 * a03)); - double m0145; - m0145 = ((((m014 * a53) - (m015 * a43)) + (m045 * a13)) - (m145 * a03)); - double m0234; - m0234 = ((((m023 * a43) - (m024 * a33)) + (m034 * a23)) - (m234 * a03)); - double m0235; - m0235 = ((((m023 * a53) - (m025 * a33)) + (m035 * a23)) - (m235 * a03)); - double m0245; - m0245 = ((((m024 * a53) - (m025 * a43)) + (m045 * a23)) - (m245 * a03)); - double m0345; - m0345 = ((((m034 * a53) - (m035 * a43)) + (m045 * a33)) - (m345 * a03)); - double m1234; - m1234 = ((((m123 * a43) - (m124 * a33)) + (m134 * a23)) - (m234 * a13)); - double m1235; - m1235 = ((((m123 * a53) - (m125 * a33)) + (m135 * a23)) - (m235 * a13)); - double m1245; - m1245 = ((((m124 * a53) - (m125 * a43)) + (m145 * a23)) - (m245 * a13)); - double m1345; - m1345 = ((((m134 * a53) - (m135 * a43)) + (m145 * a33)) - (m345 * a13)); - double m2345; - m2345 = ((((m234 * a53) - (m235 * a43)) + (m245 * a33)) - (m345 * a23)); - double m01234; - m01234 = (((((m0123 * a44) - (m0124 * a34)) + (m0134 * a24)) - (m0234 * a14)) + (m1234 * a04)); - double m01235; - m01235 = (((((m0123 * a54) - (m0125 * a34)) + (m0135 * a24)) - (m0235 * a14)) + (m1235 * a04)); - double m01245; - m01245 = (((((m0124 * a54) - (m0125 * a44)) + (m0145 * a24)) - (m0245 * a14)) + (m1245 * a04)); - double m01345; - m01345 = (((((m0134 * a54) - (m0135 * a44)) + (m0145 * a34)) - (m0345 * a14)) + (m1345 * a04)); - double m02345; - m02345 = (((((m0234 * a54) - (m0235 * a44)) + (m0245 * a34)) - (m0345 * a24)) + (m2345 * a04)); - double m12345; - m12345 = (((((m1234 * a54) - (m1235 * a44)) + (m1245 * a34)) - (m1345 * a24)) + (m2345 * a14)); - double m012345; - m012345 = ((((((m01234 * a55) - (m01235 * a45)) + (m01245 * a35)) - (m01345 * a25)) + (m02345 * a15)) - (m12345 * a05)); - return m012345; +double +determinant( + double a00, double a01, double a02, double a03, double a04, + double a10, double a11, double a12, double a13, double a14, + double a20, double a21, double a22, double a23, double a24, + double a30, double a31, double a32, double a33, double a34, + double a40, double a41, double a42, double a43, double a44) +{ + double m01 = a10*a01 - a00*a11; + double m02 = a20*a01 - a00*a21; + double m03 = a30*a01 - a00*a31; + double m04 = a40*a01 - a00*a41; + double m12 = a20*a11 - a10*a21; + double m13 = a30*a11 - a10*a31; + double m14 = a40*a11 - a10*a41; + double m23 = a30*a21 - a20*a31; + double m24 = a40*a21 - a20*a41; + double m34 = a40*a31 - a30*a41; + double m012 = m12*a02 - m02*a12 + m01*a22; + double m013 = m13*a02 - m03*a12 + m01*a32; + double m014 = m14*a02 - m04*a12 + m01*a42; + double m023 = m23*a02 - m03*a22 + m02*a32; + double m024 = m24*a02 - m04*a22 + m02*a42; + double m034 = m34*a02 - m04*a32 + m03*a42; + double m123 = m23*a12 - m13*a22 + m12*a32; + double m124 = m24*a12 - m14*a22 + m12*a42; + double m134 = m34*a12 - m14*a32 + m13*a42; + double m234 = m34*a22 - m24*a32 + m23*a42; + double m0123 = m123*a03 - m023*a13 + m013*a23 - m012*a33; + double m0124 = m124*a03 - m024*a13 + m014*a23 - m012*a43; + double m0134 = m134*a03 - m034*a13 + m014*a33 - m013*a43; + double m0234 = m234*a03 - m034*a23 + m024*a33 - m023*a43; + double m1234 = m234*a13 - m134*a23 + m124*a33 - m123*a43; + double m01234 = m1234*a04 - m0234*a14 + m0134*a24 - m0124*a34 + m0123*a44; + return m01234; } - -inline int orientationC5( double p0, double p1, double p2, double p3, double p4, double q0, double q1, double q2, double q3, double q4, double r0, double r1, double r2, double r3, double r4, double s0, double s1, double s2, double s3, double s4, double t0, double t1, double t2, double t3, double t4, double u0, double u1, double u2, double u3, double u4) { - double det; - double determinant_with_1_in_row_0_return_value; +int orientationC5(double p0, double p1, double p2, double p3, double p4, + double q0, double q1, double q2, double q3, double q4, + double r0, double r1, double r2, double r3, double r4, + double s0, double s1, double s2, double s3, double s4, + double t0, double t1, double t2, double t3, double t4, + double u0, double u1, double u2, double u3, double u4) +group p0 q0 r0 t0 q0 u0; +group p1 q1 r1 t1 q1 u1; +group p2 q2 r2 t2 q2 u2; +group p3 q3 r3 t3 q3 u3; +group p4 q4 r4 t4 q4 u4; +{ double m01; m01 = (q0 - p0); double m02; @@ -143,254 +57,256 @@ inline int orientationC5( double p0, double p1, double p2, double p3, double p4, m04 = (t0 - p0); double m05; m05 = (u0 - p0); + + double m11; + m11 = (q1 - p1); double m12; - m12 = (r0 - q0); + m12 = (r1 - p1); double m13; - m13 = (s0 - q0); + m13 = (s1 - p1); double m14; - m14 = (t0 - q0); + m14 = (t1 - p1); double m15; - m15 = (u0 - q0); + m15 = (u1 - p1); + + double m21; + m21 = (q2 - p2); + double m22; + m22 = (r2 - p2); double m23; - m23 = (s0 - r0); + m23 = (s2 - p2); double m24; - m24 = (t0 - r0); + m24 = (t2 - p2); double m25; - m25 = (u0 - r0); + m25 = (u2 - p2); + + double m31; + m31 = (q3 - p3); + double m32; + m32 = (r3 - p3); + double m33; + m33 = (s3 - p3); double m34; - m34 = (t0 - s0); + m34 = (t3 - p3); double m35; - m35 = (u0 - s0); + m35 = (u3 - p3); + + double m41; + m41 = (q4 - p4); + double m42; + m42 = (r4 - p4); + double m43; + m43 = (s4 - p4); + double m44; + m44 = (t4 - p4); double m45; - m45 = (u0 - t0); - double m012; - m012 = (((m01 * r1) - (m02 * q1)) + (m12 * p1)); - double m013; - m013 = (((m01 * s1) - (m03 * q1)) + (m13 * p1)); - double m014; - m014 = (((m01 * t1) - (m04 * q1)) + (m14 * p1)); - double m015; - m015 = (((m01 * u1) - (m05 * q1)) + (m15 * p1)); - double m023; - m023 = (((m02 * s1) - (m03 * r1)) + (m23 * p1)); - double m024; - m024 = (((m02 * t1) - (m04 * r1)) + (m24 * p1)); - double m025; - m025 = (((m02 * u1) - (m05 * r1)) + (m25 * p1)); - double m034; - m034 = (((m03 * t1) - (m04 * s1)) + (m34 * p1)); - double m035; - m035 = (((m03 * u1) - (m05 * s1)) + (m35 * p1)); - double m045; - m045 = (((m04 * u1) - (m05 * t1)) + (m45 * p1)); - double m123; - m123 = (((m12 * s1) - (m13 * r1)) + (m23 * q1)); - double m124; - m124 = (((m12 * t1) - (m14 * r1)) + (m24 * q1)); - double m125; - m125 = (((m12 * u1) - (m15 * r1)) + (m25 * q1)); - double m134; - m134 = (((m13 * t1) - (m14 * s1)) + (m34 * q1)); - double m135; - m135 = (((m13 * u1) - (m15 * s1)) + (m35 * q1)); - double m145; - m145 = (((m14 * u1) - (m15 * t1)) + (m45 * q1)); - double m234; - m234 = (((m23 * t1) - (m24 * s1)) + (m34 * r1)); - double m235; - m235 = (((m23 * u1) - (m25 * s1)) + (m35 * r1)); - double m245; - m245 = (((m24 * u1) - (m25 * t1)) + (m45 * r1)); - double m345; - m345 = (((m34 * u1) - (m35 * t1)) + (m45 * s1)); - double m0123; - m0123 = ((((m012 * s2) - (m013 * r2)) + (m023 * q2)) - (m123 * p2)); - double m0124; - m0124 = ((((m012 * t2) - (m014 * r2)) + (m024 * q2)) - (m124 * p2)); - double m0125; - m0125 = ((((m012 * u2) - (m015 * r2)) + (m025 * q2)) - (m125 * p2)); - double m0134; - m0134 = ((((m013 * t2) - (m014 * s2)) + (m034 * q2)) - (m134 * p2)); - double m0135; - m0135 = ((((m013 * u2) - (m015 * s2)) + (m035 * q2)) - (m135 * p2)); - double m0145; - m0145 = ((((m014 * u2) - (m015 * t2)) + (m045 * q2)) - (m145 * p2)); - double m0234; - m0234 = ((((m023 * t2) - (m024 * s2)) + (m034 * r2)) - (m234 * p2)); - double m0235; - m0235 = ((((m023 * u2) - (m025 * s2)) + (m035 * r2)) - (m235 * p2)); - double m0245; - m0245 = ((((m024 * u2) - (m025 * t2)) + (m045 * r2)) - (m245 * p2)); - double m0345; - m0345 = ((((m034 * u2) - (m035 * t2)) + (m045 * s2)) - (m345 * p2)); - double m1234; - m1234 = ((((m123 * t2) - (m124 * s2)) + (m134 * r2)) - (m234 * q2)); - double m1235; - m1235 = ((((m123 * u2) - (m125 * s2)) + (m135 * r2)) - (m235 * q2)); - double m1245; - m1245 = ((((m124 * u2) - (m125 * t2)) + (m145 * r2)) - (m245 * q2)); - double m1345; - m1345 = ((((m134 * u2) - (m135 * t2)) + (m145 * s2)) - (m345 * q2)); - double m2345; - m2345 = ((((m234 * u2) - (m235 * t2)) + (m245 * s2)) - (m345 * r2)); - double m01234; - m01234 = (((((m0123 * t3) - (m0124 * s3)) + (m0134 * r3)) - (m0234 * q3)) + (m1234 * p3)); - double m01235; - m01235 = (((((m0123 * u3) - (m0125 * s3)) + (m0135 * r3)) - (m0235 * q3)) + (m1235 * p3)); - double m01245; - m01245 = (((((m0124 * u3) - (m0125 * t3)) + (m0145 * r3)) - (m0245 * q3)) + (m1245 * p3)); - double m01345; - m01345 = (((((m0134 * u3) - (m0135 * t3)) + (m0145 * s3)) - (m0345 * q3)) + (m1345 * p3)); - double m02345; - m02345 = (((((m0234 * u3) - (m0235 * t3)) + (m0245 * s3)) - (m0345 * r3)) + (m2345 * p3)); - double m12345; - m12345 = (((((m1234 * u3) - (m1235 * t3)) + (m1245 * s3)) - (m1345 * r3)) + (m2345 * q3)); - double m012345; - m012345 = ((((((m01234 * u4) - (m01235 * t4)) + (m01245 * s4)) - (m01345 * r4)) + (m02345 * q4)) - (m12345 * p4)); - determinant_with_1_in_row_0_return_value = m012345; - det = determinant_with_1_in_row_0_return_value; + m45 = (u4 - p4); + + double det = determinant(m01, m02, m03, m04, m05, + m11, m12, m13, m14, m15, + m21, m22, m23, m24, m25, + m31, m32, m33, m34, m35, + m41, m42, m43, m44, m45); + return sign(det); +} + +//===========generated ================== + +inline int orientationC5( double p0, double p1, double p2, double p3, double p4, double q0, double q1, double q2, double q3, double q4, double r0, double r1, double r2, double r3, double r4, double s0, double s1, double s2, double s3, double s4, double t0, double t1, double t2, double t3, double t4, double u0, double u1, double u2, double u3, double u4) { + double m01; + m01 = (q0 - p0); + double m02; + m02 = (r0 - p0); + double m03; + m03 = (s0 - p0); + double m04; + m04 = (t0 - p0); + double m05; + m05 = (u0 - p0); + double m11; + m11 = (q1 - p1); + double m12; + m12 = (r1 - p1); + double m13; + m13 = (s1 - p1); + double m14; + m14 = (t1 - p1); + double m15; + m15 = (u1 - p1); + double m21; + m21 = (q2 - p2); + double m22; + m22 = (r2 - p2); + double m23; + m23 = (s2 - p2); + double m24; + m24 = (t2 - p2); + double m25; + m25 = (u2 - p2); + double m31; + m31 = (q3 - p3); + double m32; + m32 = (r3 - p3); + double m33; + m33 = (s3 - p3); + double m34; + m34 = (t3 - p3); + double m35; + m35 = (u3 - p3); + double m41; + m41 = (q4 - p4); + double m42; + m42 = (r4 - p4); + double m43; + m43 = (s4 - p4); + double m44; + m44 = (t4 - p4); + double m45; + m45 = (u4 - p4); + double det; + det = determinant( m01, m02, m03, m04, m05, m11, m12, m13, m14, m15, m21, m22, m23, m24, m25, m31, m32, m33, m34, m35, m41, m42, m43, m44, m45 ); int int_tmp_result; double eps; - double max1 = fabs(p1); - if( (max1 < fabs(q1)) ) + double max1 = fabs(m01); + if( (max1 < fabs(m02)) ) { - max1 = fabs(q1); + max1 = fabs(m02); } - if( (max1 < fabs(r1)) ) + if( (max1 < fabs(m03)) ) { - max1 = fabs(r1); + max1 = fabs(m03); } - if( (max1 < fabs(s1)) ) + if( (max1 < fabs(m11)) ) { - max1 = fabs(s1); + max1 = fabs(m11); } - if( (max1 < fabs(t1)) ) + if( (max1 < fabs(m12)) ) { - max1 = fabs(t1); + max1 = fabs(m12); } - if( (max1 < fabs(u1)) ) + if( (max1 < fabs(m13)) ) { - max1 = fabs(u1); + max1 = fabs(m13); } - double max2 = fabs(p2); - if( (max2 < fabs(q2)) ) + if( (max1 < fabs(m21)) ) { - max2 = fabs(q2); + max1 = fabs(m21); } - if( (max2 < fabs(r2)) ) + if( (max1 < fabs(m22)) ) { - max2 = fabs(r2); + max1 = fabs(m22); } - if( (max2 < fabs(s2)) ) + if( (max1 < fabs(m23)) ) { - max2 = fabs(s2); + max1 = fabs(m23); } - if( (max2 < fabs(t2)) ) + if( (max1 < fabs(m33)) ) { - max2 = fabs(t2); + max1 = fabs(m33); } - if( (max2 < fabs(u2)) ) + double max2 = fabs(m01); + if( (max2 < fabs(m02)) ) { - max2 = fabs(u2); + max2 = fabs(m02); } - double max3 = fabs(p3); - if( (max3 < fabs(q3)) ) + if( (max2 < fabs(m11)) ) { - max3 = fabs(q3); + max2 = fabs(m11); } - if( (max3 < fabs(r3)) ) + if( (max2 < fabs(m12)) ) { - max3 = fabs(r3); + max2 = fabs(m12); } - if( (max3 < fabs(s3)) ) + if( (max2 < fabs(m21)) ) { - max3 = fabs(s3); + max2 = fabs(m21); } - if( (max3 < fabs(t3)) ) + if( (max2 < fabs(m22)) ) { - max3 = fabs(t3); + max2 = fabs(m22); } - if( (max3 < fabs(u3)) ) + if( (max2 < fabs(m23)) ) { - max3 = fabs(u3); + max2 = fabs(m23); } - double max4 = fabs(p4); - if( (max4 < fabs(q4)) ) + if( (max2 < fabs(m31)) ) { - max4 = fabs(q4); + max2 = fabs(m31); } - if( (max4 < fabs(r4)) ) + if( (max2 < fabs(m32)) ) { - max4 = fabs(r4); + max2 = fabs(m32); } - if( (max4 < fabs(s4)) ) + if( (max2 < fabs(m33)) ) { - max4 = fabs(s4); + max2 = fabs(m33); } - if( (max4 < fabs(t4)) ) + if( (max2 < fabs(m43)) ) { - max4 = fabs(t4); + max2 = fabs(m43); } - if( (max4 < fabs(u4)) ) + double max3 = fabs(m04); + if( (max3 < fabs(m14)) ) { - max4 = fabs(u4); + max3 = fabs(m14); } - double max5 = fabs(m01); - if( (max5 < fabs(m05)) ) + if( (max3 < fabs(m24)) ) { - max5 = fabs(m05); + max3 = fabs(m24); } - if( (max5 < fabs(m04)) ) + if( (max3 < fabs(m34)) ) { - max5 = fabs(m04); + max3 = fabs(m34); } - if( (max5 < fabs(m03)) ) + if( (max3 < fabs(m44)) ) { - max5 = fabs(m03); + max3 = fabs(m44); } - if( (max5 < fabs(m02)) ) + double max4 = fabs(m05); + if( (max4 < fabs(m15)) ) { - max5 = fabs(m02); + max4 = fabs(m15); } - if( (max5 < fabs(m15)) ) + if( (max4 < fabs(m25)) ) { - max5 = fabs(m15); + max4 = fabs(m25); } - if( (max5 < fabs(m14)) ) + if( (max4 < fabs(m35)) ) { - max5 = fabs(m14); + max4 = fabs(m35); } - if( (max5 < fabs(m13)) ) + if( (max4 < fabs(m45)) ) { - max5 = fabs(m13); + max4 = fabs(m45); } + double max5 = fabs(m11); if( (max5 < fabs(m12)) ) { max5 = fabs(m12); } - if( (max5 < fabs(m34)) ) + if( (max5 < fabs(m21)) ) { - max5 = fabs(m34); + max5 = fabs(m21); } - if( (max5 < fabs(m25)) ) + if( (max5 < fabs(m22)) ) { - max5 = fabs(m25); + max5 = fabs(m22); } - if( (max5 < fabs(m24)) ) + if( (max5 < fabs(m31)) ) { - max5 = fabs(m24); + max5 = fabs(m31); } - if( (max5 < fabs(m23)) ) + if( (max5 < fabs(m32)) ) { - max5 = fabs(m23); + max5 = fabs(m32); } - if( (max5 < fabs(m45)) ) + if( (max5 < fabs(m41)) ) { - max5 = fabs(m45); + max5 = fabs(m41); } - if( (max5 < fabs(m35)) ) + if( (max5 < fabs(m42)) ) { - max5 = fabs(m35); + max5 = fabs(m42); } double lower_bound_1; double upper_bound_1; @@ -440,7 +356,7 @@ inline int orientationC5( double p0, double p1, double p2, double p3, double p4, upper_bound_1 = max4; } } - if( (lower_bound_1 < 8.19482853969781542511e-60) ) + if( (lower_bound_1 < 9.99657131447050328602e-60) ) { return FPG_UNCERTAIN_VALUE; } @@ -450,7 +366,7 @@ inline int orientationC5( double p0, double p1, double p2, double p3, double p4, { return FPG_UNCERTAIN_VALUE; } - eps = (6.02067348555779570000e-13 * ((((max5 * max1) * max2) * max3) * max4)); + eps = (2.22889232457534740153e-13 * ((((max5 * max2) * max1) * max3) * max4)); if( (det > eps) ) { int_tmp_result = 1; @@ -469,6 +385,3 @@ inline int orientationC5( double p0, double p1, double p2, double p3, double p4, } return int_tmp_result; } - - - From f2e16bd0c900fb5046427b1102ec9d29d4f1c159 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 1 Jul 2025 16:05:37 +0200 Subject: [PATCH 32/49] dim 6 --- .../include/CGAL/NewKernel_d/orientationC6.h | 676 +++++++++--------- 1 file changed, 335 insertions(+), 341 deletions(-) diff --git a/NewKernel_d/include/CGAL/NewKernel_d/orientationC6.h b/NewKernel_d/include/CGAL/NewKernel_d/orientationC6.h index 77525c8a21b..0c1792230a9 100644 --- a/NewKernel_d/include/CGAL/NewKernel_d/orientationC6.h +++ b/NewKernel_d/include/CGAL/NewKernel_d/orientationC6.h @@ -1,464 +1,458 @@ -// Copyright (c) 2025 GeometryFactory (France). -// All rights reserved. -// -// This file is part of CGAL (www.cgal.org) -// -// $URL$ -// $Id$ -// SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial -// -// -// Author(s) : Andreas Fabri +double +determinant( + double a00, double a01, double a02, double a03, double a04, double a05, + double a10, double a11, double a12, double a13, double a14, double a15, + double a20, double a21, double a22, double a23, double a24, double a25, + double a30, double a31, double a32, double a33, double a34, double a35, + double a40, double a41, double a42, double a43, double a44, double a45, + double a50, double a51, double a52, double a53, double a54, double a55) +{ + double m01 = a00*a11 - a10*a01; + double m02 = a00*a21 - a20*a01; + double m03 = a00*a31 - a30*a01; + double m04 = a00*a41 - a40*a01; + double m05 = a00*a51 - a50*a01; + double m12 = a10*a21 - a20*a11; + double m13 = a10*a31 - a30*a11; + double m14 = a10*a41 - a40*a11; + double m15 = a10*a51 - a50*a11; + double m23 = a20*a31 - a30*a21; + double m24 = a20*a41 - a40*a21; + double m25 = a20*a51 - a50*a21; + double m34 = a30*a41 - a40*a31; + double m35 = a30*a51 - a50*a31; + double m45 = a40*a51 - a50*a41; + double m012 = m01*a22 - m02*a12 + m12*a02; + double m013 = m01*a32 - m03*a12 + m13*a02; + double m014 = m01*a42 - m04*a12 + m14*a02; + double m015 = m01*a52 - m05*a12 + m15*a02; + double m023 = m02*a32 - m03*a22 + m23*a02; + double m024 = m02*a42 - m04*a22 + m24*a02; + double m025 = m02*a52 - m05*a22 + m25*a02; + double m034 = m03*a42 - m04*a32 + m34*a02; + double m035 = m03*a52 - m05*a32 + m35*a02; + double m045 = m04*a52 - m05*a42 + m45*a02; + double m123 = m12*a32 - m13*a22 + m23*a12; + double m124 = m12*a42 - m14*a22 + m24*a12; + double m125 = m12*a52 - m15*a22 + m25*a12; + double m134 = m13*a42 - m14*a32 + m34*a12; + double m135 = m13*a52 - m15*a32 + m35*a12; + double m145 = m14*a52 - m15*a42 + m45*a12; + double m234 = m23*a42 - m24*a32 + m34*a22; + double m235 = m23*a52 - m25*a32 + m35*a22; + double m245 = m24*a52 - m25*a42 + m45*a22; + double m345 = m34*a52 - m35*a42 + m45*a32; -inline int orientation( double a01, double a02, double a03, double a04, double a05, double a06, double a11, double a12, double a13, double a14, double a15, double a16, double a21, double a22, double a23, double a24, double a25, double a26, double a31, double a32, double a33, double a34, double a35, double a36, double a41, double a42, double a43, double a44, double a45, double a46, double a51, double a52, double a53, double a54, double a55, double a56, double a61, double a62, double a63, double a64, double a65, double a66) { + double m0123 = m012*a33 - m013*a23 + m023*a13 - m123*a03; + double m0124 = m012*a43 - m014*a23 + m024*a13 - m124*a03; + double m0125 = m012*a53 - m015*a23 + m025*a13 - m125*a03; + double m0134 = m013*a43 - m014*a33 + m034*a13 - m134*a03; + double m0135 = m013*a53 - m015*a33 + m035*a13 - m135*a03; + double m0145 = m014*a53 - m015*a43 + m045*a13 - m145*a03; + double m0234 = m023*a43 - m024*a33 + m034*a23 - m234*a03; + double m0235 = m023*a53 - m025*a33 + m035*a23 - m235*a03; + double m0245 = m024*a53 - m025*a43 + m045*a23 - m245*a03; + double m0345 = m034*a53 - m035*a43 + m045*a33 - m345*a03; + double m1234 = m123*a43 - m124*a33 + m134*a23 - m234*a13; + double m1235 = m123*a53 - m125*a33 + m135*a23 - m235*a13; + double m1245 = m124*a53 - m125*a43 + m145*a23 - m245*a13; + double m1345 = m134*a53 - m135*a43 + m145*a33 - m345*a13; + double m2345 = m234*a53 - m235*a43 + m245*a33 - m345*a23; + + double m01234 = m0123*a44 - m0124*a34 + m0134*a24 - m0234*a14 + m1234*a04; + double m01235 = m0123*a54 - m0125*a34 + m0135*a24 - m0235*a14 + m1235*a04; + double m01245 = m0124*a54 - m0125*a44 + m0145*a24 - m0245*a14 + m1245*a04; + double m01345 = m0134*a54 - m0135*a44 + m0145*a34 - m0345*a14 + m1345*a04; + double m02345 = m0234*a54 - m0235*a44 + m0245*a34 - m0345*a24 + m2345*a04; + double m12345 = m1234*a54 - m1235*a44 + m1245*a34 - m1345*a24 + m2345*a14; + + double m012345 = m01234*a55 - m01235*a45 + m01245*a35 - m01345*a25 + + m02345*a15 - m12345*a05; + return m012345; +} + +int orientationC5(double p0, double p1, double p2, double p3, double p4, double p5, + double q0, double q1, double q2, double q3, double q4, double q5, + double r0, double r1, double r2, double r3, double r4, double r5, + double s0, double s1, double s2, double s3, double s4, double s5, + double t0, double t1, double t2, double t3, double t4, double t5, + double u0, double u1, double u2, double u3, double u4, double u5, + double v0, double v1, double v2, double v3, double v4, double v5) +group p0 q0 r0 t0 q0 u0 v0; +group p1 q1 r1 t1 q1 u1 v1; +group p2 q2 r2 t2 q2 u2 v2; +group p3 q3 r3 t3 q3 u3 v3; +group p4 q4 r4 t4 q4 u4 v4; +group p5 q5 r5 t5 q5 u5 v5; +{ double m01; - m01 = (a11 - a01); + m01 = (q0 - p0); double m02; - m02 = (a21 - a01); + m02 = (r0 - p0); double m03; - m03 = (a31 - a01); + m03 = (s0 - p0); double m04; - m04 = (a41 - a01); + m04 = (t0 - p0); double m05; - m05 = (a51 - a01); + m05 = (u0 - p0); double m06; - m06 = (a61 - a01); + m06 = (v0 - p0); + + double m11; + m11 = (q1 - p1); double m12; - m12 = (a21 - a11); + m12 = (r1 - p1); double m13; - m13 = (a31 - a11); + m13 = (s1 - p1); double m14; - m14 = (a41 - a11); + m14 = (t1 - p1); double m15; - m15 = (a51 - a11); + m15 = (u1 - p1); double m16; - m16 = (a61 - a11); + m16 = (v1 - p1); + + double m21; + m21 = (q2 - p2); + double m22; + m22 = (r2 - p2); double m23; - m23 = (a31 - a21); + m23 = (s2 - p2); double m24; - m24 = (a41 - a21); + m24 = (t2 - p2); double m25; - m25 = (a51 - a21); + m25 = (u2 - p2); double m26; - m26 = (a61 - a21); + m26 = (v2 - p2); + + double m31; + m31 = (q3 - p3); + double m32; + m32 = (r3 - p3); + double m33; + m33 = (s3 - p3); double m34; - m34 = (a41 - a31); + m34 = (t3 - p3); double m35; - m35 = (a51 - a31); + m35 = (u3 - p3); double m36; - m36 = (a61 - a31); + m36 = (v3 - p3); + + double m41; + m41 = (q4 - p4); + double m42; + m42 = (r4 - p4); + double m43; + m43 = (s4 - p4); + double m44; + m44 = (t4 - p4); double m45; - m45 = (a51 - a41); + m45 = (u4 - p4); double m46; - m46 = (a61 - a41); + m46 = (v4 - p4); + + double m51; + m51 = (q5 - p5); + double m52; + m52 = (r5 - p5); + double m53; + m53 = (s5 - p5); + double m54; + m54 = (t5 - p5); + double m55; + m55 = (u5 - p5); double m56; - m56 = (a61 - a51); - double m012; - m012 = (((m01 * a22) - (m02 * a12)) + (m12 * a02)); - double m013; - m013 = (((m01 * a32) - (m03 * a12)) + (m13 * a02)); - double m014; - m014 = (((m01 * a42) - (m04 * a12)) + (m14 * a02)); - double m015; - m015 = (((m01 * a52) - (m05 * a12)) + (m15 * a02)); - double m016; - m016 = (((m01 * a62) - (m06 * a12)) + (m16 * a02)); - double m023; - m023 = (((m02 * a32) - (m03 * a22)) + (m23 * a02)); - double m024; - m024 = (((m02 * a42) - (m04 * a22)) + (m24 * a02)); - double m025; - m025 = (((m02 * a52) - (m05 * a22)) + (m25 * a02)); - double m026; - m026 = (((m02 * a62) - (m06 * a22)) + (m26 * a02)); - double m034; - m034 = (((m03 * a42) - (m04 * a32)) + (m34 * a02)); - double m035; - m035 = (((m03 * a52) - (m05 * a32)) + (m35 * a02)); - double m036; - m036 = (((m03 * a62) - (m06 * a32)) + (m36 * a02)); - double m045; - m045 = (((m04 * a52) - (m05 * a42)) + (m45 * a02)); - double m046; - m046 = (((m04 * a62) - (m06 * a42)) + (m46 * a02)); - double m056; - m056 = (((m05 * a62) - (m06 * a52)) + (m56 * a02)); - double m123; - m123 = (((m12 * a32) - (m13 * a22)) + (m23 * a12)); - double m124; - m124 = (((m12 * a42) - (m14 * a22)) + (m24 * a12)); - double m125; - m125 = (((m12 * a52) - (m15 * a22)) + (m25 * a12)); - double m126; - m126 = (((m12 * a62) - (m16 * a22)) + (m26 * a12)); - double m134; - m134 = (((m13 * a42) - (m14 * a32)) + (m34 * a12)); - double m135; - m135 = (((m13 * a52) - (m15 * a32)) + (m35 * a12)); - double m136; - m136 = (((m13 * a62) - (m16 * a32)) + (m36 * a12)); - double m145; - m145 = (((m14 * a52) - (m15 * a42)) + (m45 * a12)); - double m146; - m146 = (((m14 * a62) - (m16 * a42)) + (m46 * a12)); - double m156; - m156 = (((m15 * a62) - (m16 * a52)) + (m56 * a12)); - double m234; - m234 = (((m23 * a42) - (m24 * a32)) + (m34 * a22)); - double m235; - m235 = (((m23 * a52) - (m25 * a32)) + (m35 * a22)); - double m236; - m236 = (((m23 * a62) - (m26 * a32)) + (m36 * a22)); - double m245; - m245 = (((m24 * a52) - (m25 * a42)) + (m45 * a22)); - double m246; - m246 = (((m24 * a62) - (m26 * a42)) + (m46 * a22)); - double m256; - m256 = (((m25 * a62) - (m26 * a52)) + (m56 * a22)); - double m345; - m345 = (((m34 * a52) - (m35 * a42)) + (m45 * a32)); - double m346; - m346 = (((m34 * a62) - (m36 * a42)) + (m46 * a32)); - double m356; - m356 = (((m35 * a62) - (m36 * a52)) + (m56 * a32)); - double m456; - m456 = (((m45 * a62) - (m46 * a52)) + (m56 * a42)); - double m0123; - m0123 = ((((m012 * a33) - (m013 * a23)) + (m023 * a13)) - (m123 * a03)); - double m0124; - m0124 = ((((m012 * a43) - (m014 * a23)) + (m024 * a13)) - (m124 * a03)); - double m0125; - m0125 = ((((m012 * a53) - (m015 * a23)) + (m025 * a13)) - (m125 * a03)); - double m0126; - m0126 = ((((m012 * a63) - (m016 * a23)) + (m026 * a13)) - (m126 * a03)); - double m0134; - m0134 = ((((m013 * a43) - (m014 * a33)) + (m034 * a13)) - (m134 * a03)); - double m0135; - m0135 = ((((m013 * a53) - (m015 * a33)) + (m035 * a13)) - (m135 * a03)); - double m0136; - m0136 = ((((m013 * a63) - (m016 * a33)) + (m036 * a13)) - (m136 * a03)); - double m0145; - m0145 = ((((m014 * a53) - (m015 * a43)) + (m045 * a13)) - (m145 * a03)); - double m0146; - m0146 = ((((m014 * a63) - (m016 * a43)) + (m046 * a13)) - (m146 * a03)); - double m0156; - m0156 = ((((m015 * a63) - (m016 * a53)) + (m056 * a13)) - (m156 * a03)); - double m0234; - m0234 = ((((m023 * a43) - (m024 * a33)) + (m034 * a23)) - (m234 * a03)); - double m0235; - m0235 = ((((m023 * a53) - (m025 * a33)) + (m035 * a23)) - (m235 * a03)); - double m0236; - m0236 = ((((m023 * a63) - (m026 * a33)) + (m036 * a23)) - (m236 * a03)); - double m0245; - m0245 = ((((m024 * a53) - (m025 * a43)) + (m045 * a23)) - (m245 * a03)); - double m0246; - m0246 = ((((m024 * a63) - (m026 * a43)) + (m046 * a23)) - (m246 * a03)); - double m0256; - m0256 = ((((m025 * a63) - (m026 * a53)) + (m056 * a23)) - (m256 * a03)); - double m0345; - m0345 = ((((m034 * a53) - (m035 * a43)) + (m045 * a33)) - (m345 * a03)); - double m0346; - m0346 = ((((m034 * a63) - (m036 * a43)) + (m046 * a33)) - (m346 * a03)); - double m0356; - m0356 = ((((m035 * a63) - (m036 * a53)) + (m056 * a33)) - (m356 * a03)); - double m0456; - m0456 = ((((m045 * a63) - (m046 * a53)) + (m056 * a43)) - (m456 * a03)); - double m1234; - m1234 = ((((m123 * a43) - (m124 * a33)) + (m134 * a23)) - (m234 * a13)); - double m1235; - m1235 = ((((m123 * a53) - (m125 * a33)) + (m135 * a23)) - (m235 * a13)); - double m1236; - m1236 = ((((m123 * a63) - (m126 * a33)) + (m136 * a23)) - (m236 * a13)); - double m1245; - m1245 = ((((m124 * a53) - (m125 * a43)) + (m145 * a23)) - (m245 * a13)); - double m1246; - m1246 = ((((m124 * a63) - (m126 * a43)) + (m146 * a23)) - (m246 * a13)); - double m1256; - m1256 = ((((m125 * a63) - (m126 * a53)) + (m156 * a23)) - (m256 * a13)); - double m1345; - m1345 = ((((m134 * a53) - (m135 * a43)) + (m145 * a33)) - (m345 * a13)); - double m1346; - m1346 = ((((m134 * a63) - (m136 * a43)) + (m146 * a33)) - (m346 * a13)); - double m1356; - m1356 = ((((m135 * a63) - (m136 * a53)) + (m156 * a33)) - (m356 * a13)); - double m1456; - m1456 = ((((m145 * a63) - (m146 * a53)) + (m156 * a43)) - (m456 * a13)); - double m2345; - m2345 = ((((m234 * a53) - (m235 * a43)) + (m245 * a33)) - (m345 * a23)); - double m2346; - m2346 = ((((m234 * a63) - (m236 * a43)) + (m246 * a33)) - (m346 * a23)); - double m2356; - m2356 = ((((m235 * a63) - (m236 * a53)) + (m256 * a33)) - (m356 * a23)); - double m2456; - m2456 = ((((m245 * a63) - (m246 * a53)) + (m256 * a43)) - (m456 * a23)); - double m3456; - m3456 = ((((m345 * a63) - (m346 * a53)) + (m356 * a43)) - (m456 * a33)); - double m01234; - m01234 = (((((m0123 * a44) - (m0124 * a34)) + (m0134 * a24)) - (m0234 * a14)) + (m1234 * a04)); - double m01235; - m01235 = (((((m0123 * a54) - (m0125 * a34)) + (m0135 * a24)) - (m0235 * a14)) + (m1235 * a04)); - double m01236; - m01236 = (((((m0123 * a64) - (m0126 * a34)) + (m0136 * a24)) - (m0236 * a14)) + (m1236 * a04)); - double m01245; - m01245 = (((((m0124 * a54) - (m0125 * a44)) + (m0145 * a24)) - (m0245 * a14)) + (m1245 * a04)); - double m01246; - m01246 = (((((m0124 * a64) - (m0126 * a44)) + (m0146 * a24)) - (m0246 * a14)) + (m1246 * a04)); - double m01256; - m01256 = (((((m0125 * a64) - (m0126 * a54)) + (m0156 * a24)) - (m0256 * a14)) + (m1256 * a04)); - double m01345; - m01345 = (((((m0134 * a54) - (m0135 * a44)) + (m0145 * a34)) - (m0345 * a14)) + (m1345 * a04)); - double m01346; - m01346 = (((((m0134 * a64) - (m0136 * a44)) + (m0146 * a34)) - (m0346 * a14)) + (m1346 * a04)); - double m01356; - m01356 = (((((m0135 * a64) - (m0136 * a54)) + (m0156 * a34)) - (m0356 * a14)) + (m1356 * a04)); - double m01456; - m01456 = (((((m0145 * a64) - (m0146 * a54)) + (m0156 * a44)) - (m0456 * a14)) + (m1456 * a04)); - double m02345; - m02345 = (((((m0234 * a54) - (m0235 * a44)) + (m0245 * a34)) - (m0345 * a24)) + (m2345 * a04)); - double m02346; - m02346 = (((((m0234 * a64) - (m0236 * a44)) + (m0246 * a34)) - (m0346 * a24)) + (m2346 * a04)); - double m02356; - m02356 = (((((m0235 * a64) - (m0236 * a54)) + (m0256 * a34)) - (m0356 * a24)) + (m2356 * a04)); - double m02456; - m02456 = (((((m0245 * a64) - (m0246 * a54)) + (m0256 * a44)) - (m0456 * a24)) + (m2456 * a04)); - double m03456; - m03456 = (((((m0345 * a64) - (m0346 * a54)) + (m0356 * a44)) - (m0456 * a34)) + (m3456 * a04)); - double m12345; - m12345 = (((((m1234 * a54) - (m1235 * a44)) + (m1245 * a34)) - (m1345 * a24)) + (m2345 * a14)); - double m12346; - m12346 = (((((m1234 * a64) - (m1236 * a44)) + (m1246 * a34)) - (m1346 * a24)) + (m2346 * a14)); - double m12356; - m12356 = (((((m1235 * a64) - (m1236 * a54)) + (m1256 * a34)) - (m1356 * a24)) + (m2356 * a14)); - double m12456; - m12456 = (((((m1245 * a64) - (m1246 * a54)) + (m1256 * a44)) - (m1456 * a24)) + (m2456 * a14)); - double m13456; - m13456 = (((((m1345 * a64) - (m1346 * a54)) + (m1356 * a44)) - (m1456 * a34)) + (m3456 * a14)); - double m23456; - m23456 = (((((m2345 * a64) - (m2346 * a54)) + (m2356 * a44)) - (m2456 * a34)) + (m3456 * a24)); - double m012345; - m012345 = ((((((m01234 * a55) - (m01235 * a45)) + (m01245 * a35)) - (m01345 * a25)) + (m02345 * a15)) - (m12345 * a05)); - double m012346; - m012346 = ((((((m01234 * a65) - (m01236 * a45)) + (m01246 * a35)) - (m01346 * a25)) + (m02346 * a15)) - (m12346 * a05)); - double m012356; - m012356 = ((((((m01235 * a65) - (m01236 * a55)) + (m01256 * a35)) - (m01356 * a25)) + (m02356 * a15)) - (m12356 * a05)); - double m012456; - m012456 = ((((((m01245 * a65) - (m01246 * a55)) + (m01256 * a45)) - (m01456 * a25)) + (m02456 * a15)) - (m12456 * a05)); - double m013456; - m013456 = ((((((m01345 * a65) - (m01346 * a55)) + (m01356 * a45)) - (m01456 * a35)) + (m03456 * a15)) - (m13456 * a05)); - double m023456; - m023456 = ((((((m02345 * a65) - (m02346 * a55)) + (m02356 * a45)) - (m02456 * a35)) + (m03456 * a25)) - (m23456 * a05)); - double m123456; - m123456 = ((((((m12345 * a65) - (m12346 * a55)) + (m12356 * a45)) - (m12456 * a35)) + (m13456 * a25)) - (m23456 * a15)); - double m0123456; - m0123456 = (((((((m012345 * a66) - (m012346 * a56)) + (m012356 * a46)) - (m012456 * a36)) + (m013456 * a26)) - (m023456 * a16)) + (m123456 * a06)); + m56 = (v5 - p5); + + double det = determinant(m01, m02, m03, m04, m05, m06, + m11, m12, m13, m14, m15, m16, + m21, m22, m23, m24, m25, m26, + m31, m32, m33, m34, m35, m36, + m41, m42, m43, m44, m45, m46, + m51, m52, m53, m54, m55, m56); + return sign(det); +} + +//===========generated ================== + +inline int orientationC5( double p0, double p1, double p2, double p3, double p4, double p5, double q0, double q1, double q2, double q3, double q4, double q5, double r0, double r1, double r2, double r3, double r4, double r5, double s0, double s1, double s2, double s3, double s4, double s5, double t0, double t1, double t2, double t3, double t4, double t5, double u0, double u1, double u2, double u3, double u4, double u5, double v0, double v1, double v2, double v3, double v4, double v5) { + double m01; + m01 = (q0 - p0); + double m02; + m02 = (r0 - p0); + double m03; + m03 = (s0 - p0); + double m04; + m04 = (t0 - p0); + double m05; + m05 = (u0 - p0); + double m06; + m06 = (v0 - p0); + double m11; + m11 = (q1 - p1); + double m12; + m12 = (r1 - p1); + double m13; + m13 = (s1 - p1); + double m14; + m14 = (t1 - p1); + double m15; + m15 = (u1 - p1); + double m16; + m16 = (v1 - p1); + double m21; + m21 = (q2 - p2); + double m22; + m22 = (r2 - p2); + double m23; + m23 = (s2 - p2); + double m24; + m24 = (t2 - p2); + double m25; + m25 = (u2 - p2); + double m26; + m26 = (v2 - p2); + double m31; + m31 = (q3 - p3); + double m32; + m32 = (r3 - p3); + double m33; + m33 = (s3 - p3); + double m34; + m34 = (t3 - p3); + double m35; + m35 = (u3 - p3); + double m36; + m36 = (v3 - p3); + double m41; + m41 = (q4 - p4); + double m42; + m42 = (r4 - p4); + double m43; + m43 = (s4 - p4); + double m44; + m44 = (t4 - p4); + double m45; + m45 = (u4 - p4); + double m46; + m46 = (v4 - p4); + double m51; + m51 = (q5 - p5); + double m52; + m52 = (r5 - p5); + double m53; + m53 = (s5 - p5); + double m54; + m54 = (t5 - p5); + double m55; + m55 = (u5 - p5); + double m56; + m56 = (v5 - p5); + double det; + det = determinant( m01, m02, m03, m04, m05, m06, m11, m12, m13, m14, m15, m16, m21, m22, m23, m24, m25, m26, m31, m32, m33, m34, m35, m36, m41, m42, m43, m44, m45, m46, m51, m52, m53, m54, m55, m56 ); int int_tmp_result; double eps; - double max1 = fabs(a02); - if( (max1 < fabs(a12)) ) + double max1 = fabs(m01); + if( (max1 < fabs(m02)) ) { - max1 = fabs(a12); + max1 = fabs(m02); } - if( (max1 < fabs(a22)) ) + if( (max1 < fabs(m11)) ) { - max1 = fabs(a22); + max1 = fabs(m11); } - if( (max1 < fabs(a32)) ) + if( (max1 < fabs(m12)) ) { - max1 = fabs(a32); + max1 = fabs(m12); } - if( (max1 < fabs(a42)) ) + if( (max1 < fabs(m21)) ) { - max1 = fabs(a42); + max1 = fabs(m21); } - if( (max1 < fabs(a52)) ) + if( (max1 < fabs(m22)) ) { - max1 = fabs(a52); + max1 = fabs(m22); } - if( (max1 < fabs(a62)) ) + if( (max1 < fabs(m31)) ) { - max1 = fabs(a62); + max1 = fabs(m31); } - double max2 = fabs(a03); - if( (max2 < fabs(a13)) ) + if( (max1 < fabs(m32)) ) { - max2 = fabs(a13); + max1 = fabs(m32); } - if( (max2 < fabs(a23)) ) + if( (max1 < fabs(m41)) ) { - max2 = fabs(a23); + max1 = fabs(m41); } - if( (max2 < fabs(a33)) ) + if( (max1 < fabs(m42)) ) { - max2 = fabs(a33); + max1 = fabs(m42); } - if( (max2 < fabs(a43)) ) + double max2 = fabs(m03); + if( (max2 < fabs(m11)) ) { - max2 = fabs(a43); + max2 = fabs(m11); } - if( (max2 < fabs(a53)) ) + if( (max2 < fabs(m12)) ) { - max2 = fabs(a53); + max2 = fabs(m12); } - if( (max2 < fabs(a63)) ) + if( (max2 < fabs(m13)) ) { - max2 = fabs(a63); + max2 = fabs(m13); } - double max3 = fabs(a04); - if( (max3 < fabs(a14)) ) + if( (max2 < fabs(m21)) ) { - max3 = fabs(a14); + max2 = fabs(m21); } - if( (max3 < fabs(a24)) ) + if( (max2 < fabs(m22)) ) { - max3 = fabs(a24); + max2 = fabs(m22); } - if( (max3 < fabs(a34)) ) + if( (max2 < fabs(m23)) ) { - max3 = fabs(a34); + max2 = fabs(m23); } - if( (max3 < fabs(a44)) ) + if( (max2 < fabs(m31)) ) { - max3 = fabs(a44); + max2 = fabs(m31); } - if( (max3 < fabs(a54)) ) + if( (max2 < fabs(m32)) ) { - max3 = fabs(a54); + max2 = fabs(m32); } - if( (max3 < fabs(a64)) ) + if( (max2 < fabs(m33)) ) { - max3 = fabs(a64); + max2 = fabs(m33); } - double max4 = fabs(a05); - if( (max4 < fabs(a15)) ) + if( (max2 < fabs(m41)) ) { - max4 = fabs(a15); + max2 = fabs(m41); } - if( (max4 < fabs(a25)) ) + if( (max2 < fabs(m42)) ) { - max4 = fabs(a25); + max2 = fabs(m42); } - if( (max4 < fabs(a35)) ) + if( (max2 < fabs(m51)) ) { - max4 = fabs(a35); + max2 = fabs(m51); } - if( (max4 < fabs(a45)) ) + if( (max2 < fabs(m52)) ) { - max4 = fabs(a45); + max2 = fabs(m52); } - if( (max4 < fabs(a55)) ) + double max3 = fabs(m04); + if( (max3 < fabs(m14)) ) { - max4 = fabs(a55); + max3 = fabs(m14); } - if( (max4 < fabs(a65)) ) + if( (max3 < fabs(m24)) ) { - max4 = fabs(a65); + max3 = fabs(m24); } - double max5 = fabs(a06); - if( (max5 < fabs(a16)) ) + if( (max3 < fabs(m34)) ) { - max5 = fabs(a16); + max3 = fabs(m34); } - if( (max5 < fabs(a26)) ) + if( (max3 < fabs(m44)) ) { - max5 = fabs(a26); + max3 = fabs(m44); } - if( (max5 < fabs(a36)) ) + if( (max3 < fabs(m54)) ) { - max5 = fabs(a36); + max3 = fabs(m54); } - if( (max5 < fabs(a46)) ) + double max4 = fabs(m05); + if( (max4 < fabs(m15)) ) { - max5 = fabs(a46); + max4 = fabs(m15); } - if( (max5 < fabs(a56)) ) + if( (max4 < fabs(m25)) ) { - max5 = fabs(a56); + max4 = fabs(m25); } - if( (max5 < fabs(a66)) ) + if( (max4 < fabs(m35)) ) { - max5 = fabs(a66); + max4 = fabs(m35); } - double max6 = fabs(m01); - if( (max6 < fabs(m02)) ) + if( (max4 < fabs(m45)) ) { - max6 = fabs(m02); + max4 = fabs(m45); } - if( (max6 < fabs(m03)) ) + if( (max4 < fabs(m55)) ) { - max6 = fabs(m03); + max4 = fabs(m55); } - if( (max6 < fabs(m04)) ) + double max5 = fabs(m06); + if( (max5 < fabs(m16)) ) { - max6 = fabs(m04); + max5 = fabs(m16); } - if( (max6 < fabs(m05)) ) + if( (max5 < fabs(m26)) ) { - max6 = fabs(m05); + max5 = fabs(m26); } - if( (max6 < fabs(m06)) ) + if( (max5 < fabs(m36)) ) { - max6 = fabs(m06); + max5 = fabs(m36); } - if( (max6 < fabs(m12)) ) + if( (max5 < fabs(m46)) ) { - max6 = fabs(m12); + max5 = fabs(m46); } - if( (max6 < fabs(m13)) ) + if( (max5 < fabs(m56)) ) { - max6 = fabs(m13); + max5 = fabs(m56); } - if( (max6 < fabs(m14)) ) + double max6 = fabs(m13); + if( (max6 < fabs(m21)) ) { - max6 = fabs(m14); + max6 = fabs(m21); } - if( (max6 < fabs(m15)) ) + if( (max6 < fabs(m22)) ) { - max6 = fabs(m15); - } - if( (max6 < fabs(m16)) ) - { - max6 = fabs(m16); + max6 = fabs(m22); } if( (max6 < fabs(m23)) ) { max6 = fabs(m23); } - if( (max6 < fabs(m24)) ) + if( (max6 < fabs(m31)) ) { - max6 = fabs(m24); + max6 = fabs(m31); } - if( (max6 < fabs(m25)) ) + if( (max6 < fabs(m32)) ) { - max6 = fabs(m25); + max6 = fabs(m32); } - if( (max6 < fabs(m26)) ) + if( (max6 < fabs(m33)) ) { - max6 = fabs(m26); + max6 = fabs(m33); } - if( (max6 < fabs(m34)) ) + if( (max6 < fabs(m41)) ) { - max6 = fabs(m34); + max6 = fabs(m41); } - if( (max6 < fabs(m35)) ) + if( (max6 < fabs(m42)) ) { - max6 = fabs(m35); + max6 = fabs(m42); } - if( (max6 < fabs(m36)) ) + if( (max6 < fabs(m43)) ) { - max6 = fabs(m36); + max6 = fabs(m43); } - if( (max6 < fabs(m45)) ) + if( (max6 < fabs(m51)) ) { - max6 = fabs(m45); + max6 = fabs(m51); } - if( (max6 < fabs(m46)) ) + if( (max6 < fabs(m52)) ) { - max6 = fabs(m46); + max6 = fabs(m52); } - if( (max6 < fabs(m56)) ) + if( (max6 < fabs(m53)) ) { - max6 = fabs(m56); + max6 = fabs(m53); } double lower_bound_1; double upper_bound_1; @@ -519,7 +513,7 @@ inline int orientation( double a01, double a02, double a03, double a04, double a upper_bound_1 = max4; } } - if( (lower_bound_1 < 3.98278627399642140002e-50) ) + if( (lower_bound_1 < 4.82472686053427214432e-50) ) { return FPG_UNCERTAIN_VALUE; } @@ -529,14 +523,14 @@ inline int orientation( double a01, double a02, double a03, double a04, double a { return FPG_UNCERTAIN_VALUE; } - eps = (5.57471180948088246730e-12 * (((((max6 * max1) * max2) * max3) * max4) * max5)); - if( (m0123456 > eps) ) + eps = (1.76403842114300859158e-12 * (((((max1 * max2) * max6) * max3) * max4) * max5)); + if( (det > eps) ) { int_tmp_result = 1; } else { - if( (m0123456 < -eps) ) + if( (det < -eps) ) { int_tmp_result = -1; } From 68d2be27986bae0c2a97ff02cbb37976f697442e Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Tue, 1 Jul 2025 17:28:34 +0100 Subject: [PATCH 33/49] Less calls to abs() --- .../include/CGAL/NewKernel_d/orientationC4.h | 142 +++++++----------- 1 file changed, 54 insertions(+), 88 deletions(-) diff --git a/NewKernel_d/include/CGAL/NewKernel_d/orientationC4.h b/NewKernel_d/include/CGAL/NewKernel_d/orientationC4.h index 1c6cce210e0..5a921ab6473 100644 --- a/NewKernel_d/include/CGAL/NewKernel_d/orientationC4.h +++ b/NewKernel_d/include/CGAL/NewKernel_d/orientationC4.h @@ -115,94 +115,60 @@ inline int orientationC4( double p0, double p1, double p2, double p3, double q0, det = determinant( m01, m02, m03, m04, m11, m12, m13, m14, m21, m22, m23, m24, m31, m32, m33, m34 ); int int_tmp_result; double eps; - double max1 = fabs(m01); - if( (max1 < fabs(m02)) ) - { - max1 = fabs(m02); - } - if( (max1 < fabs(m03)) ) - { - max1 = fabs(m03); - } - if( (max1 < fabs(m11)) ) - { - max1 = fabs(m11); - } - if( (max1 < fabs(m12)) ) - { - max1 = fabs(m12); - } - if( (max1 < fabs(m13)) ) - { - max1 = fabs(m13); - } - if( (max1 < fabs(m23)) ) - { - max1 = fabs(m23); - } - double max2 = fabs(m01); - if( (max2 < fabs(m02)) ) - { - max2 = fabs(m02); - } - if( (max2 < fabs(m11)) ) - { - max2 = fabs(m11); - } - if( (max2 < fabs(m12)) ) - { - max2 = fabs(m12); - } - if( (max2 < fabs(m21)) ) - { - max2 = fabs(m21); - } - if( (max2 < fabs(m22)) ) - { - max2 = fabs(m22); - } - if( (max2 < fabs(m23)) ) - { - max2 = fabs(m23); - } - if( (max2 < fabs(m33)) ) - { - max2 = fabs(m33); - } - double max3 = fabs(m04); - if( (max3 < fabs(m14)) ) - { - max3 = fabs(m14); - } - if( (max3 < fabs(m24)) ) - { - max3 = fabs(m24); - } - if( (max3 < fabs(m34)) ) - { - max3 = fabs(m34); - } - double max4 = fabs(m11); - if( (max4 < fabs(m12)) ) - { - max4 = fabs(m12); - } - if( (max4 < fabs(m21)) ) - { - max4 = fabs(m21); - } - if( (max4 < fabs(m22)) ) - { - max4 = fabs(m22); - } - if( (max4 < fabs(m31)) ) - { - max4 = fabs(m31); - } - if( (max4 < fabs(m32)) ) - { - max4 = fabs(m32); - } + double max1 = CGAL::abs(m01); + double am = CGAL::abs(m02); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m03); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m11); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m12); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m13); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m23); + if( (max1 < am) ) { max1 = am; } + + + double max2 = CGAL::abs(m01); + am = CGAL::abs(m02); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m11); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m12); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m21); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m22); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m23); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m33); + if( (max2 < am) ) { max2 = am; } + + + double max3 = CGAL::abs(m04); + am = CGAL::abs(m14); + if( (max3 < am) ) { max3 = am; } + am = CGAL::abs(m24); + if( (max3 < am) ) { max3 = am; } + am = CGAL::abs(m34); + if( (max3 < am) ) { max3 = am; } + + + double max4 = CGAL::abs(m11); + am = CGAL::abs(m12); + if( (max4 < am) ) { max4 = am; } + am = CGAL::abs(m21); + if( (max4 < am) ) { max4 = am; } + am = CGAL::abs(m22); + if( (max4 < am) ) { max4 = am; } + am = CGAL::abs(m31); + if( (max4 < am) ) { max4 = am; } + am = CGAL::abs(m32); + if( (max4 < am) ) { max4 = am; } + + double lower_bound_1; double upper_bound_1; lower_bound_1 = max1; From 63cc54c36701ed407a801cd975fcd7736af0755e Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Tue, 1 Jul 2025 18:15:07 +0100 Subject: [PATCH 34/49] Less abs() --- .../include/CGAL/NewKernel_d/orientationC5.h | 223 +++++------- .../include/CGAL/NewKernel_d/orientationC6.h | 321 +++++++----------- 2 files changed, 201 insertions(+), 343 deletions(-) diff --git a/NewKernel_d/include/CGAL/NewKernel_d/orientationC5.h b/NewKernel_d/include/CGAL/NewKernel_d/orientationC5.h index 981395fd978..692bad04bfe 100644 --- a/NewKernel_d/include/CGAL/NewKernel_d/orientationC5.h +++ b/NewKernel_d/include/CGAL/NewKernel_d/orientationC5.h @@ -167,147 +167,88 @@ inline int orientationC5( double p0, double p1, double p2, double p3, double p4, det = determinant( m01, m02, m03, m04, m05, m11, m12, m13, m14, m15, m21, m22, m23, m24, m25, m31, m32, m33, m34, m35, m41, m42, m43, m44, m45 ); int int_tmp_result; double eps; - double max1 = fabs(m01); - if( (max1 < fabs(m02)) ) - { - max1 = fabs(m02); - } - if( (max1 < fabs(m03)) ) - { - max1 = fabs(m03); - } - if( (max1 < fabs(m11)) ) - { - max1 = fabs(m11); - } - if( (max1 < fabs(m12)) ) - { - max1 = fabs(m12); - } - if( (max1 < fabs(m13)) ) - { - max1 = fabs(m13); - } - if( (max1 < fabs(m21)) ) - { - max1 = fabs(m21); - } - if( (max1 < fabs(m22)) ) - { - max1 = fabs(m22); - } - if( (max1 < fabs(m23)) ) - { - max1 = fabs(m23); - } - if( (max1 < fabs(m33)) ) - { - max1 = fabs(m33); - } - double max2 = fabs(m01); - if( (max2 < fabs(m02)) ) - { - max2 = fabs(m02); - } - if( (max2 < fabs(m11)) ) - { - max2 = fabs(m11); - } - if( (max2 < fabs(m12)) ) - { - max2 = fabs(m12); - } - if( (max2 < fabs(m21)) ) - { - max2 = fabs(m21); - } - if( (max2 < fabs(m22)) ) - { - max2 = fabs(m22); - } - if( (max2 < fabs(m23)) ) - { - max2 = fabs(m23); - } - if( (max2 < fabs(m31)) ) - { - max2 = fabs(m31); - } - if( (max2 < fabs(m32)) ) - { - max2 = fabs(m32); - } - if( (max2 < fabs(m33)) ) - { - max2 = fabs(m33); - } - if( (max2 < fabs(m43)) ) - { - max2 = fabs(m43); - } - double max3 = fabs(m04); - if( (max3 < fabs(m14)) ) - { - max3 = fabs(m14); - } - if( (max3 < fabs(m24)) ) - { - max3 = fabs(m24); - } - if( (max3 < fabs(m34)) ) - { - max3 = fabs(m34); - } - if( (max3 < fabs(m44)) ) - { - max3 = fabs(m44); - } - double max4 = fabs(m05); - if( (max4 < fabs(m15)) ) - { - max4 = fabs(m15); - } - if( (max4 < fabs(m25)) ) - { - max4 = fabs(m25); - } - if( (max4 < fabs(m35)) ) - { - max4 = fabs(m35); - } - if( (max4 < fabs(m45)) ) - { - max4 = fabs(m45); - } - double max5 = fabs(m11); - if( (max5 < fabs(m12)) ) - { - max5 = fabs(m12); - } - if( (max5 < fabs(m21)) ) - { - max5 = fabs(m21); - } - if( (max5 < fabs(m22)) ) - { - max5 = fabs(m22); - } - if( (max5 < fabs(m31)) ) - { - max5 = fabs(m31); - } - if( (max5 < fabs(m32)) ) - { - max5 = fabs(m32); - } - if( (max5 < fabs(m41)) ) - { - max5 = fabs(m41); - } - if( (max5 < fabs(m42)) ) - { - max5 = fabs(m42); - } + double max1 = CGAL::abs(m01); + double am = CGAL::abs(m02); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m03); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m11); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m12); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m13); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m21); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m22); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m23); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m33); + if( (max1 < am) ) { max1 = am; } + + + double max2 = CGAL::abs(m01); + am = CGAL::abs(m02); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m11); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m12); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m21); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m22); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m23); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m31); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m32); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m33); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m43); + if( (max2 < am) ) { max2 = am; } + + + double max3 = CGAL::abs(m04); + am = CGAL::abs(m14); + if( (max3 < am) ) { max3 = am; } + am = CGAL::abs(m24); + if( (max3 < am) ) { max3 = am; } + am = CGAL::abs(m34); + if( (max3 < am) ) { max3 = am; } + am = CGAL::abs(m44); + if( (max3 < am) ) { max3 = am; } + + + double max4 = CGAL::abs(m05); + am = CGAL::abs(m15); + if( (max4 < am) ) { max4 = am; } + am = CGAL::abs(m25); + if( (max4 < am) ) { max4 = am; } + am = CGAL::abs(m35); + if( (max4 < am) ) { max4 = am; } + am = CGAL::abs(m45); + if( (max4 < am) ) { max4 = am; } + + + double max5 = CGAL::abs(m11); + am = CGAL::abs(m12); + if( (max5 < am) ) { max5 = am; } + am = CGAL::abs(m21); + if( (max5 < am) ) { max5 = am; } + am = CGAL::abs(m22); + if( (max5 < am) ) { max5 = am; } + am = CGAL::abs(m31); + if( (max5 < am) ) { max5 = am; } + am = CGAL::abs(m32); + if( (max5 < am) ) { max5 = am; } + am = CGAL::abs(m41); + if( (max5 < am) ) { max5 = am; } + am = CGAL::abs(m42); + if( (max5 < am) ) { max5 = am; } + double lower_bound_1; double upper_bound_1; lower_bound_1 = max5; diff --git a/NewKernel_d/include/CGAL/NewKernel_d/orientationC6.h b/NewKernel_d/include/CGAL/NewKernel_d/orientationC6.h index 0c1792230a9..a9654bcd781 100644 --- a/NewKernel_d/include/CGAL/NewKernel_d/orientationC6.h +++ b/NewKernel_d/include/CGAL/NewKernel_d/orientationC6.h @@ -252,208 +252,125 @@ inline int orientationC5( double p0, double p1, double p2, double p3, double p4, det = determinant( m01, m02, m03, m04, m05, m06, m11, m12, m13, m14, m15, m16, m21, m22, m23, m24, m25, m26, m31, m32, m33, m34, m35, m36, m41, m42, m43, m44, m45, m46, m51, m52, m53, m54, m55, m56 ); int int_tmp_result; double eps; - double max1 = fabs(m01); - if( (max1 < fabs(m02)) ) - { - max1 = fabs(m02); - } - if( (max1 < fabs(m11)) ) - { - max1 = fabs(m11); - } - if( (max1 < fabs(m12)) ) - { - max1 = fabs(m12); - } - if( (max1 < fabs(m21)) ) - { - max1 = fabs(m21); - } - if( (max1 < fabs(m22)) ) - { - max1 = fabs(m22); - } - if( (max1 < fabs(m31)) ) - { - max1 = fabs(m31); - } - if( (max1 < fabs(m32)) ) - { - max1 = fabs(m32); - } - if( (max1 < fabs(m41)) ) - { - max1 = fabs(m41); - } - if( (max1 < fabs(m42)) ) - { - max1 = fabs(m42); - } - double max2 = fabs(m03); - if( (max2 < fabs(m11)) ) - { - max2 = fabs(m11); - } - if( (max2 < fabs(m12)) ) - { - max2 = fabs(m12); - } - if( (max2 < fabs(m13)) ) - { - max2 = fabs(m13); - } - if( (max2 < fabs(m21)) ) - { - max2 = fabs(m21); - } - if( (max2 < fabs(m22)) ) - { - max2 = fabs(m22); - } - if( (max2 < fabs(m23)) ) - { - max2 = fabs(m23); - } - if( (max2 < fabs(m31)) ) - { - max2 = fabs(m31); - } - if( (max2 < fabs(m32)) ) - { - max2 = fabs(m32); - } - if( (max2 < fabs(m33)) ) - { - max2 = fabs(m33); - } - if( (max2 < fabs(m41)) ) - { - max2 = fabs(m41); - } - if( (max2 < fabs(m42)) ) - { - max2 = fabs(m42); - } - if( (max2 < fabs(m51)) ) - { - max2 = fabs(m51); - } - if( (max2 < fabs(m52)) ) - { - max2 = fabs(m52); - } - double max3 = fabs(m04); - if( (max3 < fabs(m14)) ) - { - max3 = fabs(m14); - } - if( (max3 < fabs(m24)) ) - { - max3 = fabs(m24); - } - if( (max3 < fabs(m34)) ) - { - max3 = fabs(m34); - } - if( (max3 < fabs(m44)) ) - { - max3 = fabs(m44); - } - if( (max3 < fabs(m54)) ) - { - max3 = fabs(m54); - } - double max4 = fabs(m05); - if( (max4 < fabs(m15)) ) - { - max4 = fabs(m15); - } - if( (max4 < fabs(m25)) ) - { - max4 = fabs(m25); - } - if( (max4 < fabs(m35)) ) - { - max4 = fabs(m35); - } - if( (max4 < fabs(m45)) ) - { - max4 = fabs(m45); - } - if( (max4 < fabs(m55)) ) - { - max4 = fabs(m55); - } - double max5 = fabs(m06); - if( (max5 < fabs(m16)) ) - { - max5 = fabs(m16); - } - if( (max5 < fabs(m26)) ) - { - max5 = fabs(m26); - } - if( (max5 < fabs(m36)) ) - { - max5 = fabs(m36); - } - if( (max5 < fabs(m46)) ) - { - max5 = fabs(m46); - } - if( (max5 < fabs(m56)) ) - { - max5 = fabs(m56); - } - double max6 = fabs(m13); - if( (max6 < fabs(m21)) ) - { - max6 = fabs(m21); - } - if( (max6 < fabs(m22)) ) - { - max6 = fabs(m22); - } - if( (max6 < fabs(m23)) ) - { - max6 = fabs(m23); - } - if( (max6 < fabs(m31)) ) - { - max6 = fabs(m31); - } - if( (max6 < fabs(m32)) ) - { - max6 = fabs(m32); - } - if( (max6 < fabs(m33)) ) - { - max6 = fabs(m33); - } - if( (max6 < fabs(m41)) ) - { - max6 = fabs(m41); - } - if( (max6 < fabs(m42)) ) - { - max6 = fabs(m42); - } - if( (max6 < fabs(m43)) ) - { - max6 = fabs(m43); - } - if( (max6 < fabs(m51)) ) - { - max6 = fabs(m51); - } - if( (max6 < fabs(m52)) ) - { - max6 = fabs(m52); - } - if( (max6 < fabs(m53)) ) - { - max6 = fabs(m53); - } + double max1 = CGAL::abs(m01); + double am = CGAL::abs(m02); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m11); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m12); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m21); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m22); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m31); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m32); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m41); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m42); + if( (max1 < am) ) { max1 = am; } + + + double max2 = CGAL::abs(m03); + am = CGAL::abs(m11); + + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m12); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m13); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m21); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m22); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m23); + + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m31); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m32); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m33); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m41); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m42); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m43); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m51); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m52); + if( (max2 < am) ) { max2 = am; } + + + double max3 = CGAL::abs(m04); + am = CGAL::abs(m14); + if( (max3 < am) ) { max3 = am; } + am = CGAL::abs(m24); + if( (max3 < am) ) { max3 = am; } + am = CGAL::abs(m34); + if( (max3 < am) ) { max3 = am; } + am = CGAL::abs(m44); + if( (max3 < am) ) { max3 = am; } + am = CGAL::abs(m54); + if( (max3 < am) ) { max3 = am; } + am = CGAL::abs(m05); + if( (max3 < am) ) { max3 = am; } + am = CGAL::abs(m15); + if( (max3 < am) ) { max3 = am; } + am = CGAL::abs(m25); + if( (max3 < am) ) { max3 = am; } + am = CGAL::abs(m35); + if( (max3 < am) ) { max3 = am; } + am = CGAL::abs(m45); + if( (max3 < am) ) { max3 = am; } + am = CGAL::abs(m55); + if( (max3 < am) ) { max3 = am; } + + d + double max5 = CGAL::abs(m06); + am = CGAL::abs(m16); + if( (max5 < am) ) { max5 = am; } + am = CGAL::abs(m26); + if( (max5 < am) ) { max5 = am; } + am = CGAL::abs(m36); + if( (max5 < am) ) { max5 = am; } + am = CGAL::abs(m46); + if( (max5 < am) ) { max5 = am; } + am = CGAL::abs(m56); + if( (max5 < am) ) { max5 = am; } + + + double max6 = CGAL::abs(m13); + am = CGAL::abs(m21); + if( (max6 < am) ) { max6 = am; } + am = CGAL::abs(m22); + if( (max6 < am) ) { max6 = am; } + am = CGAL::abs(m23); + if( (max6 < am) ) { max6 = am; } + am = CGAL::abs(m31); + if( (max6 < am) ) { max6 = am; } + am = CGAL::abs(m32); + if( (max6 < am) ) { max6 = am; } + am = CGAL::abs(m33); + if( (max6 < am) ) { max6 = am; } + am = CGAL::abs(m41); + if( (max6 < am) ) { max6 = am; } + am = CGAL::abs(m42); + if( (max6 < am) ) { max6 = am; } + am = CGAL::abs(m43); + if( (max6 < am) ) { max6 = am; } + am = CGAL::abs(m51); + if( (max6 < am) ) { max6 = am; } + am = CGAL::abs(m52); + if( (max6 < am) ) { max6 = am; } + am = CGAL::abs(m53); + if( (max6 < am) ) { max6 = am; } + + double lower_bound_1; double upper_bound_1; lower_bound_1 = max6; From 496239a0ed62022154720a48ba3cf1007f285629 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Wed, 2 Jul 2025 10:32:21 +0100 Subject: [PATCH 35/49] Integrate generated files --- .../internal/Static_filters/Orientation_4.h | 226 ++++++ .../internal/Static_filters/Orientation_5.h | 372 ++++------ .../internal/Static_filters/Orientation_6.h | 701 +++++------------- .../NewKernel_d/Cartesian_static_filters.h | 27 + .../include/CGAL/NewKernel_d/orientationC6.h | 30 +- .../benchmark/Triangulation/CMakeLists.txt | 2 + .../benchmark/Triangulation/bench4d.cpp | 62 ++ 7 files changed, 656 insertions(+), 764 deletions(-) create mode 100644 Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_4.h create mode 100644 Triangulation/benchmark/Triangulation/bench4d.cpp diff --git a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_4.h b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_4.h new file mode 100644 index 00000000000..a1cc4d494a1 --- /dev/null +++ b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_4.h @@ -0,0 +1,226 @@ +// Copyright (c) 2025 GeometryFactory (France). +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org) +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial +// +// +// Author(s) : Andreas Fabri + +#ifndef CGAL_INTERNAL_STATIC_FILTERS_ORIENTATION_4_H +#define CGAL_INTERNAL_STATIC_FILTERS_ORIENTATION_4_H + +#include +#include +#include + +namespace CGAL { namespace internal { namespace Static_filters_predicates { + + + +template < typename K_base > +class Orientation_4 + : public K_base::Orientation_4 +{ + typedef typename K_base::Orientation Orientation; + typedef typename K_base::Point_4 Point_4; + typedef typename K_base::Orientation_4 Base; + +public: + using Base::operator(); + + Orientation + operator()(const Point_4 &p, const Point_4 &q, + const Point_4 &r, const Point_4 &s, + const Point_4 &t) const + { + CGAL_BRANCH_PROFILER_3("semi-static failures/attempts/calls to : Orientation_4", tmp); + + double p0, p1, p2, p3, p4, q0, q1, q2, q3, q4, r0, r1, r2, r3, r4, s0, s1, s2, s3, s4, t0, t1, t2, t3, t4; + + if (fit_in_double(p.c0(), p0) && fit_in_double(p.c1(), p1) && + fit_in_double(p.c2(), p2) && fit_in_double(p.c3(), p3) && + fit_in_double(p.c4(), p4) && + fit_in_double(q.c0(), q0) && fit_in_double(q.c1(), q1) && + fit_in_double(q.c2(), q2) && fit_in_double(q.c3(), q3) && + fit_in_double(q.c4(), q4) && + fit_in_double(r.c0(), r0) && fit_in_double(r.c1(), r1) && + fit_in_double(r.c2(), r2) && fit_in_double(r.c3(), r3) && + fit_in_double(r.c4(), r4) && + fit_in_double(s.c0(), s0) && fit_in_double(s.c1(), s1) && + fit_in_double(s.c2(), s2) && fit_in_double(s.c3(), s3) && + fit_in_double(s.c4(), s4) && + fit_in_double(t.c0(), t0) && fit_in_double(t.c1(), t1) && + fit_in_double(t.c2(), t2) && fit_in_double(t.c3(), t3) && + fit_in_double(t.c4(), t4) ) + { + CGAL_assertion_code(Orientation should_be = Base::operator()(p, q, r, s, t)); +double m01; + m01 = (q0 - p0); + double m02; + m02 = (r0 - p0); + double m03; + m03 = (s0 - p0); + double m04; + m04 = (t0 - p0); + double m11; + m11 = (q1 - p1); + double m12; + m12 = (r1 - p1); + double m13; + m13 = (s1 - p1); + double m14; + m14 = (t1 - p1); + double m21; + m21 = (q2 - p2); + double m22; + m22 = (r2 - p2); + double m23; + m23 = (s2 - p2); + double m24; + m24 = (t2 - p2); + double m31; + m31 = (q3 - p3); + double m32; + m32 = (r3 - p3); + double m33; + m33 = (s3 - p3); + double m34; + m34 = (t3 - p3); + double det; + det = determinant( m01, m02, m03, m04, m11, m12, m13, m14, m21, m22, m23, m24, m31, m32, m33, m34 ); + int int_tmp_result; + double eps; + double max1 = CGAL::abs(m01); + double am = CGAL::abs(m02); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m03); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m11); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m12); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m13); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m23); + if( (max1 < am) ) { max1 = am; } + + + double max2 = CGAL::abs(m01); + am = CGAL::abs(m02); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m11); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m12); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m21); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m22); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m23); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m33); + if( (max2 < am) ) { max2 = am; } + + + double max3 = CGAL::abs(m04); + am = CGAL::abs(m14); + if( (max3 < am) ) { max3 = am; } + am = CGAL::abs(m24); + if( (max3 < am) ) { max3 = am; } + am = CGAL::abs(m34); + if( (max3 < am) ) { max3 = am; } + + + double max4 = CGAL::abs(m11); + am = CGAL::abs(m12); + if( (max4 < am) ) { max4 = am; } + am = CGAL::abs(m21); + if( (max4 < am) ) { max4 = am; } + am = CGAL::abs(m22); + if( (max4 < am) ) { max4 = am; } + am = CGAL::abs(m31); + if( (max4 < am) ) { max4 = am; } + am = CGAL::abs(m32); + if( (max4 < am) ) { max4 = am; } + + + double lower_bound_1; + double upper_bound_1; + lower_bound_1 = max1; + upper_bound_1 = max1; + if( (max2 < lower_bound_1) ) + { + lower_bound_1 = max2; + } + else + { + if( (max2 > upper_bound_1) ) + { + upper_bound_1 = max2; + } + } + if( (max3 < lower_bound_1) ) + { + lower_bound_1 = max3; + } + else + { + if( (max3 > upper_bound_1) ) + { + upper_bound_1 = max3; + } + } + if( (max4 < lower_bound_1) ) + { + lower_bound_1 = max4; + } + else + { + if( (max4 > upper_bound_1) ) + { + upper_bound_1 = max4; + } + } + if( (lower_bound_1 < 2.89273249588395272840e-74) ) + { + return Base::operator()(p, q, r, s, t); + } + else + { + if( (upper_bound_1 > 7.23700557733225900010e+75) ) + { + return Base::operator()(p, q, r, s, t); + } + eps = (3.17768858673611327578e-14 * (((max4 * max2) * max1) * max3)); + if( (det > eps) ) + { + CGAL_assertion(should_be == POSITIVE); + return POSITIVE; + } + else + { + if( (det < -eps) ) + { + CGAL_assertion(should_be == NEGATIVE); + return NEGATIVE; + } + else + { + return Base::operator()(p, q, r, s, t); + } + } + } +} + return Base::operator()(p, q, r, s, t); + + } + +}; + +} } } // namespace CGAL::internal::Static_filters_predicates + +#endif // CGAL_INTERNAL_STATIC_FILTERS_ORIENTATION_4_H diff --git a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_5.h b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_5.h index 0ddf9dfb364..c266ee694e8 100644 --- a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_5.h +++ b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_5.h @@ -59,11 +59,10 @@ public: fit_in_double(u.c0(), u0) && fit_in_double(u.c1(), u1) && fit_in_double(u.c2(), u2) && fit_in_double(u.c3(), u3) && fit_in_double(u.c4(), u4)) + { - CGAL_assertion_code(Orientation should_be = Base::operator()(p, q, r, s, t, u)); - double det; - double determinant_with_1_in_row_0_return_value; - double m01; + CGAL_assertion_code(Orientation should_be = Base::operator()(p, q, r, s, t, u)); + double m01; m01 = (q0 - p0); double m02; m02 = (r0 - p0); @@ -73,254 +72,132 @@ public: m04 = (t0 - p0); double m05; m05 = (u0 - p0); + double m11; + m11 = (q1 - p1); double m12; - m12 = (r0 - q0); + m12 = (r1 - p1); double m13; - m13 = (s0 - q0); + m13 = (s1 - p1); double m14; - m14 = (t0 - q0); + m14 = (t1 - p1); double m15; - m15 = (u0 - q0); + m15 = (u1 - p1); + double m21; + m21 = (q2 - p2); + double m22; + m22 = (r2 - p2); double m23; - m23 = (s0 - r0); + m23 = (s2 - p2); double m24; - m24 = (t0 - r0); + m24 = (t2 - p2); double m25; - m25 = (u0 - r0); + m25 = (u2 - p2); + double m31; + m31 = (q3 - p3); + double m32; + m32 = (r3 - p3); + double m33; + m33 = (s3 - p3); double m34; - m34 = (t0 - s0); + m34 = (t3 - p3); double m35; - m35 = (u0 - s0); + m35 = (u3 - p3); + double m41; + m41 = (q4 - p4); + double m42; + m42 = (r4 - p4); + double m43; + m43 = (s4 - p4); + double m44; + m44 = (t4 - p4); double m45; - m45 = (u0 - t0); - double m012; - m012 = (((m01 * r1) - (m02 * q1)) + (m12 * p1)); - double m013; - m013 = (((m01 * s1) - (m03 * q1)) + (m13 * p1)); - double m014; - m014 = (((m01 * t1) - (m04 * q1)) + (m14 * p1)); - double m015; - m015 = (((m01 * u1) - (m05 * q1)) + (m15 * p1)); - double m023; - m023 = (((m02 * s1) - (m03 * r1)) + (m23 * p1)); - double m024; - m024 = (((m02 * t1) - (m04 * r1)) + (m24 * p1)); - double m025; - m025 = (((m02 * u1) - (m05 * r1)) + (m25 * p1)); - double m034; - m034 = (((m03 * t1) - (m04 * s1)) + (m34 * p1)); - double m035; - m035 = (((m03 * u1) - (m05 * s1)) + (m35 * p1)); - double m045; - m045 = (((m04 * u1) - (m05 * t1)) + (m45 * p1)); - double m123; - m123 = (((m12 * s1) - (m13 * r1)) + (m23 * q1)); - double m124; - m124 = (((m12 * t1) - (m14 * r1)) + (m24 * q1)); - double m125; - m125 = (((m12 * u1) - (m15 * r1)) + (m25 * q1)); - double m134; - m134 = (((m13 * t1) - (m14 * s1)) + (m34 * q1)); - double m135; - m135 = (((m13 * u1) - (m15 * s1)) + (m35 * q1)); - double m145; - m145 = (((m14 * u1) - (m15 * t1)) + (m45 * q1)); - double m234; - m234 = (((m23 * t1) - (m24 * s1)) + (m34 * r1)); - double m235; - m235 = (((m23 * u1) - (m25 * s1)) + (m35 * r1)); - double m245; - m245 = (((m24 * u1) - (m25 * t1)) + (m45 * r1)); - double m345; - m345 = (((m34 * u1) - (m35 * t1)) + (m45 * s1)); - double m0123; - m0123 = ((((m012 * s2) - (m013 * r2)) + (m023 * q2)) - (m123 * p2)); - double m0124; - m0124 = ((((m012 * t2) - (m014 * r2)) + (m024 * q2)) - (m124 * p2)); - double m0125; - m0125 = ((((m012 * u2) - (m015 * r2)) + (m025 * q2)) - (m125 * p2)); - double m0134; - m0134 = ((((m013 * t2) - (m014 * s2)) + (m034 * q2)) - (m134 * p2)); - double m0135; - m0135 = ((((m013 * u2) - (m015 * s2)) + (m035 * q2)) - (m135 * p2)); - double m0145; - m0145 = ((((m014 * u2) - (m015 * t2)) + (m045 * q2)) - (m145 * p2)); - double m0234; - m0234 = ((((m023 * t2) - (m024 * s2)) + (m034 * r2)) - (m234 * p2)); - double m0235; - m0235 = ((((m023 * u2) - (m025 * s2)) + (m035 * r2)) - (m235 * p2)); - double m0245; - m0245 = ((((m024 * u2) - (m025 * t2)) + (m045 * r2)) - (m245 * p2)); - double m0345; - m0345 = ((((m034 * u2) - (m035 * t2)) + (m045 * s2)) - (m345 * p2)); - double m1234; - m1234 = ((((m123 * t2) - (m124 * s2)) + (m134 * r2)) - (m234 * q2)); - double m1235; - m1235 = ((((m123 * u2) - (m125 * s2)) + (m135 * r2)) - (m235 * q2)); - double m1245; - m1245 = ((((m124 * u2) - (m125 * t2)) + (m145 * r2)) - (m245 * q2)); - double m1345; - m1345 = ((((m134 * u2) - (m135 * t2)) + (m145 * s2)) - (m345 * q2)); - double m2345; - m2345 = ((((m234 * u2) - (m235 * t2)) + (m245 * s2)) - (m345 * r2)); - double m01234; - m01234 = (((((m0123 * t3) - (m0124 * s3)) + (m0134 * r3)) - (m0234 * q3)) + (m1234 * p3)); - double m01235; - m01235 = (((((m0123 * u3) - (m0125 * s3)) + (m0135 * r3)) - (m0235 * q3)) + (m1235 * p3)); - double m01245; - m01245 = (((((m0124 * u3) - (m0125 * t3)) + (m0145 * r3)) - (m0245 * q3)) + (m1245 * p3)); - double m01345; - m01345 = (((((m0134 * u3) - (m0135 * t3)) + (m0145 * s3)) - (m0345 * q3)) + (m1345 * p3)); - double m02345; - m02345 = (((((m0234 * u3) - (m0235 * t3)) + (m0245 * s3)) - (m0345 * r3)) + (m2345 * p3)); - double m12345; - m12345 = (((((m1234 * u3) - (m1235 * t3)) + (m1245 * s3)) - (m1345 * r3)) + (m2345 * q3)); - double m012345; - m012345 = ((((((m01234 * u4) - (m01235 * t4)) + (m01245 * s4)) - (m01345 * r4)) + (m02345 * q4)) - (m12345 * p4)); - determinant_with_1_in_row_0_return_value = m012345; - det = determinant_with_1_in_row_0_return_value; + m45 = (u4 - p4); + double det; + det = determinant( m01, m02, m03, m04, m05, m11, m12, m13, m14, m15, m21, m22, m23, m24, m25, m31, m32, m33, m34, m35, m41, m42, m43, m44, m45 ); + int int_tmp_result; double eps; - double max1 = CGAL::abs(p1); - if( (max1 < CGAL::abs(q1)) ) - { - max1 = CGAL::abs(q1); - } - if( (max1 < CGAL::abs(r1)) ) - { - max1 = CGAL::abs(r1); - } - if( (max1 < CGAL::abs(s1)) ) - { - max1 = CGAL::abs(s1); - } - if( (max1 < CGAL::abs(t1)) ) - { - max1 = CGAL::abs(t1); - } - if( (max1 < CGAL::abs(u1)) ) - { - max1 = CGAL::abs(u1); - } - double max2 = CGAL::abs(p2); - if( (max2 < CGAL::abs(q2)) ) - { - max2 = CGAL::abs(q2); - } - if( (max2 < CGAL::abs(r2)) ) - { - max2 = CGAL::abs(r2); - } - if( (max2 < CGAL::abs(s2)) ) - { - max2 = CGAL::abs(s2); - } - if( (max2 < CGAL::abs(t2)) ) - { - max2 = CGAL::abs(t2); - } - if( (max2 < CGAL::abs(u2)) ) - { - max2 = CGAL::abs(u2); - } - double max3 = CGAL::abs(p3); - if( (max3 < CGAL::abs(q3)) ) - { - max3 = CGAL::abs(q3); - } - if( (max3 < CGAL::abs(r3)) ) - { - max3 = CGAL::abs(r3); - } - if( (max3 < CGAL::abs(s3)) ) - { - max3 = CGAL::abs(s3); - } - if( (max3 < CGAL::abs(t3)) ) - { - max3 = CGAL::abs(t3); - } - if( (max3 < CGAL::abs(u3)) ) - { - max3 = CGAL::abs(u3); - } - double max4 = CGAL::abs(p4); - if( (max4 < CGAL::abs(q4)) ) - { - max4 = CGAL::abs(q4); - } - if( (max4 < CGAL::abs(r4)) ) - { - max4 = CGAL::abs(r4); - } - if( (max4 < CGAL::abs(s4)) ) - { - max4 = CGAL::abs(s4); - } - if( (max4 < CGAL::abs(t4)) ) - { - max4 = CGAL::abs(t4); - } - if( (max4 < CGAL::abs(u4)) ) - { - max4 = CGAL::abs(u4); - } - double max5 = CGAL::abs(m01); - if( (max5 < CGAL::abs(m05)) ) - { - max5 = CGAL::abs(m05); - } - if( (max5 < CGAL::abs(m04)) ) - { - max5 = CGAL::abs(m04); - } - if( (max5 < CGAL::abs(m03)) ) - { - max5 = CGAL::abs(m03); - } - if( (max5 < CGAL::abs(m02)) ) - { - max5 = CGAL::abs(m02); - } - if( (max5 < CGAL::abs(m15)) ) - { - max5 = CGAL::abs(m15); - } - if( (max5 < CGAL::abs(m14)) ) - { - max5 = CGAL::abs(m14); - } - if( (max5 < CGAL::abs(m13)) ) - { - max5 = CGAL::abs(m13); - } - if( (max5 < CGAL::abs(m12)) ) - { - max5 = CGAL::abs(m12); - } - if( (max5 < CGAL::abs(m34)) ) - { - max5 = CGAL::abs(m34); - } - if( (max5 < CGAL::abs(m25)) ) - { - max5 = CGAL::abs(m25); - } - if( (max5 < CGAL::abs(m24)) ) - { - max5 = CGAL::abs(m24); - } - if( (max5 < CGAL::abs(m23)) ) - { - max5 = CGAL::abs(m23); - } - if( (max5 < CGAL::abs(m45)) ) - { - max5 = CGAL::abs(m45); - } - if( (max5 < CGAL::abs(m35)) ) - { - max5 = CGAL::abs(m35); - } + double max1 = CGAL::abs(m01); + double am = CGAL::abs(m02); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m03); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m11); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m12); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m13); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m21); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m22); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m23); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m33); + if( (max1 < am) ) { max1 = am; } + + + double max2 = CGAL::abs(m01); + am = CGAL::abs(m02); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m11); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m12); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m21); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m22); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m23); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m31); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m32); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m33); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m43); + if( (max2 < am) ) { max2 = am; } + + + double max3 = CGAL::abs(m04); + am = CGAL::abs(m14); + if( (max3 < am) ) { max3 = am; } + am = CGAL::abs(m24); + if( (max3 < am) ) { max3 = am; } + am = CGAL::abs(m34); + if( (max3 < am) ) { max3 = am; } + am = CGAL::abs(m44); + if( (max3 < am) ) { max3 = am; } + + + double max4 = CGAL::abs(m05); + am = CGAL::abs(m15); + if( (max4 < am) ) { max4 = am; } + am = CGAL::abs(m25); + if( (max4 < am) ) { max4 = am; } + am = CGAL::abs(m35); + if( (max4 < am) ) { max4 = am; } + am = CGAL::abs(m45); + if( (max4 < am) ) { max4 = am; } + + + double max5 = CGAL::abs(m11); + am = CGAL::abs(m12); + if( (max5 < am) ) { max5 = am; } + am = CGAL::abs(m21); + if( (max5 < am) ) { max5 = am; } + am = CGAL::abs(m22); + if( (max5 < am) ) { max5 = am; } + am = CGAL::abs(m31); + if( (max5 < am) ) { max5 = am; } + am = CGAL::abs(m32); + if( (max5 < am) ) { max5 = am; } + am = CGAL::abs(m41); + if( (max5 < am) ) { max5 = am; } + am = CGAL::abs(m42); + if( (max5 < am) ) { max5 = am; } + double lower_bound_1; double upper_bound_1; lower_bound_1 = max5; @@ -369,7 +246,7 @@ public: upper_bound_1 = max4; } } - if( (lower_bound_1 < 8.19482853969781542511e-60) ) + if( (lower_bound_1 < 9.99657131447050328602e-60) ) { return Base::operator()(p, q, r, s, t, u); } @@ -379,7 +256,7 @@ public: { return Base::operator()(p, q, r, s, t, u); } - eps = (6.02067348555779570000e-13 * ((((max5 * max1) * max2) * max3) * max4)); + eps = (2.22889232457534740153e-13 * ((((max5 * max2) * max1) * max3) * max4)); if( (det > eps) ) { CGAL_assertion(should_be == POSITIVE); @@ -392,10 +269,15 @@ public: CGAL_assertion(should_be == NEGATIVE); return NEGATIVE; } - + else + { + return Base::operator()(p, q, r, s, t, u); + } } } - } + + } + return Base::operator()(p, q, r, s, t, u); } diff --git a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_6.h b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_6.h index 935b164645d..46d3570f7f4 100644 --- a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_6.h +++ b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_6.h @@ -45,534 +45,229 @@ public: a51, a52, a53, a54, a55, a56, a61, a62, a63, a64, a65, a66; - if (fit_in_double(p.c0(), a01) && fit_in_double(p.c1(), a02) && - fit_in_double(p.c2(), a03) && fit_in_double(p.c3(), a04) && - fit_in_double(p.c4(), a05) && fit_in_double(p.c5(), a06) && + double p0, p1, p2, p3, p4, p5, q0, q1, q2, q3, q4, q5, r0, r1, r2, r3, r4, r5, s0, s1, s2, s3, s4, s5, t0, t1, t2, t3, t4, t5, u0, u1, u2, u3, u4, u5, v0, v1, v2, v3, v4, v5; + if (fit_in_double(p.c0(), p0) && fit_in_double(p.c1(), p1) && + fit_in_double(p.c2(), p2) && fit_in_double(p.c3(), p3) && + fit_in_double(p.c4(), p4) && fit_in_double(p.c5(), p5) && - fit_in_double(q.c0(), a11) && fit_in_double(q.c1(), a12) && - fit_in_double(q.c2(), a13) && fit_in_double(q.c3(), a14) && - fit_in_double(q.c4(), a15) && fit_in_double(q.c5(), a16) && + fit_in_double(q.c0(), q0) && fit_in_double(q.c1(), q1) && + fit_in_double(q.c2(), q2) && fit_in_double(q.c3(), q3) && + fit_in_double(q.c4(), q4) && fit_in_double(q.c5(), q5) && - fit_in_double(r.c0(), a21) && fit_in_double(r.c1(), a22) && - fit_in_double(r.c2(), a23) && fit_in_double(r.c3(), a24) && - fit_in_double(r.c4(), a25) && fit_in_double(r.c5(), a26) && + fit_in_double(r.c0(), r0) && fit_in_double(r.c1(), r1) && + fit_in_double(r.c2(), r2) && fit_in_double(r.c3(), r3) && + fit_in_double(r.c4(), r4) && fit_in_double(r.c5(), r5) && - fit_in_double(s.c0(), a31) && fit_in_double(s.c1(), a32) && - fit_in_double(s.c2(), a33) && fit_in_double(s.c3(), a34) && - fit_in_double(s.c4(), a35) && fit_in_double(s.c5(), a36) && + fit_in_double(s.c0(), s0) && fit_in_double(s.c1(), s1) && + fit_in_double(s.c2(), s2) && fit_in_double(s.c3(), s3) && + fit_in_double(s.c4(), s4) && fit_in_double(s.c5(), s5) && - fit_in_double(t.c0(), a41) && fit_in_double(t.c1(), a42) && - fit_in_double(t.c2(), a43) && fit_in_double(t.c3(), a44) && - fit_in_double(t.c4(), a45) && fit_in_double(t.c5(), a46) && + fit_in_double(t.c0(), t0) && fit_in_double(t.c1(), t1) && + fit_in_double(t.c2(), t2) && fit_in_double(t.c3(), t3) && + fit_in_double(t.c4(), t4) && fit_in_double(t.c5(), t5) && - fit_in_double(u.c0(), a51) && fit_in_double(u.c1(), a52) && - fit_in_double(u.c2(), a53) && fit_in_double(u.c3(), a54) && - fit_in_double(u.c4(), a55) && fit_in_double(u.c5(), a56) && + fit_in_double(u.c0(), u0) && fit_in_double(u.c1(), u1) && + fit_in_double(u.c2(), u2) && fit_in_double(u.c3(), u3) && + fit_in_double(u.c4(), u4) && fit_in_double(u.c5(), u5) && - fit_in_double(v.c0(), a61) && fit_in_double(v.c1(), a62) && - fit_in_double(v.c2(), a63) && fit_in_double(v.c3(), a64) && - fit_in_double(v.c4(), a65) && fit_in_double(v.c5(), a66)) + fit_in_double(v.c0(), v0) && fit_in_double(v.c1(), v1) && + fit_in_double(v.c2(), v2) && fit_in_double(v.c3(), v3) && + fit_in_double(v.c4(), v4) && fit_in_double(v.c5(), v5)) { CGAL_assertion_code(Orientation should_be = Base::operator()(p, q, r, s, t, u, v)); double m01; - m01 = (a11 - a01); + m01 = (q0 - p0); double m02; - m02 = (a21 - a01); + m02 = (r0 - p0); double m03; - m03 = (a31 - a01); + m03 = (s0 - p0); double m04; - m04 = (a41 - a01); + m04 = (t0 - p0); double m05; - m05 = (a51 - a01); + m05 = (u0 - p0); double m06; - m06 = (a61 - a01); + m06 = (v0 - p0); + double m11; + m11 = (q1 - p1); double m12; - m12 = (a21 - a11); + m12 = (r1 - p1); double m13; - m13 = (a31 - a11); + m13 = (s1 - p1); double m14; - m14 = (a41 - a11); + m14 = (t1 - p1); double m15; - m15 = (a51 - a11); + m15 = (u1 - p1); double m16; - m16 = (a61 - a11); + m16 = (v1 - p1); + double m21; + m21 = (q2 - p2); + double m22; + m22 = (r2 - p2); double m23; - m23 = (a31 - a21); + m23 = (s2 - p2); double m24; - m24 = (a41 - a21); + m24 = (t2 - p2); double m25; - m25 = (a51 - a21); + m25 = (u2 - p2); double m26; - m26 = (a61 - a21); + m26 = (v2 - p2); + double m31; + m31 = (q3 - p3); + double m32; + m32 = (r3 - p3); + double m33; + m33 = (s3 - p3); double m34; - m34 = (a41 - a31); + m34 = (t3 - p3); double m35; - m35 = (a51 - a31); + m35 = (u3 - p3); double m36; - m36 = (a61 - a31); + m36 = (v3 - p3); + double m41; + m41 = (q4 - p4); + double m42; + m42 = (r4 - p4); + double m43; + m43 = (s4 - p4); + double m44; + m44 = (t4 - p4); double m45; - m45 = (a51 - a41); + m45 = (u4 - p4); double m46; - m46 = (a61 - a41); + m46 = (v4 - p4); + double m51; + m51 = (q5 - p5); + double m52; + m52 = (r5 - p5); + double m53; + m53 = (s5 - p5); + double m54; + m54 = (t5 - p5); + double m55; + m55 = (u5 - p5); double m56; - m56 = (a61 - a51); - double m012; - m012 = (((m01 * a22) - (m02 * a12)) + (m12 * a02)); - double m013; - m013 = (((m01 * a32) - (m03 * a12)) + (m13 * a02)); - double m014; - m014 = (((m01 * a42) - (m04 * a12)) + (m14 * a02)); - double m015; - m015 = (((m01 * a52) - (m05 * a12)) + (m15 * a02)); - double m016; - m016 = (((m01 * a62) - (m06 * a12)) + (m16 * a02)); - double m023; - m023 = (((m02 * a32) - (m03 * a22)) + (m23 * a02)); - double m024; - m024 = (((m02 * a42) - (m04 * a22)) + (m24 * a02)); - double m025; - m025 = (((m02 * a52) - (m05 * a22)) + (m25 * a02)); - double m026; - m026 = (((m02 * a62) - (m06 * a22)) + (m26 * a02)); - double m034; - m034 = (((m03 * a42) - (m04 * a32)) + (m34 * a02)); - double m035; - m035 = (((m03 * a52) - (m05 * a32)) + (m35 * a02)); - double m036; - m036 = (((m03 * a62) - (m06 * a32)) + (m36 * a02)); - double m045; - m045 = (((m04 * a52) - (m05 * a42)) + (m45 * a02)); - double m046; - m046 = (((m04 * a62) - (m06 * a42)) + (m46 * a02)); - double m056; - m056 = (((m05 * a62) - (m06 * a52)) + (m56 * a02)); - double m123; - m123 = (((m12 * a32) - (m13 * a22)) + (m23 * a12)); - double m124; - m124 = (((m12 * a42) - (m14 * a22)) + (m24 * a12)); - double m125; - m125 = (((m12 * a52) - (m15 * a22)) + (m25 * a12)); - double m126; - m126 = (((m12 * a62) - (m16 * a22)) + (m26 * a12)); - double m134; - m134 = (((m13 * a42) - (m14 * a32)) + (m34 * a12)); - double m135; - m135 = (((m13 * a52) - (m15 * a32)) + (m35 * a12)); - double m136; - m136 = (((m13 * a62) - (m16 * a32)) + (m36 * a12)); - double m145; - m145 = (((m14 * a52) - (m15 * a42)) + (m45 * a12)); - double m146; - m146 = (((m14 * a62) - (m16 * a42)) + (m46 * a12)); - double m156; - m156 = (((m15 * a62) - (m16 * a52)) + (m56 * a12)); - double m234; - m234 = (((m23 * a42) - (m24 * a32)) + (m34 * a22)); - double m235; - m235 = (((m23 * a52) - (m25 * a32)) + (m35 * a22)); - double m236; - m236 = (((m23 * a62) - (m26 * a32)) + (m36 * a22)); - double m245; - m245 = (((m24 * a52) - (m25 * a42)) + (m45 * a22)); - double m246; - m246 = (((m24 * a62) - (m26 * a42)) + (m46 * a22)); - double m256; - m256 = (((m25 * a62) - (m26 * a52)) + (m56 * a22)); - double m345; - m345 = (((m34 * a52) - (m35 * a42)) + (m45 * a32)); - double m346; - m346 = (((m34 * a62) - (m36 * a42)) + (m46 * a32)); - double m356; - m356 = (((m35 * a62) - (m36 * a52)) + (m56 * a32)); - double m456; - m456 = (((m45 * a62) - (m46 * a52)) + (m56 * a42)); - double m0123; - m0123 = ((((m012 * a33) - (m013 * a23)) + (m023 * a13)) - (m123 * a03)); - double m0124; - m0124 = ((((m012 * a43) - (m014 * a23)) + (m024 * a13)) - (m124 * a03)); - double m0125; - m0125 = ((((m012 * a53) - (m015 * a23)) + (m025 * a13)) - (m125 * a03)); - double m0126; - m0126 = ((((m012 * a63) - (m016 * a23)) + (m026 * a13)) - (m126 * a03)); - double m0134; - m0134 = ((((m013 * a43) - (m014 * a33)) + (m034 * a13)) - (m134 * a03)); - double m0135; - m0135 = ((((m013 * a53) - (m015 * a33)) + (m035 * a13)) - (m135 * a03)); - double m0136; - m0136 = ((((m013 * a63) - (m016 * a33)) + (m036 * a13)) - (m136 * a03)); - double m0145; - m0145 = ((((m014 * a53) - (m015 * a43)) + (m045 * a13)) - (m145 * a03)); - double m0146; - m0146 = ((((m014 * a63) - (m016 * a43)) + (m046 * a13)) - (m146 * a03)); - double m0156; - m0156 = ((((m015 * a63) - (m016 * a53)) + (m056 * a13)) - (m156 * a03)); - double m0234; - m0234 = ((((m023 * a43) - (m024 * a33)) + (m034 * a23)) - (m234 * a03)); - double m0235; - m0235 = ((((m023 * a53) - (m025 * a33)) + (m035 * a23)) - (m235 * a03)); - double m0236; - m0236 = ((((m023 * a63) - (m026 * a33)) + (m036 * a23)) - (m236 * a03)); - double m0245; - m0245 = ((((m024 * a53) - (m025 * a43)) + (m045 * a23)) - (m245 * a03)); - double m0246; - m0246 = ((((m024 * a63) - (m026 * a43)) + (m046 * a23)) - (m246 * a03)); - double m0256; - m0256 = ((((m025 * a63) - (m026 * a53)) + (m056 * a23)) - (m256 * a03)); - double m0345; - m0345 = ((((m034 * a53) - (m035 * a43)) + (m045 * a33)) - (m345 * a03)); - double m0346; - m0346 = ((((m034 * a63) - (m036 * a43)) + (m046 * a33)) - (m346 * a03)); - double m0356; - m0356 = ((((m035 * a63) - (m036 * a53)) + (m056 * a33)) - (m356 * a03)); - double m0456; - m0456 = ((((m045 * a63) - (m046 * a53)) + (m056 * a43)) - (m456 * a03)); - double m1234; - m1234 = ((((m123 * a43) - (m124 * a33)) + (m134 * a23)) - (m234 * a13)); - double m1235; - m1235 = ((((m123 * a53) - (m125 * a33)) + (m135 * a23)) - (m235 * a13)); - double m1236; - m1236 = ((((m123 * a63) - (m126 * a33)) + (m136 * a23)) - (m236 * a13)); - double m1245; - m1245 = ((((m124 * a53) - (m125 * a43)) + (m145 * a23)) - (m245 * a13)); - double m1246; - m1246 = ((((m124 * a63) - (m126 * a43)) + (m146 * a23)) - (m246 * a13)); - double m1256; - m1256 = ((((m125 * a63) - (m126 * a53)) + (m156 * a23)) - (m256 * a13)); - double m1345; - m1345 = ((((m134 * a53) - (m135 * a43)) + (m145 * a33)) - (m345 * a13)); - double m1346; - m1346 = ((((m134 * a63) - (m136 * a43)) + (m146 * a33)) - (m346 * a13)); - double m1356; - m1356 = ((((m135 * a63) - (m136 * a53)) + (m156 * a33)) - (m356 * a13)); - double m1456; - m1456 = ((((m145 * a63) - (m146 * a53)) + (m156 * a43)) - (m456 * a13)); - double m2345; - m2345 = ((((m234 * a53) - (m235 * a43)) + (m245 * a33)) - (m345 * a23)); - double m2346; - m2346 = ((((m234 * a63) - (m236 * a43)) + (m246 * a33)) - (m346 * a23)); - double m2356; - m2356 = ((((m235 * a63) - (m236 * a53)) + (m256 * a33)) - (m356 * a23)); - double m2456; - m2456 = ((((m245 * a63) - (m246 * a53)) + (m256 * a43)) - (m456 * a23)); - double m3456; - m3456 = ((((m345 * a63) - (m346 * a53)) + (m356 * a43)) - (m456 * a33)); - double m01234; - m01234 = (((((m0123 * a44) - (m0124 * a34)) + (m0134 * a24)) - (m0234 * a14)) + (m1234 * a04)); - double m01235; - m01235 = (((((m0123 * a54) - (m0125 * a34)) + (m0135 * a24)) - (m0235 * a14)) + (m1235 * a04)); - double m01236; - m01236 = (((((m0123 * a64) - (m0126 * a34)) + (m0136 * a24)) - (m0236 * a14)) + (m1236 * a04)); - double m01245; - m01245 = (((((m0124 * a54) - (m0125 * a44)) + (m0145 * a24)) - (m0245 * a14)) + (m1245 * a04)); - double m01246; - m01246 = (((((m0124 * a64) - (m0126 * a44)) + (m0146 * a24)) - (m0246 * a14)) + (m1246 * a04)); - double m01256; - m01256 = (((((m0125 * a64) - (m0126 * a54)) + (m0156 * a24)) - (m0256 * a14)) + (m1256 * a04)); - double m01345; - m01345 = (((((m0134 * a54) - (m0135 * a44)) + (m0145 * a34)) - (m0345 * a14)) + (m1345 * a04)); - double m01346; - m01346 = (((((m0134 * a64) - (m0136 * a44)) + (m0146 * a34)) - (m0346 * a14)) + (m1346 * a04)); - double m01356; - m01356 = (((((m0135 * a64) - (m0136 * a54)) + (m0156 * a34)) - (m0356 * a14)) + (m1356 * a04)); - double m01456; - m01456 = (((((m0145 * a64) - (m0146 * a54)) + (m0156 * a44)) - (m0456 * a14)) + (m1456 * a04)); - double m02345; - m02345 = (((((m0234 * a54) - (m0235 * a44)) + (m0245 * a34)) - (m0345 * a24)) + (m2345 * a04)); - double m02346; - m02346 = (((((m0234 * a64) - (m0236 * a44)) + (m0246 * a34)) - (m0346 * a24)) + (m2346 * a04)); - double m02356; - m02356 = (((((m0235 * a64) - (m0236 * a54)) + (m0256 * a34)) - (m0356 * a24)) + (m2356 * a04)); - double m02456; - m02456 = (((((m0245 * a64) - (m0246 * a54)) + (m0256 * a44)) - (m0456 * a24)) + (m2456 * a04)); - double m03456; - m03456 = (((((m0345 * a64) - (m0346 * a54)) + (m0356 * a44)) - (m0456 * a34)) + (m3456 * a04)); - double m12345; - m12345 = (((((m1234 * a54) - (m1235 * a44)) + (m1245 * a34)) - (m1345 * a24)) + (m2345 * a14)); - double m12346; - m12346 = (((((m1234 * a64) - (m1236 * a44)) + (m1246 * a34)) - (m1346 * a24)) + (m2346 * a14)); - double m12356; - m12356 = (((((m1235 * a64) - (m1236 * a54)) + (m1256 * a34)) - (m1356 * a24)) + (m2356 * a14)); - double m12456; - m12456 = (((((m1245 * a64) - (m1246 * a54)) + (m1256 * a44)) - (m1456 * a24)) + (m2456 * a14)); - double m13456; - m13456 = (((((m1345 * a64) - (m1346 * a54)) + (m1356 * a44)) - (m1456 * a34)) + (m3456 * a14)); - double m23456; - m23456 = (((((m2345 * a64) - (m2346 * a54)) + (m2356 * a44)) - (m2456 * a34)) + (m3456 * a24)); - double m012345; - m012345 = ((((((m01234 * a55) - (m01235 * a45)) + (m01245 * a35)) - (m01345 * a25)) + (m02345 * a15)) - (m12345 * a05)); - double m012346; - m012346 = ((((((m01234 * a65) - (m01236 * a45)) + (m01246 * a35)) - (m01346 * a25)) + (m02346 * a15)) - (m12346 * a05)); - double m012356; - m012356 = ((((((m01235 * a65) - (m01236 * a55)) + (m01256 * a35)) - (m01356 * a25)) + (m02356 * a15)) - (m12356 * a05)); - double m012456; - m012456 = ((((((m01245 * a65) - (m01246 * a55)) + (m01256 * a45)) - (m01456 * a25)) + (m02456 * a15)) - (m12456 * a05)); - double m013456; - m013456 = ((((((m01345 * a65) - (m01346 * a55)) + (m01356 * a45)) - (m01456 * a35)) + (m03456 * a15)) - (m13456 * a05)); - double m023456; - m023456 = ((((((m02345 * a65) - (m02346 * a55)) + (m02356 * a45)) - (m02456 * a35)) + (m03456 * a25)) - (m23456 * a05)); - double m123456; - m123456 = ((((((m12345 * a65) - (m12346 * a55)) + (m12356 * a45)) - (m12456 * a35)) + (m13456 * a25)) - (m23456 * a15)); - double m0123456; - m0123456 = (((((((m012345 * a66) - (m012346 * a56)) + (m012356 * a46)) - (m012456 * a36)) + (m013456 * a26)) - (m023456 * a16)) + (m123456 * a06)); + m56 = (v5 - p5); + double det; + det = determinant( m01, m02, m03, m04, m05, m06, m11, m12, m13, m14, m15, m16, m21, m22, m23, m24, m25, m26, m31, m32, m33, m34, m35, m36, m41, m42, m43, m44, m45, m46, m51, m52, m53, m54, m55, m56 ); int int_tmp_result; double eps; - double max1 = CGAL::abs(a02); - double tmp = CGAL::abs(a12); - if( max1 < tmp ) - { - max1 = tmp; - } - tmp = CGAL::abs(a22); - if( max1 < tmp ) - { - max1 = tmp; - } - tmp = CGAL::abs(a32); - if( max1 < tmp) - { - max1 = tmp; - } - tmp = CGAL::abs(a42); - if( max1 < tmp) - { - max1 = tmp; - } - tmp = CGAL::abs(a52); - if(max1 < tmp ) - { - max1 = tmp; - } - tmp = CGAL::abs(a62); - if( (max1 < tmp) ) - { - max1 = tmp; - } - double max2 = CGAL::abs(a03); - tmp = CGAL::abs(a13); - if( (max2 < tmp) ) - { - max2 = tmp; - } - tmp = CGAL::abs(a23); - if( (max2 < tmp) ) - { - max2 = tmp; - } - tmp = CGAL::abs(a33); - if( (max2 < tmp) ) - { - max2 = tmp; - } - tmp = CGAL::abs(a43); - if( (max2 < tmp) ) - { - max2 = tmp; - } - tmp = CGAL::abs(a53); - if( (max2 < tmp) ) - { - max2 = tmp; - } - tmp = CGAL::abs(a63); - if( (max2 < tmp) ) - { - max2 = tmp; - } - double max3 = CGAL::abs(a04); - tmp = CGAL::abs(a14); - if( (max3 < tmp) ) - { - max3 = tmp; - } - tmp = CGAL::abs(a24); - if( (max3 < tmp) ) - { - max3 = tmp; - } - tmp = CGAL::abs(a34); - if( (max3 < tmp) ) - { - max3 = tmp; - } - tmp = CGAL::abs(a44); - if( (max3 < tmp) ) - { - max3 = tmp; - } - tmp = CGAL::abs(a54); - if( (max3 < tmp) ) - { - max3 = tmp; - } - tmp = CGAL::abs(a64); - if( (max3 < tmp) ) - { - max3 = tmp; - } - double max4 = CGAL::abs(a05); - tmp = CGAL::abs(a15); - if( (max4 < tmp) ) - { - max4 = tmp; - } - tmp = CGAL::abs(a25); - if( (max4 < tmp) ) - { - max4 = tmp; - } - tmp = CGAL::abs(a35); - if( (max4 < tmp) ) - { - max4 = tmp; - } - tmp = CGAL::abs(a45); - if( (max4 < tmp) ) - { - max4 = tmp; - } - tmp = CGAL::abs(a55); - if( (max4 < tmp) ) - { - max4 = tmp; - } - tmp = CGAL::abs(a65); - if( (max4 < tmp) ) - { - max4 = tmp; - } - double max5 = CGAL::abs(a06); - tmp = CGAL::abs(a16); - if( (max5 < tmp) ) - { - max5 = tmp; - } - tmp = CGAL::abs(a26); - if( (max5 < tmp) ) - { - max5 = tmp; - } - tmp = CGAL::abs(a36); - if( (max5 < tmp) ) - { - max5 = tmp; - } - tmp = CGAL::abs(a46); - if( (max5 < tmp) ) - { - max5 = tmp; - } - tmp = CGAL::abs(a56); - if( (max5 < tmp) ) - { - max5 = tmp; - } - tmp = CGAL::abs(a66); - if( (max5 < tmp) ) - { - max5 = tmp; - } + double max1 = CGAL::abs(m01); + double am = CGAL::abs(m02); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m11); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m12); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m21); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m22); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m31); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m32); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m41); + if( (max1 < am) ) { max1 = am; } + am = CGAL::abs(m42); + if( (max1 < am) ) { max1 = am; } + + + double max2 = CGAL::abs(m03); + am = CGAL::abs(m11); + + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m12); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m13); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m21); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m22); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m23); + + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m31); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m32); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m33); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m41); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m42); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m43); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m51); + if( (max2 < am) ) { max2 = am; } + am = CGAL::abs(m52); + if( (max2 < am) ) { max2 = am; } + + + double max3 = CGAL::abs(m04); + am = CGAL::abs(m14); + if( (max3 < am) ) { max3 = am; } + am = CGAL::abs(m24); + if( (max3 < am) ) { max3 = am; } + am = CGAL::abs(m34); + if( (max3 < am) ) { max3 = am; } + am = CGAL::abs(m44); + if( (max3 < am) ) { max3 = am; } + am = CGAL::abs(m54); + if( (max3 < am) ) { max3 = am; } + + double max4 = CGAL::abs(m05); + am = CGAL::abs(m15); + if( (max4 < am) ) { max4 = am; } + am = CGAL::abs(m25); + if( (max4 < am) ) { max3 = am; } + am = CGAL::abs(m35); + if( (max4 < am) ) { max4= am; } + am = CGAL::abs(m45); + if( (max4 < am) ) { max4 = am; } + am = CGAL::abs(m55); + if( (max4 < am) ) { max4 = am; } + + double max5 = CGAL::abs(m06); + am = CGAL::abs(m16); + if( (max5 < am) ) { max5 = am; } + am = CGAL::abs(m26); + if( (max5 < am) ) { max5 = am; } + am = CGAL::abs(m36); + if( (max5 < am) ) { max5 = am; } + am = CGAL::abs(m46); + if( (max5 < am) ) { max5 = am; } + am = CGAL::abs(m56); + if( (max5 < am) ) { max5 = am; } + + + double max6 = CGAL::abs(m13); + am = CGAL::abs(m21); + if( (max6 < am) ) { max6 = am; } + am = CGAL::abs(m22); + if( (max6 < am) ) { max6 = am; } + am = CGAL::abs(m23); + if( (max6 < am) ) { max6 = am; } + am = CGAL::abs(m31); + if( (max6 < am) ) { max6 = am; } + am = CGAL::abs(m32); + if( (max6 < am) ) { max6 = am; } + am = CGAL::abs(m33); + if( (max6 < am) ) { max6 = am; } + am = CGAL::abs(m41); + if( (max6 < am) ) { max6 = am; } + am = CGAL::abs(m42); + if( (max6 < am) ) { max6 = am; } + am = CGAL::abs(m43); + if( (max6 < am) ) { max6 = am; } + am = CGAL::abs(m51); + if( (max6 < am) ) { max6 = am; } + am = CGAL::abs(m52); + if( (max6 < am) ) { max6 = am; } + am = CGAL::abs(m53); + if( (max6 < am) ) { max6 = am; } - double max6 = CGAL::abs(m01); - tmp = CGAL::abs(m02); - if( (max6 < tmp) ) - { - max6 = tmp; - } - tmp = CGAL::abs(m03); - if( (max6 < tmp) ) - { - max6 = tmp; - } - tmp = CGAL::abs(m04); - if( (max6 < tmp) ) - { - max6 = tmp; - } - tmp = CGAL::abs(m05); - if( (max6 < tmp) ) - { - max6 = tmp; - } - tmp = CGAL::abs(m06); - if( (max6 < tmp) ) - { - max6 = tmp; - } - tmp = CGAL::abs(m12); - if( (max6 < tmp) ) - { - max6 = tmp; - } - tmp = CGAL::abs(m13); - if( (max6 < tmp) ) - { - max6 = tmp; - } - tmp = CGAL::abs(m14); - if( (max6 < tmp) ) - { - max6 = tmp; - } - tmp = CGAL::abs(m15); - if( (max6 < tmp) ) - { - max6 = tmp; - } - tmp = CGAL::abs(m16); - if( (max6 < tmp) ) - { - max6 = tmp; - } - tmp = CGAL::abs(m23); - if( (max6 < tmp) ) - { - max6 = tmp; - } - tmp = CGAL::abs(m24); - if( (max6 < tmp) ) - { - max6 = tmp; - } - tmp = CGAL::abs(m25); - if( (max6 < tmp) ) - { - max6 = tmp; - } - tmp = CGAL::abs(m26); - if( (max6 < tmp) ) - { - max6 = tmp; - } - tmp = CGAL::abs(m34); - if( (max6 < tmp) ) - { - max6 = tmp; - } - tmp = CGAL::abs(m35); - if( (max6 < tmp) ) - { - max6 = tmp; - } - tmp = CGAL::abs(m36); - if( (max6 < tmp) ) - { - max6 = tmp; - } - tmp = CGAL::abs(m45); - if( (max6 < tmp) ) - { - max6 = tmp; - } - tmp = CGAL::abs(m46); - if( (max6 < tmp) ) - { - max6 = tmp; - } - tmp = CGAL::abs(m56); - if( (max6 < tmp) ) - { - max6 = tmp; - } double lower_bound_1; double upper_bound_1; @@ -633,7 +328,7 @@ public: upper_bound_1 = max4; } } - if( (lower_bound_1 < 3.98278627399642140002e-50) ) + if( (lower_bound_1 < 4.82472686053427214432e-50) ) { return Base::operator()(p, q, r, s, t, u, v); } @@ -643,26 +338,24 @@ public: { return Base::operator()(p, q, r, s, t, u, v); } - eps = (5.57471180948088246730e-12 * (((((max6 * max1) * max2) * max3) * max4) * max5)); - if( (m0123456 > eps) ) + eps = (1.76403842114300859158e-12 * (((((max1 * max2) * max6) * max3) * max4) * max5)); + if( (det > eps) ) { CGAL_assertion(should_be == POSITIVE); return POSITIVE; } else { - if( (m0123456 < -eps) ) + if( (det < -eps) ) { CGAL_assertion(should_be == NEGATIVE); return NEGATIVE; } } } +} + return Base::operator()(p, q, r, s, t, u, v); } - return Base::operator()(p, q, r, s, t, u, v); - } - - }; } } } // namespace CGAL::internal::Static_filters_predicates diff --git a/NewKernel_d/include/CGAL/NewKernel_d/Cartesian_static_filters.h b/NewKernel_d/include/CGAL/NewKernel_d/Cartesian_static_filters.h index 67a2d84070a..c05b67ea2ee 100644 --- a/NewKernel_d/include/CGAL/NewKernel_d/Cartesian_static_filters.h +++ b/NewKernel_d/include/CGAL/NewKernel_d/Cartesian_static_filters.h @@ -18,6 +18,7 @@ #include #include #include +#include #include #include @@ -155,6 +156,30 @@ template struct Side_of_oriented_sphere_3 : private Store }; +template struct Adapter_4 { + typedef typename Get_type::type Orientation; + typedef typename Get_type::type Oriented_side; + typedef typename Get_type::type Point; + typedef typename Get_functor::type CC; + typedef typename Get_functor::type Orientation_base; + struct Point_4 { + R_ const&r; CC const&c; Point const& p; + Point_4(R_ const&r_, CC const&c_, Point const&p_):r(r_),c(c_),p(p_){} + decltype(auto) c0()const{return c(p,0);} + decltype(auto) c1()const{return c(p,1);} + decltype(auto) c2()const{return c(p,2);} + decltype(auto) c3()const{return c(p,3);} + }; + struct Orientation_4 { + typedef typename Get_type::type result_type; + auto operator()(Point_4 const&A, Point_4 const&B, Point_4 const&C, + Point_4 const&D, Point_4 const&E)const{ + Point const* t[6]={&A.p,&B.p,&C.p,&D.p,&E.p}; + return Orientation_base(A.r)(make_transforming_iterator(t+0),make_transforming_iterator(t+5)); + } + }; +}; + template struct Adapter_5 { typedef typename Get_type::type Orientation; typedef typename Get_type::type Oriented_side; @@ -179,6 +204,8 @@ template struct Adapter_5 { } }; }; + + template struct Orientation_of_points_5 : private Store_kernel { CGAL_FUNCTOR_INIT_STORE(Orientation_of_points_5) typedef typename Get_type::type Point; diff --git a/NewKernel_d/include/CGAL/NewKernel_d/orientationC6.h b/NewKernel_d/include/CGAL/NewKernel_d/orientationC6.h index a9654bcd781..6706d595291 100644 --- a/NewKernel_d/include/CGAL/NewKernel_d/orientationC6.h +++ b/NewKernel_d/include/CGAL/NewKernel_d/orientationC6.h @@ -72,7 +72,7 @@ determinant( return m012345; } -int orientationC5(double p0, double p1, double p2, double p3, double p4, double p5, +int orientationC6(double p0, double p1, double p2, double p3, double p4, double p5, double q0, double q1, double q2, double q3, double q4, double q5, double r0, double r1, double r2, double r3, double r4, double r5, double s0, double s1, double s2, double s3, double s4, double s5, @@ -175,7 +175,7 @@ group p5 q5 r5 t5 q5 u5 v5; //===========generated ================== -inline int orientationC5( double p0, double p1, double p2, double p3, double p4, double p5, double q0, double q1, double q2, double q3, double q4, double q5, double r0, double r1, double r2, double r3, double r4, double r5, double s0, double s1, double s2, double s3, double s4, double s5, double t0, double t1, double t2, double t3, double t4, double t5, double u0, double u1, double u2, double u3, double u4, double u5, double v0, double v1, double v2, double v3, double v4, double v5) { +inline int orientationC6( double p0, double p1, double p2, double p3, double p4, double p5, double q0, double q1, double q2, double q3, double q4, double q5, double r0, double r1, double r2, double r3, double r4, double r5, double s0, double s1, double s2, double s3, double s4, double s5, double t0, double t1, double t2, double t3, double t4, double t5, double u0, double u1, double u2, double u3, double u4, double u5, double v0, double v1, double v2, double v3, double v4, double v5) { double m01; m01 = (q0 - p0); double m02; @@ -317,20 +317,20 @@ inline int orientationC5( double p0, double p1, double p2, double p3, double p4, if( (max3 < am) ) { max3 = am; } am = CGAL::abs(m54); if( (max3 < am) ) { max3 = am; } - am = CGAL::abs(m05); - if( (max3 < am) ) { max3 = am; } - am = CGAL::abs(m15); - if( (max3 < am) ) { max3 = am; } - am = CGAL::abs(m25); - if( (max3 < am) ) { max3 = am; } - am = CGAL::abs(m35); - if( (max3 < am) ) { max3 = am; } - am = CGAL::abs(m45); - if( (max3 < am) ) { max3 = am; } - am = CGAL::abs(m55); - if( (max3 < am) ) { max3 = am; } - d + double max4 = CGAL::abs(m05); + am = CGAL::abs(m15); + if( (max4 < am) ) { max4 = am; } + am = CGAL::abs(m25); + if( (max4 < am) ) { max4 = am; } + am = CGAL::abs(m35); + if( (max4 < am) ) { max4 = am; } + am = CGAL::abs(m45); + if( (max4 < am) ) { max4 = am; } + am = CGAL::abs(m55); + if( (max4 < am) ) { max4 = am; } + + double max5 = CGAL::abs(m06); am = CGAL::abs(m16); if( (max5 < am) ) { max5 = am; } diff --git a/Triangulation/benchmark/Triangulation/CMakeLists.txt b/Triangulation/benchmark/Triangulation/CMakeLists.txt index 7513af82322..40dbbfd3e36 100644 --- a/Triangulation/benchmark/Triangulation/CMakeLists.txt +++ b/Triangulation/benchmark/Triangulation/CMakeLists.txt @@ -12,12 +12,14 @@ if(TARGET CGAL::Eigen3_support) include_directories(BEFORE "include") create_single_source_cgal_program("generate_d.cpp") + create_single_source_cgal_program("bench4d.cpp") create_single_source_cgal_program("bench5d.cpp") create_single_source_cgal_program("bench6d.cpp") create_single_source_cgal_program("delaunay.cpp") target_link_libraries(delaunay PRIVATE CGAL::Eigen3_support) create_single_source_cgal_program("Td_vs_T2_and_T3.cpp") target_link_libraries(Td_vs_T2_and_T3 PRIVATE CGAL::Eigen3_support) + target_link_libraries(bench4d PRIVATE CGAL::Eigen3_support) target_link_libraries(bench5d PRIVATE CGAL::Eigen3_support) target_link_libraries(bench6d PRIVATE CGAL::Eigen3_support) else() diff --git a/Triangulation/benchmark/Triangulation/bench4d.cpp b/Triangulation/benchmark/Triangulation/bench4d.cpp new file mode 100644 index 00000000000..b90593b7220 --- /dev/null +++ b/Triangulation/benchmark/Triangulation/bench4d.cpp @@ -0,0 +1,62 @@ + +#include +#include +#include +#include +#include +#include +#include +#include + +typedef CGAL::Epick_d< CGAL::Dimension_tag<4> > K; +typedef CGAL::Triangulation_vertex Vertex; +typedef CGAL::Triangulation_ds_full_cell DS_full_cell; +typedef CGAL::Triangulation_full_cell Full_cell; +typedef CGAL::Triangulation_data_structure, + Vertex, + Full_cell> TDS; +typedef CGAL::Triangulation Triangulation; + + +int main() +{ + const int D = 4; // we work in Euclidean 4-space + + std::vector points; + std::ifstream in("points.txt"); + Triangulation::Point p; + int d; + in >> d; + assert(d == D); + int n; + in >> n; + points.reserve(n); + while (in >> p) { + points.push_back(p); + } + + CGAL::Timer timer; + timer.start(); + Triangulation t(D); // create triangulation + assert(t.empty()); + + //std::array ar = { 0, 0, 0, 0}; + //Triangulation::Point orig(ar.begin(), ar.end()); + //t.insert(orig); // insert origin + t.insert(points.begin(), points.end()); // compute triangulation + + std::cout << "Time taken to insert "<< points.size() << " points: " << timer.time() << " seconds." << std::endl; + timer.reset(); + assert( t.is_valid() ); + // - - - - - - - - - - - - - - - - - - - - - - - - STEP 2 + typedef Triangulation::Face Face; + typedef std::vector Faces; + Faces edges; + std::back_insert_iterator out(edges); + t.tds().incident_faces(t.infinite_vertex(), 1, out); + // collect faces of dimension 1 (edges) incident to the infinite vertex + std::cout << "There are " << edges.size() + << " vertices on the convex hull." << std::endl; + std::cout << "Time taken to find edges: " << timer.time() << " seconds." << std::endl; + return 0; +} \ No newline at end of file From c6b19ed0e3a8f64badcbd2ec482373ec8019486b Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Wed, 2 Jul 2025 10:40:52 +0100 Subject: [PATCH 36/49] Add license header --- .../include/CGAL/NewKernel_d/orientationC4.h | 16 ++++++++++++++++ .../include/CGAL/NewKernel_d/orientationC5.h | 17 +++++++++++++++++ .../include/CGAL/NewKernel_d/orientationC6.h | 15 +++++++++++++++ 3 files changed, 48 insertions(+) diff --git a/NewKernel_d/include/CGAL/NewKernel_d/orientationC4.h b/NewKernel_d/include/CGAL/NewKernel_d/orientationC4.h index 5a921ab6473..3915204817a 100644 --- a/NewKernel_d/include/CGAL/NewKernel_d/orientationC4.h +++ b/NewKernel_d/include/CGAL/NewKernel_d/orientationC4.h @@ -1,3 +1,18 @@ +// Copyright (c) 2025 +// INRIA Saclay-Ile de France (France) +// +// This file is part of CGAL (www.cgal.org) +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial +// +// Author(s) : Andreas Fabri + +// Files needed as input for the static filter generator + +#if 0 + double determinant( double a00, double a01, double a02, double a03, double a10, double a11, double a12, double a13, @@ -236,3 +251,4 @@ inline int orientationC4( double p0, double p1, double p2, double p3, double q0, return int_tmp_result; } +#endif diff --git a/NewKernel_d/include/CGAL/NewKernel_d/orientationC5.h b/NewKernel_d/include/CGAL/NewKernel_d/orientationC5.h index 692bad04bfe..a97977fb89e 100644 --- a/NewKernel_d/include/CGAL/NewKernel_d/orientationC5.h +++ b/NewKernel_d/include/CGAL/NewKernel_d/orientationC5.h @@ -1,3 +1,18 @@ +// Copyright (c) 2025 +// INRIA Saclay-Ile de France (France) +// +// This file is part of CGAL (www.cgal.org) +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial +// +// Author(s) : Andreas Fabri + +// Files needed as input for the static filter generator + +#if 0 + double determinant( double a00, double a01, double a02, double a03, double a04, @@ -326,3 +341,5 @@ inline int orientationC5( double p0, double p1, double p2, double p3, double p4, } return int_tmp_result; } + +#endif diff --git a/NewKernel_d/include/CGAL/NewKernel_d/orientationC6.h b/NewKernel_d/include/CGAL/NewKernel_d/orientationC6.h index 6706d595291..ca9f32a5d99 100644 --- a/NewKernel_d/include/CGAL/NewKernel_d/orientationC6.h +++ b/NewKernel_d/include/CGAL/NewKernel_d/orientationC6.h @@ -1,3 +1,17 @@ +// Copyright (c) 2025 +// INRIA Saclay-Ile de France (France) +// +// This file is part of CGAL (www.cgal.org) +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial +// +// Author(s) : Andreas Fabri + +// Files needed as input for the static filter generator + +#if 0 double determinant( double a00, double a01, double a02, double a03, double a04, double a05, @@ -460,3 +474,4 @@ inline int orientationC6( double p0, double p1, double p2, double p3, double p4, return int_tmp_result; } +#endif From 605afd3fe5bcc4b22ea82bf312fd69d48e51dce0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 2 Jul 2025 15:10:27 +0200 Subject: [PATCH 37/49] add missing include --- .../CGAL/Filtered_kernel/internal/Static_filters/Orientation_4.h | 1 + .../CGAL/Filtered_kernel/internal/Static_filters/Orientation_5.h | 1 + .../CGAL/Filtered_kernel/internal/Static_filters/Orientation_6.h | 1 + 3 files changed, 3 insertions(+) diff --git a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_4.h b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_4.h index a1cc4d494a1..883e1baa797 100644 --- a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_4.h +++ b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_4.h @@ -15,6 +15,7 @@ #include #include +#include #include namespace CGAL { namespace internal { namespace Static_filters_predicates { diff --git a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_5.h b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_5.h index c266ee694e8..729608c0052 100644 --- a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_5.h +++ b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_5.h @@ -15,6 +15,7 @@ #include #include +#include #include namespace CGAL { namespace internal { namespace Static_filters_predicates { diff --git a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_6.h b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_6.h index 46d3570f7f4..64780101571 100644 --- a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_6.h +++ b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_6.h @@ -15,6 +15,7 @@ #include #include +#include #include namespace CGAL { namespace internal { namespace Static_filters_predicates { From 1e991ff6addef96667c4c97758e9578bdae832ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 2 Jul 2025 16:51:20 +0200 Subject: [PATCH 38/49] disambiguate determinant call --- .../Filtered_kernel/internal/Static_filters/Orientation_4.h | 2 +- .../Filtered_kernel/internal/Static_filters/Orientation_5.h | 2 +- .../Filtered_kernel/internal/Static_filters/Orientation_6.h | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_4.h b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_4.h index 883e1baa797..f37646ed068 100644 --- a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_4.h +++ b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_4.h @@ -92,7 +92,7 @@ double m01; double m34; m34 = (t3 - p3); double det; - det = determinant( m01, m02, m03, m04, m11, m12, m13, m14, m21, m22, m23, m24, m31, m32, m33, m34 ); + det = ::CGAL::determinant( m01, m02, m03, m04, m11, m12, m13, m14, m21, m22, m23, m24, m31, m32, m33, m34 ); int int_tmp_result; double eps; double max1 = CGAL::abs(m01); diff --git a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_5.h b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_5.h index 729608c0052..8555f6f823c 100644 --- a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_5.h +++ b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_5.h @@ -114,7 +114,7 @@ public: double m45; m45 = (u4 - p4); double det; - det = determinant( m01, m02, m03, m04, m05, m11, m12, m13, m14, m15, m21, m22, m23, m24, m25, m31, m32, m33, m34, m35, m41, m42, m43, m44, m45 ); + det = ::CGAL::determinant( m01, m02, m03, m04, m05, m11, m12, m13, m14, m15, m21, m22, m23, m24, m25, m31, m32, m33, m34, m35, m41, m42, m43, m44, m45 ); int int_tmp_result; double eps; double max1 = CGAL::abs(m01); diff --git a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_6.h b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_6.h index 64780101571..89425ffd333 100644 --- a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_6.h +++ b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_6.h @@ -149,7 +149,7 @@ public: double m56; m56 = (v5 - p5); double det; - det = determinant( m01, m02, m03, m04, m05, m06, m11, m12, m13, m14, m15, m16, m21, m22, m23, m24, m25, m26, m31, m32, m33, m34, m35, m36, m41, m42, m43, m44, m45, m46, m51, m52, m53, m54, m55, m56 ); + det = ::CGAL::determinant( m01, m02, m03, m04, m05, m06, m11, m12, m13, m14, m15, m16, m21, m22, m23, m24, m25, m26, m31, m32, m33, m34, m35, m36, m41, m42, m43, m44, m45, m46, m51, m52, m53, m54, m55, m56 ); int int_tmp_result; double eps; double max1 = CGAL::abs(m01); @@ -267,6 +267,7 @@ public: am = CGAL::abs(m52); if( (max6 < am) ) { max6 = am; } am = CGAL::abs(m53); + am = CGAL::abs(m53); if( (max6 < am) ) { max6 = am; } From b38b13e2ef970c5a15f5714deeb9f4f60d1cc174 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Wed, 2 Jul 2025 16:54:47 +0100 Subject: [PATCH 39/49] WIP for bench4 --- .../internal/Static_filters/Orientation_4.h | 11 +++--- .../NewKernel_d/Cartesian_static_filters.h | 34 +++++++++++++++++++ .../benchmark/Triangulation/bench4d.cpp | 4 +-- .../benchmark/Triangulation/generate_d.cpp | 6 ++-- 4 files changed, 43 insertions(+), 12 deletions(-) diff --git a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_4.h b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_4.h index f37646ed068..f45a614e303 100644 --- a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_4.h +++ b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_4.h @@ -38,25 +38,22 @@ public: const Point_4 &r, const Point_4 &s, const Point_4 &t) const { + std::cout << "XX" << std::endl; + CGAL_BRANCH_PROFILER_3("semi-static failures/attempts/calls to : Orientation_4", tmp); - double p0, p1, p2, p3, p4, q0, q1, q2, q3, q4, r0, r1, r2, r3, r4, s0, s1, s2, s3, s4, t0, t1, t2, t3, t4; + double p0, p1, p2, p3, q0, q1, q2, q3, r0, r1, r2, r3, s0, s1, s2, s3, t0, t1, t2, t3; if (fit_in_double(p.c0(), p0) && fit_in_double(p.c1(), p1) && fit_in_double(p.c2(), p2) && fit_in_double(p.c3(), p3) && - fit_in_double(p.c4(), p4) && fit_in_double(q.c0(), q0) && fit_in_double(q.c1(), q1) && fit_in_double(q.c2(), q2) && fit_in_double(q.c3(), q3) && - fit_in_double(q.c4(), q4) && fit_in_double(r.c0(), r0) && fit_in_double(r.c1(), r1) && fit_in_double(r.c2(), r2) && fit_in_double(r.c3(), r3) && - fit_in_double(r.c4(), r4) && fit_in_double(s.c0(), s0) && fit_in_double(s.c1(), s1) && fit_in_double(s.c2(), s2) && fit_in_double(s.c3(), s3) && - fit_in_double(s.c4(), s4) && fit_in_double(t.c0(), t0) && fit_in_double(t.c1(), t1) && - fit_in_double(t.c2(), t2) && fit_in_double(t.c3(), t3) && - fit_in_double(t.c4(), t4) ) + fit_in_double(t.c2(), t2) && fit_in_double(t.c3(), t3) ) { CGAL_assertion_code(Orientation should_be = Base::operator()(p, q, r, s, t)); double m01; diff --git a/NewKernel_d/include/CGAL/NewKernel_d/Cartesian_static_filters.h b/NewKernel_d/include/CGAL/NewKernel_d/Cartesian_static_filters.h index c05b67ea2ee..d1639ca46e7 100644 --- a/NewKernel_d/include/CGAL/NewKernel_d/Cartesian_static_filters.h +++ b/NewKernel_d/include/CGAL/NewKernel_d/Cartesian_static_filters.h @@ -180,6 +180,27 @@ template struct Adapter_4 { }; }; + +template struct Orientation_of_points_4 : private Store_kernel { + CGAL_FUNCTOR_INIT_STORE(Orientation_of_points_4) + typedef typename Get_type::type Point; + typedef typename Get_type::type result_type; + typedef typename Get_functor::type CC; + typedef Adapter_4 Adapter; + template result_type operator()(Iter f, Iter CGAL_assertion_code(e))const{ + CC c(this->kernel()); + Point const& A=*f; + Point const& B=*++f; + Point const& C=*++f; + Point const& D=*++f; + Point const& E=*++f; + CGAL_assertion(++f==e); + typedef typename Adapter::Point_4 P; + return typename internal::Static_filters_predicates::Orientation_4()(P(this->kernel(),c,A),P(this->kernel(),c,B),P(this->kernel(),c,C), + P(this->kernel(),c,D),P(this->kernel(),c,E)); + } +}; + template struct Adapter_5 { typedef typename Get_type::type Orientation; typedef typename Get_type::type Oriented_side; @@ -322,6 +343,19 @@ struct Cartesian_static_filters, R_, Derived_> : public R_ { }; #ifndef CGAL_NO_STATIC_FILTER_5 + +template +struct Cartesian_static_filters, R_, Derived_> : public R_ { + constexpr Cartesian_static_filters(){} + constexpr Cartesian_static_filters(int d):R_(d){} + typedef Cartesian_static_filters, R_, Derived_> Self; + typedef typename Default::Get::type Derived; + template struct Functor : Inherit_functor {}; + template struct Functor { + typedef SFA::Orientation_of_points_4 type; + }; +}; + template struct Cartesian_static_filters, R_, Derived_> : public R_ { constexpr Cartesian_static_filters(){} diff --git a/Triangulation/benchmark/Triangulation/bench4d.cpp b/Triangulation/benchmark/Triangulation/bench4d.cpp index b90593b7220..10c3f969ae7 100644 --- a/Triangulation/benchmark/Triangulation/bench4d.cpp +++ b/Triangulation/benchmark/Triangulation/bench4d.cpp @@ -23,18 +23,18 @@ int main() const int D = 4; // we work in Euclidean 4-space std::vector points; - std::ifstream in("points.txt"); + std::ifstream in("points_4.txt"); Triangulation::Point p; int d; in >> d; assert(d == D); int n; in >> n; + std::cout << n << " points in dimension " << d << std::endl; points.reserve(n); while (in >> p) { points.push_back(p); } - CGAL::Timer timer; timer.start(); Triangulation t(D); // create triangulation diff --git a/Triangulation/benchmark/Triangulation/generate_d.cpp b/Triangulation/benchmark/Triangulation/generate_d.cpp index 5ba73aa57a3..6759b9c908f 100644 --- a/Triangulation/benchmark/Triangulation/generate_d.cpp +++ b/Triangulation/benchmark/Triangulation/generate_d.cpp @@ -5,10 +5,10 @@ int main() { CGAL::Random rng; std::cout.precision(17); - std ::cout << 6 << std::endl; + std ::cout << 4 << std::endl; std::cout << 100000 << std::endl; for(int i = 0; i < 100000; ++i) { - std::array arr; + std::array arr; double slength = 0; for(int i = 0; i < arr.size(); ++i) { arr[i] = rng.get_double(-1, 1); @@ -18,7 +18,7 @@ int main() { for(int i = 0; i < arr.size(); ++i) { arr[i] /= slength; } - std::cout << "6 " << arr[0] << " " << arr[1] << " " << arr[2] << " " << arr[3] << " " << arr[4]<< " " << arr[5] << std::endl; + std::cout << "4 " << arr[0] << " " << arr[1] << " " << arr[2] << " " << arr[3] /* << " " << arr[4] /* << " " << arr[5] */ << std::endl; } return 0; } From 15760cfc78105d11a8f25ef95f00ca339e827d1a Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Wed, 2 Jul 2025 17:08:49 +0100 Subject: [PATCH 40/49] In 5D we enter Orientation_5, but not in 4D. why? --- .../include/CGAL/NewKernel_d/Cartesian_static_filters.h | 2 +- Triangulation/benchmark/Triangulation/bench5d.cpp | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/NewKernel_d/include/CGAL/NewKernel_d/Cartesian_static_filters.h b/NewKernel_d/include/CGAL/NewKernel_d/Cartesian_static_filters.h index d1639ca46e7..a630fdca5cb 100644 --- a/NewKernel_d/include/CGAL/NewKernel_d/Cartesian_static_filters.h +++ b/NewKernel_d/include/CGAL/NewKernel_d/Cartesian_static_filters.h @@ -342,7 +342,7 @@ struct Cartesian_static_filters, R_, Derived_> : public R_ { }; }; -#ifndef CGAL_NO_STATIC_FILTER_5 +#ifndef CGAL_NO_STATIC_FILTER_456 template struct Cartesian_static_filters, R_, Derived_> : public R_ { diff --git a/Triangulation/benchmark/Triangulation/bench5d.cpp b/Triangulation/benchmark/Triangulation/bench5d.cpp index 2bf6fc90bfc..e605c53f9fd 100644 --- a/Triangulation/benchmark/Triangulation/bench5d.cpp +++ b/Triangulation/benchmark/Triangulation/bench5d.cpp @@ -1,3 +1,5 @@ +// Switch off the static filters for 4, 5, and 6 points. +// #define CGAL_NO_STATIC_FILTER_456 #include #include @@ -23,7 +25,7 @@ int main() const int D = 5; // we work in Euclidean 5-space std::vector points; - std::ifstream in("points.txt"); + std::ifstream in("points_5.txt"); Triangulation::Point p; int d; in >> d; From 076ffc109fdb8986eaa6296e1611b5f7a0613f5a Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Wed, 2 Jul 2025 17:31:21 +0100 Subject: [PATCH 41/49] It works also for 4D and we go from 2sec to 1.2 sec --- .../Filtered_kernel/internal/Static_filters/Orientation_4.h | 2 -- Triangulation/benchmark/Triangulation/bench4d.cpp | 2 ++ 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_4.h b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_4.h index f45a614e303..e80b295c0c8 100644 --- a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_4.h +++ b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_4.h @@ -38,8 +38,6 @@ public: const Point_4 &r, const Point_4 &s, const Point_4 &t) const { - std::cout << "XX" << std::endl; - CGAL_BRANCH_PROFILER_3("semi-static failures/attempts/calls to : Orientation_4", tmp); double p0, p1, p2, p3, q0, q1, q2, q3, r0, r1, r2, r3, s0, s1, s2, s3, t0, t1, t2, t3; diff --git a/Triangulation/benchmark/Triangulation/bench4d.cpp b/Triangulation/benchmark/Triangulation/bench4d.cpp index 10c3f969ae7..b0746ed464e 100644 --- a/Triangulation/benchmark/Triangulation/bench4d.cpp +++ b/Triangulation/benchmark/Triangulation/bench4d.cpp @@ -1,3 +1,5 @@ +// Switch off the static filters for 4, 5, and 6 points. +// #define CGAL_NO_STATIC_FILTER_456 #include #include From 6bc33ee1acbaf758c740bd93d8e96d48ee27f8bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Wed, 2 Jul 2025 20:23:46 +0200 Subject: [PATCH 42/49] unused var --- .../CGAL/Filtered_kernel/internal/Static_filters/Orientation_4.h | 1 - .../CGAL/Filtered_kernel/internal/Static_filters/Orientation_5.h | 1 - .../CGAL/Filtered_kernel/internal/Static_filters/Orientation_6.h | 1 - 3 files changed, 3 deletions(-) diff --git a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_4.h b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_4.h index e80b295c0c8..ebd9f99e7f4 100644 --- a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_4.h +++ b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_4.h @@ -88,7 +88,6 @@ double m01; m34 = (t3 - p3); double det; det = ::CGAL::determinant( m01, m02, m03, m04, m11, m12, m13, m14, m21, m22, m23, m24, m31, m32, m33, m34 ); - int int_tmp_result; double eps; double max1 = CGAL::abs(m01); double am = CGAL::abs(m02); diff --git a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_5.h b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_5.h index 8555f6f823c..a57f445e885 100644 --- a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_5.h +++ b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_5.h @@ -115,7 +115,6 @@ public: m45 = (u4 - p4); double det; det = ::CGAL::determinant( m01, m02, m03, m04, m05, m11, m12, m13, m14, m15, m21, m22, m23, m24, m25, m31, m32, m33, m34, m35, m41, m42, m43, m44, m45 ); - int int_tmp_result; double eps; double max1 = CGAL::abs(m01); double am = CGAL::abs(m02); diff --git a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_6.h b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_6.h index 89425ffd333..372a88c22f7 100644 --- a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_6.h +++ b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_6.h @@ -150,7 +150,6 @@ public: m56 = (v5 - p5); double det; det = ::CGAL::determinant( m01, m02, m03, m04, m05, m06, m11, m12, m13, m14, m15, m16, m21, m22, m23, m24, m25, m26, m31, m32, m33, m34, m35, m36, m41, m42, m43, m44, m45, m46, m51, m52, m53, m54, m55, m56 ); - int int_tmp_result; double eps; double max1 = CGAL::abs(m01); double am = CGAL::abs(m02); From 1c61ef7de920e7276fb3c3eba10c2466467de8b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 3 Jul 2025 09:34:40 +0200 Subject: [PATCH 43/49] fix warnings --- .../Filtered_kernel/internal/Static_filters/Orientation_6.h | 6 ------ 1 file changed, 6 deletions(-) diff --git a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_6.h b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_6.h index 372a88c22f7..f5f7fae103d 100644 --- a/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_6.h +++ b/Filtered_kernel/include/CGAL/Filtered_kernel/internal/Static_filters/Orientation_6.h @@ -40,12 +40,6 @@ public: { CGAL_BRANCH_PROFILER_3("semi-static failures/attempts/calls to : Orientation_6", tmp); - double a01, a02, a03, a04, a05, a06, a11, a12, a13, a14, a15, a16, - a21, a22, a23, a24, a25, a26, a31, a32, a33, a34, a35, - a36, a41, a42, a43, a44, a45, a46, - a51, a52, a53, a54, a55, a56, - a61, a62, a63, a64, a65, a66; - double p0, p1, p2, p3, p4, p5, q0, q1, q2, q3, q4, q5, r0, r1, r2, r3, r4, r5, s0, s1, s2, s3, s4, s5, t0, t1, t2, t3, t4, t5, u0, u1, u2, u3, u4, u5, v0, v1, v2, v3, v4, v5; if (fit_in_double(p.c0(), p0) && fit_in_double(p.c1(), p1) && fit_in_double(p.c2(), p2) && fit_in_double(p.c3(), p3) && From 7977b1f22d3ae712ca2366e90fa5f9acd19ffdb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 3 Jul 2025 09:37:41 +0200 Subject: [PATCH 44/49] fix compilation errors --- Triangulation/include/CGAL/Triangulation_data_structure.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Triangulation/include/CGAL/Triangulation_data_structure.h b/Triangulation/include/CGAL/Triangulation_data_structure.h index 8b45ccaa6e9..93e30b4144c 100644 --- a/Triangulation/include/CGAL/Triangulation_data_structure.h +++ b/Triangulation/include/CGAL/Triangulation_data_structure.h @@ -312,7 +312,7 @@ public: Vertex_handle mirror_vertex(Full_cell_handle s, int i) const /* Concept */ { CGAL_precondition(Full_cell_handle() != s && check_range(i)); - return s->mirror_vertex(i, current_dimension); + return s->mirror_vertex(i, current_dimension()); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FACETS OPERATIONS @@ -790,7 +790,7 @@ Triangulation_data_structure CGAL_precondition( (1 <= fd ) && (fd < current_dimension())); std::vector simps; // save the Face's vertices: - Full_cell s(current_dimension); + Full_cell s(current_dimension()); for( int i = 0; i <= fd; ++i ) s.set_vertex(i, f.vertex(i)); // compute the star of f From ce87535e11040eac86897c657a72c56c0fdecaf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Thu, 3 Jul 2025 14:05:46 +0200 Subject: [PATCH 45/49] fix doxygen command --- .../Triangulation/CGAL/TDS_full_cell_mirror_storage_policy.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Triangulation/doc/Triangulation/CGAL/TDS_full_cell_mirror_storage_policy.h b/Triangulation/doc/Triangulation/CGAL/TDS_full_cell_mirror_storage_policy.h index 6b4136dd777..55d1a3547fa 100644 --- a/Triangulation/doc/Triangulation/CGAL/TDS_full_cell_mirror_storage_policy.h +++ b/Triangulation/doc/Triangulation/CGAL/TDS_full_cell_mirror_storage_policy.h @@ -4,7 +4,7 @@ namespace CGAL { /*! \ingroup PkgTriangulationsRef A tag class to indicate that mirror indices are stored in full cells. - \precondition The dimension is not larger than 127. + \pre The dimension is not larger than 127. */ class TDS_full_cell_mirror_storage_policy {}; From f9bf2571dd2366572914f86148fd144d09a2795f Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Fri, 4 Jul 2025 08:27:55 +0100 Subject: [PATCH 46/49] Add a test for the 4D static filters --- .../test/Triangulation/CMakeLists.txt | 3 +- .../test/Triangulation/data/points_4.txt | 100 ++++++++++++++++++ .../test_triangulation_static_filters_4.cpp | 64 +++++++++++ 3 files changed, 166 insertions(+), 1 deletion(-) create mode 100644 Triangulation/test/Triangulation/data/points_4.txt create mode 100644 Triangulation/test/Triangulation/test_triangulation_static_filters_4.cpp diff --git a/Triangulation/test/Triangulation/CMakeLists.txt b/Triangulation/test/Triangulation/CMakeLists.txt index 23b67f9c497..c29c8df0d88 100644 --- a/Triangulation/test/Triangulation/CMakeLists.txt +++ b/Triangulation/test/Triangulation/CMakeLists.txt @@ -17,6 +17,7 @@ if(TARGET CGAL::Eigen3_support) include_directories(BEFORE "include") create_single_source_cgal_program("test_triangulation.cpp") + create_single_source_cgal_program("test_triangulation_static_filters_4.cpp") create_single_source_cgal_program("test_delaunay.cpp") create_single_source_cgal_program("test_regular.cpp") create_single_source_cgal_program("test_tds.cpp") @@ -24,7 +25,7 @@ if(TARGET CGAL::Eigen3_support) create_single_source_cgal_program("test_insert_if_in_star.cpp") create_single_source_cgal_program("simple_io_test.cpp") create_single_source_cgal_program("issue_8347.cpp") - foreach(target test_triangulation test_delaunay test_regular test_tds + foreach(target test_triangulation test_triangulation_static_filters_4 test_delaunay test_regular test_tds test_torture test_insert_if_in_star simple_io_test issue_8347) target_link_libraries(${target} PRIVATE CGAL::Eigen3_support) endforeach() diff --git a/Triangulation/test/Triangulation/data/points_4.txt b/Triangulation/test/Triangulation/data/points_4.txt new file mode 100644 index 00000000000..a4cf574bb48 --- /dev/null +++ b/Triangulation/test/Triangulation/data/points_4.txt @@ -0,0 +1,100 @@ +4 +99 +4 0.52895023818873566 0.76946003711969879 0.10332507879995133 -0.34273433572785694 +4 0.41163016466811042 -0.3682073981839451 -0.52956435788869938 0.64385208729322574 +4 0.093453054760633439 0.2119054808051985 0.80105365911776638 -0.5519743010092597 +4 -0.52686178424608165 0.012815670898233643 0.37212064538747264 -0.76405408457574153 +4 0.58805166366770167 0.58151399203483489 -0.47736704319070539 -0.29691315902250165 +4 -0.25264853451566094 -0.78418366656495475 0.26672951531689387 -0.50008005434994851 +4 -0.60084190523524728 -0.5604455825189717 -0.49723069044393314 -0.27865999789869078 +4 -0.14100899254743662 -0.0089631723914645051 0.58363636804963048 -0.79962786060221414 +4 0.66702813144169226 0.71770163828613143 0.1794509474955823 0.088177024840630905 +4 0.067272560205402301 -0.78148557790668927 -0.60747442496113713 -0.12541737194421723 +4 -0.61117866728631531 -0.58630168897870427 0.4298657207341281 0.31293198668811495 +4 -0.35008556358761689 -0.66710053886097986 -0.65486926625208763 -0.059692657315481151 +4 0.46389645798324758 0.47388246271298917 -0.51250089951229549 0.54550739298634399 +4 0.60473888028283973 0.43542140981498328 0.61445566011491715 -0.2591202892514034 +4 -0.63570028008489909 0.069092069777339338 0.3692217899235456 -0.67437875829500826 +4 -0.17348381490574671 -0.72178783898784937 0.63597493154819651 -0.21085911860117806 +4 -0.43092415807804269 0.2933088414657809 -0.54542871271981364 0.65633970841595324 +4 -0.5872648129848288 -0.46519898124859577 0.20233236501175669 -0.63069133603048011 +4 -0.52163736145174866 -0.47914359898299425 0.4166108058131846 -0.56986955627667146 +4 -0.12233355367126869 0.84810365508989349 0.2899362015809886 0.42625308313501986 +4 -0.35742920641469561 -0.89683785609357769 0.062741086193053408 -0.25296200976145039 +4 -0.78852300220962024 -0.5639275096056745 0.02976513928181115 -0.24358012106861993 +4 0.16102552058740011 -0.34832861043240554 -0.77230337173088703 -0.5062464448140741 +4 -0.36473468498674155 -0.62632680133606067 -0.54342581243374721 -0.423523002771376 +4 0.38669371701382688 -0.092732194702578818 -0.68929567367330924 0.60559077233964875 +4 -0.33299174094142142 -0.49029782075996031 0.45014108485129106 0.66790534595235718 +4 -0.91282645715811384 -0.23702217761885661 0.24831940460126919 0.22114660234209427 +4 -0.77031248006615938 0.38630334371017139 0.43488982620221239 0.26126471012839414 +4 0.66172375169441366 -0.12261672629530741 -0.32075261333440069 -0.66648674098982941 +4 0.57034670408866528 0.48753644666462048 -0.36186729861405409 -0.5532313336232858 +4 -0.082725091078310692 0.65143093101200744 0.73450978815824752 0.17114225815572512 +4 0.21876173156734111 0.32898578539329398 0.43347340676139118 -0.80994596328489088 +4 -0.33699604068423233 -0.65780652131241102 -0.37739592337029015 -0.55793957209137057 +4 -0.14452111750932306 -0.29980077878167161 0.44117552773782037 0.83342503763746811 +4 -0.60890866237581964 -0.03479345133360897 -0.43514476779108269 0.66232068342460104 +4 0.71245784249865418 -0.23592015892187332 -0.54082939892555126 0.37980134614593941 +4 -0.60755677753783255 -0.50900445335692879 -0.42092208946750237 0.44115056741317993 +4 -0.58629760542664433 0.70435639453918453 -0.22180443664834243 -0.33307653658859659 +4 -0.011568009781532355 0.74683659337957264 -0.59111127229640315 -0.30444826769587074 +4 -0.73402745671071856 0.45001202934735579 0.34256269222203234 -0.37595700304032337 +4 0.96955534991982739 0.21094272681275947 0.1237686011083543 0.012121172646227195 +4 -0.33515152801797943 0.58731518520960269 -0.73529604380016256 -0.04554178807703145 +4 -0.1695992685331843 0.71732121764303036 0.1045943664094339 -0.66764240229896898 +4 0.41021678724271049 -0.058137600323793059 -0.69428206500086809 -0.58848502199375474 +4 -0.39592571191104603 0.58200935707952561 -0.50286009397814668 0.50163698508373367 +4 -0.45424480336633766 0.10665895997127596 0.74939096527122961 0.469785808685594 +4 -0.3454697098753714 0.55281901613449536 -0.74845218643798317 0.12190627373075473 +4 -0.59790770721886854 0.60881430552998739 0.02530587143431251 0.52077934665390191 +4 -0.56362033043166415 -0.60248915001345682 -0.43114306807172986 0.36531438801922317 +4 -0.053942383466521714 -0.3825000007038053 -0.90743388492682919 -0.16537144014049615 +4 0.38943960202183897 0.59168265087118188 -0.56545151418878548 -0.4225080142869867 +4 0.32757750767416155 -0.37422123516358158 0.86705900240528766 -0.029327972425235223 +4 0.30707527803241386 -0.44803155642495435 0.41282918565941928 -0.73112554430585286 +4 -0.073800290225580531 0.40020628037959349 0.0842177799924263 0.90955803324499174 +4 -0.64001436371529896 -0.072225436170897023 0.49413648819736417 -0.5839471137354828 +4 -0.59015206232128126 0.53584682889683521 0.30898692279128281 -0.51876372352268263 +4 0.54724228238081274 0.035143265750607743 0.11919629083806163 0.8276974565005436 +4 -0.35323392216813781 0.82302655685535431 -0.42310323289497054 -0.13724699360772272 +4 -0.41065725894900967 -0.61041191065378753 -0.022994082078545822 -0.67692627899487234 +4 -0.70970746461224699 -0.22383791996053623 0.012330134011180993 -0.66787713544982452 +4 0.55072527194049248 0.69518182768471604 -0.32858051402398963 0.32474412559234861 +4 0.71368785213334873 -0.29618392689360484 0.41394892791451326 -0.48121826258528067 +4 -0.19788064543206449 -0.52332638918801311 -0.42611224498755368 -0.7109156737718566 +4 -0.73260416198605427 0.61391060086551386 -0.29356437748944109 0.014995741225163756 +4 0.06751903424971531 0.71405042477407443 0.5473252660834188 0.4312867074240343 +4 -0.18348163268247566 -0.050192144559362807 -0.64188866758252738 -0.74282849805445195 +4 0.63687181402246784 -0.22003876193015062 -0.51659922543729686 -0.52830150106692175 +4 -0.11028158722874594 0.88420614899701044 0.42720087446642768 -0.15335211263397941 +4 -0.013748538374202431 -0.56244270297759258 0.21313224138875758 -0.79877645886720827 +4 -0.33934630169439356 0.87504428007586932 -0.32234472481531135 0.1234320615423013 +4 0.020641313329517623 -0.034793745494681526 -0.4958497406739199 -0.86746548411570279 +4 0.52203848059009927 0.43330117515096306 0.47283390118077567 -0.56227574933491786 +4 -0.40054895466475599 -0.79547572989096216 -0.4476148397395544 -0.080123987147080605 +4 -0.71649876630467513 0.4523690473971671 0.41922525050126752 0.32594777523862256 +4 -0.36070581595586504 -0.41026930366011455 -0.32455192495028179 0.77216349358210712 +4 0.7705609584869002 -0.4953157763775814 -0.39996122520888822 -0.030481293552415547 +4 0.28303350219616347 0.63943282663784418 0.11251583685128733 0.70594467439748088 +4 -0.40169841911732779 0.38324938887974475 0.68336451387909214 0.4741004399626032 +4 -0.62006911748363935 -0.55619344959426886 -0.52050366542307425 0.18772072462206343 +4 -0.49268718648182941 -0.31898831529416238 -0.80785558586700856 0.053620363350908903 +4 -0.36696017144017445 0.25428710781938241 -0.75112771736490647 0.48629769851361304 +4 -0.6762857935197728 -0.60184509135112363 0.12406042037932141 -0.40623764423695996 +4 -0.3666763716786815 0.59232631101849398 0.084652342433469516 0.71241277406311754 +4 -0.76719307170352091 0.45208369346607641 -0.34422833381589385 0.29756004273174891 +4 0.82489704276678244 0.34579891834392634 0.064163335194787313 -0.44255061103049992 +4 0.45564567873025064 -0.22926076391181213 0.74158978325192637 -0.43574202340534296 +4 0.52214745052855083 0.27359451350772929 0.80769505426164601 -0.011695358322007989 +4 -0.41332356519969343 -0.4212363812082196 0.33906221189151459 0.73263930966366508 +4 0.1838662558741771 -0.35081918453578126 -0.0091141922386424549 0.9181699359118104 +4 0.65789904901077378 -0.64943157580971833 0.27398923148746029 -0.2652119354043791 +4 -0.37303592269023383 0.60300377304686248 -0.10667396639645926 -0.69703035440871652 +4 0.10315594841993071 -0.82693376104025118 0.4808678171094436 -0.27259043935143445 +4 -0.89464835998641834 -0.023071055052995115 0.22497109841239393 0.38530513008714889 +4 0.2653611823080248 0.61537576292522267 0.13785152217861019 -0.7293099966141473 +4 -0.21380924996700196 -0.13124084180973827 0.96126618299929023 0.11414364411387168 +4 0.87240111990088531 -0.36008466117017685 0.27199676339958556 0.18781129754567474 +4 -0.44220740212185472 -0.70374614146887182 -0.24198731969355564 -0.50063571485047287 +4 0.63576818856786788 0.49539717675654271 0.44626626174819567 -0.38887899312262875 diff --git a/Triangulation/test/Triangulation/test_triangulation_static_filters_4.cpp b/Triangulation/test/Triangulation/test_triangulation_static_filters_4.cpp new file mode 100644 index 00000000000..aa332b213a8 --- /dev/null +++ b/Triangulation/test/Triangulation/test_triangulation_static_filters_4.cpp @@ -0,0 +1,64 @@ +// Switch off the static filters for 4, 5, and 6 points. +// #define CGAL_NO_STATIC_FILTER_456 + +#include +#include +#include +#include +#include +#include +#include +#include + +typedef CGAL::Epick_d< CGAL::Dimension_tag<4> > K; +typedef CGAL::Triangulation_vertex Vertex; +typedef CGAL::Triangulation_ds_full_cell DS_full_cell; +typedef CGAL::Triangulation_full_cell Full_cell; +typedef CGAL::Triangulation_data_structure, + Vertex, + Full_cell> TDS; +typedef CGAL::Triangulation Triangulation; + + +int main() +{ + const int D = 4; // we work in Euclidean 4-space + + std::vector points; + std::ifstream in("data/points_4.txt"); + Triangulation::Point p; + int d; + in >> d; + assert(d == D); + int n; + in >> n; + std::cout << n << " points in dimension " << d << std::endl; + points.reserve(n); + while (in >> p) { + points.push_back(p); + } + CGAL::Timer timer; + timer.start(); + Triangulation t(D); // create triangulation + assert(t.empty()); + + //std::array ar = { 0, 0, 0, 0}; + //Triangulation::Point orig(ar.begin(), ar.end()); + //t.insert(orig); // insert origin + t.insert(points.begin(), points.end()); // compute triangulation + + std::cout << "Time taken to insert "<< points.size() << " points: " << timer.time() << " seconds." << std::endl; + timer.reset(); + assert( t.is_valid() ); + // - - - - - - - - - - - - - - - - - - - - - - - - STEP 2 + typedef Triangulation::Face Face; + typedef std::vector Faces; + Faces edges; + std::back_insert_iterator out(edges); + t.tds().incident_faces(t.infinite_vertex(), 1, out); + // collect faces of dimension 1 (edges) incident to the infinite vertex + std::cout << "There are " << edges.size() + << " vertices on the convex hull." << std::endl; + std::cout << "Time taken to find edges: " << timer.time() << " seconds." << std::endl; + return 0; +} \ No newline at end of file From b54a4268d0421b66e0c73375773363c726c15122 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Fri, 4 Jul 2025 10:24:56 +0100 Subject: [PATCH 47/49] Add 5d and 6d test --- .../test/Triangulation/CMakeLists.txt | 5 +- .../test/Triangulation/data/points_5.txt | 100 ++++++++++++++++++ .../test/Triangulation/data/points_6.txt | 100 ++++++++++++++++++ .../test_triangulation_static_filters_5.cpp | 64 +++++++++++ .../test_triangulation_static_filters_6.cpp | 83 +++++++++++++++ 5 files changed, 351 insertions(+), 1 deletion(-) create mode 100644 Triangulation/test/Triangulation/data/points_5.txt create mode 100644 Triangulation/test/Triangulation/data/points_6.txt create mode 100644 Triangulation/test/Triangulation/test_triangulation_static_filters_5.cpp create mode 100644 Triangulation/test/Triangulation/test_triangulation_static_filters_6.cpp diff --git a/Triangulation/test/Triangulation/CMakeLists.txt b/Triangulation/test/Triangulation/CMakeLists.txt index c29c8df0d88..3d38d402271 100644 --- a/Triangulation/test/Triangulation/CMakeLists.txt +++ b/Triangulation/test/Triangulation/CMakeLists.txt @@ -18,6 +18,8 @@ if(TARGET CGAL::Eigen3_support) create_single_source_cgal_program("test_triangulation.cpp") create_single_source_cgal_program("test_triangulation_static_filters_4.cpp") + create_single_source_cgal_program("test_triangulation_static_filters_5.cpp") + create_single_source_cgal_program("test_triangulation_static_filters_6.cpp") create_single_source_cgal_program("test_delaunay.cpp") create_single_source_cgal_program("test_regular.cpp") create_single_source_cgal_program("test_tds.cpp") @@ -25,7 +27,8 @@ if(TARGET CGAL::Eigen3_support) create_single_source_cgal_program("test_insert_if_in_star.cpp") create_single_source_cgal_program("simple_io_test.cpp") create_single_source_cgal_program("issue_8347.cpp") - foreach(target test_triangulation test_triangulation_static_filters_4 test_delaunay test_regular test_tds + foreach(target test_triangulation test_delaunay test_regular test_tds + test_triangulation_static_filters_4 test_triangulation_static_filters_5 test_triangulation_static_filters_6 test_torture test_insert_if_in_star simple_io_test issue_8347) target_link_libraries(${target} PRIVATE CGAL::Eigen3_support) endforeach() diff --git a/Triangulation/test/Triangulation/data/points_5.txt b/Triangulation/test/Triangulation/data/points_5.txt new file mode 100644 index 00000000000..6b885d39507 --- /dev/null +++ b/Triangulation/test/Triangulation/data/points_5.txt @@ -0,0 +1,100 @@ +5 +99 +5 -0.64095941196659478 0.42422061910202236 -0.11427904012605219 -0.54638535945002176 -0.31242797331012567 +5 0.44732454860440324 0.49607483933338892 0.47235547227129621 -0.45736405185315043 -0.34858131602833875 +5 0.049977903241973112 -0.41566435029188453 0.47034156364498109 0.5314014231286428 0.56667159633142805 +5 -0.31858406166597525 0.55293922510375226 -0.098876917441046278 0.66185744478651076 0.38069736927394077 +5 0.1883028908220821 0.1625166528920311 -0.90658142749714132 0.11334777454589573 -0.32154743998911944 +5 0.32925500379336742 0.6048540056497308 -0.086063069913405219 -0.69326730751901255 0.19420700978318073 +5 0.43778721990629893 -0.33151202897445026 -0.41155460656703702 -0.59664728782302312 0.41602517289082297 +5 0.62257265376051363 0.69293819835728199 0.30234871432571214 -0.053274980604846874 0.19490247672643263 +5 0.44105487515035374 -0.42039030928286697 -0.48068520779332113 0.34447782922782266 -0.52822281392073556 +5 0.016084439725856742 -0.25191131235609143 0.7629458374992345 0.52353744836895799 -0.28302680209416425 +5 0.43354106860716723 -0.22705781874127151 0.068849436504207148 0.73368495821250479 0.46631858848343127 +5 -0.64456383107308368 0.37500823725746141 0.15272334561406656 -0.44653621962219042 0.47030551127050385 +5 -0.01363735448457239 0.30485208355187349 0.43905750564271206 -0.62699965173691685 0.56655023888206812 +5 0.0078606115325960974 0.13430751581905762 0.2181755898170861 0.53805349733372398 0.8029928692060484 +5 0.52338099659430393 -0.014615020320186925 -0.48914523816770017 -0.47549568516135032 0.51039153887559274 +5 -0.69482670411781933 -0.030010825193797691 0.34327877508094107 0.56440594895759255 0.28270268653863861 +5 -0.75400593882254485 0.20528914441943982 -0.011183249996636422 0.28305090197467592 -0.5559573124033016 +5 -0.26478115474184827 -0.45814239612429802 0.058790619333674764 -0.82550288646510983 -0.18731025728238973 +5 0.75370149289146393 0.041265752398890396 -0.31598075959816507 -0.50970148811628602 -0.26569107976735346 +5 -0.4519268127481933 0.17613049993809574 0.64157833191917701 -0.1199529988420301 -0.58200405925682863 +5 -0.67422492315129878 0.0052508128669294055 -0.34989951630863758 0.59640231454536097 -0.25936034711917605 +5 -0.84536670492017962 -0.023545078714723985 0.23188336199914605 -0.39941072573741931 -0.26739847059135646 +5 -0.6832142989651836 -0.12691169799999982 0.57357419956766675 -0.1281663346418801 0.41436417660681707 +5 0.63151709095033293 0.11572773552335802 -0.45061917023719628 0.14637578686667163 -0.6027518125249961 +5 -0.63457899564060283 -0.52966844727893914 -0.51456049526593051 -0.21838548693858054 -0.06554471798063273 +5 -0.72586407046590262 0.53323169069976017 0.32142119181324058 -0.28443313725001818 -0.067613039627090948 +5 0.11048228638172189 0.12809754988080219 -0.40887921694271862 -0.77092857165846906 0.45811745815166749 +5 0.51397355334880024 0.32553149207748472 0.5186652471029648 -0.19028592634504338 -0.56977018332521023 +5 0.52471838621722444 0.20265571519982001 -0.5961767637385692 -0.2552020089464791 -0.51288056823234041 +5 -0.42618238121168606 0.67925070936879339 0.11809074419895899 0.5837804744939592 -0.047349609300101507 +5 -0.75979859206098521 -0.17280413824019189 -0.1813534331371959 0.59978037174150067 -0.014807676123859496 +5 0.39184709577815358 -0.46011983815751623 -0.55867615995912812 -0.43478136258019162 -0.36550198783366711 +5 -0.47631197080770421 -0.13866838726394107 0.56944074766219055 -0.20924017616748669 -0.62117128750307116 +5 0.69836618593825928 -0.31047848566369102 0.30402750685925439 0.12607668433628302 -0.55458067494075669 +5 0.1869131312461339 -0.14541256019221543 -0.88720967185608168 -0.37122076821132544 0.13774181688843901 +5 0.066168156653027055 -0.79153357077416386 -0.0022462197273692267 0.46469566632383441 -0.39134291047548841 +5 0.89469701530926082 0.11759766993898985 0.34387377605733604 -0.10906814641318215 0.23567563386927023 +5 0.44839548790055422 -0.215872738581219 -0.31689404873737492 0.48576723561113194 -0.64494092896126687 +5 0.6459123373501775 -0.46663502702373549 -0.32530950233450889 -0.039516958959050295 0.50760333101634691 +5 0.050417291553477184 -0.047285079262706954 -0.2138273059584746 -0.90923374708311278 -0.35041988297366083 +5 -0.59264984179337254 -0.45580598211515067 0.41834884196290151 0.32848532800592428 0.39760370647602505 +5 -0.13481014216375148 0.098149972390238663 -0.71288083854571282 -0.46824774456146634 -0.49470978182874609 +5 0.020717171016991894 -0.61151395060645808 0.18739980633705816 -0.63488453348310792 0.43292543095492175 +5 -0.29319280111406504 -0.71141445302303752 0.43866572973669665 -0.42414838726394366 -0.18867427100902645 +5 -0.12195022572923944 0.1597275130261441 0.37359538094266925 0.87248224896209947 -0.24252109312678227 +5 0.26916794620313855 -0.79643329338601399 -0.17842819374734853 0.24827897357108525 0.446949165880907 +5 0.1453113711518611 0.55890701106684326 -0.33506119215671726 -0.56060928342351557 0.4898558841579691 +5 -0.13559765406608318 0.22424015035632619 0.89051035130708844 -0.2844260176919719 -0.23963051945601349 +5 -0.50566728258429727 -0.35078461251646564 -0.44622952634161051 0.39434995372518228 -0.51635073231610096 +5 -0.081206578882796046 0.7080562679527399 -0.42730522360386669 -0.31493163319195694 -0.45857401284294996 +5 -0.56221514665255945 0.26352028510021092 -0.32431871644229199 0.44640018134880266 -0.5567902984716282 +5 0.67127300073285578 -0.56121759668984272 -0.11438199626517255 0.32066898964093893 0.34426083957638576 +5 0.46427394220581342 0.46813361706404572 0.43431336049942787 -0.029219081499168249 0.6130405968051752 +5 0.085830281871806843 -0.68075675673231806 0.36464348542014058 -0.55908690912039871 -0.28924100239757228 +5 0.41364898446754872 0.44051277392034793 -0.51368389933707281 0.27089667753848867 0.54551522006487996 +5 -0.12351866879421199 0.37823568590421885 0.070649994572097946 -0.14105158010103419 -0.90376652648006106 +5 -0.55545110175425316 -0.57820471208033508 -0.43080087411301676 -0.38794497232024833 -0.14512990664568667 +5 0.7651360106358821 0.26858554943456936 -0.32320967256616323 0.45271513727326118 0.18169534916024627 +5 0.45441543922986888 0.5544933959770898 0.37209878757560882 -0.34801976791573092 -0.4758869780020909 +5 -0.48382144387953951 0.21412341598565873 0.48837003184817313 0.56894254401428956 -0.39732488818612011 +5 -0.27038670992649089 0.7177459738405968 -0.024815590179790174 0.61932329771149031 0.16599573345882931 +5 0.52568529402156838 -0.6686179658279312 -0.30453683091328215 0.39362339728539719 -0.17006741942057541 +5 0.15294938992472662 -0.23462980298095978 0.2749232088212652 0.63828078540744748 0.66224633476210426 +5 -0.53568255103656881 0.078022991883987841 -0.31948842617438705 0.62671984273267689 -0.46054967323641327 +5 -0.23310206113273735 0.38122357958778275 -0.62218473180664657 -0.51308258950399432 0.38725240776077069 +5 0.062519229350989067 0.60935859588898855 0.36557460415396498 0.64016700136989868 -0.28515761734925249 +5 0.40055103808277742 0.11420518938708622 -0.13612792768426063 0.2722551771516088 -0.85665765999400478 +5 -0.55472894977000109 0.14438622704861134 0.35711517550786664 0.19748727548511219 0.71056029805301646 +5 -0.039226168712433881 0.53046963553531501 0.58724338979502344 0.3304297025089995 -0.51285932408901158 +5 -0.36549272643511066 -0.1944460632762828 0.42892482070515675 0.54746427240095541 -0.58729223051810131 +5 -0.51444905998852453 -0.54308624712485065 -0.44536997670499018 -0.057662778907800395 0.48858989002966047 +5 -0.15440932419624182 0.48219819045804607 0.047093757444803284 -0.60392043033692211 0.61376294898897477 +5 0.43481889665508638 0.21724186040536617 0.41122418484105694 -0.036198505808205945 0.77027452195845758 +5 -0.45335160348155307 -0.0090240382671407781 -0.54837361755857228 -0.56749016125780805 -0.41428514672308675 +5 0.47114542832518985 0.46505950774730731 -0.62278318402538824 0.41519154489887244 -0.038713387371715736 +5 -0.50136442182277852 0.18939946722006479 -0.44745642645398664 -0.036410595617002037 0.71499550578930915 +5 -0.50890485936191909 -0.54100797605641604 0.44170900156992093 -0.27187048708488765 -0.42344516781455299 +5 -0.18074952593523871 -0.18860582205590692 0.57887192516180996 0.039211533315703977 -0.77144487986847987 +5 -0.47365805515360904 0.01465502819126422 0.85229770070622901 0.15425760518747605 -0.15882851617236068 +5 -0.30745671248873752 0.57057989273713283 0.60645536747604767 0.19965378698854283 -0.41504121307446745 +5 -0.24028271704320009 0.58912913017564106 0.73907633222396696 0.20948416633465156 0.071229509827560183 +5 -0.64228704065956665 -0.37111771514629771 -0.51078840781267765 0.2517172542564432 0.35422115303741308 +5 -0.45413924048414522 0.52788021885267411 0.39677332786249203 0.39688971574050569 -0.44738071553530406 +5 0.41505598340153971 -0.22025041501083814 0.80109954759996271 0.34641357884080504 0.13211900907884189 +5 -0.20025735851245358 -0.6592702299950165 -0.32273296816240932 -0.32053493269293298 0.56423447465442167 +5 0.58716421726361867 -0.17367850226005824 -0.3234252705857012 -0.576311210468198 -0.43397631600486125 +5 0.24500268030283279 -0.37673527821663111 0.26197175324156724 -0.831532046129559 0.1948575724846065 +5 0.5221610049491775 0.15958174522100452 -0.48361390102525659 -0.55613903653367458 0.39838237697118678 +5 0.16962234853857569 -0.58401971243880413 -0.62282869411315633 -0.32534521602588351 -0.36930223741202295 +5 0.58028138836141019 -0.34025869019701482 0.5807426490215255 0.41704964830718566 0.19053897375886178 +5 0.49658935038669683 -0.1325969999793061 -0.64242700913886752 0.43871198504738879 0.36143655706593286 +5 0.6541749555201487 0.11495532575987849 -0.47189266545231384 -0.46477475130993412 0.34661526724417524 +5 -0.37016121969427745 0.68870175579814763 0.23906708910490926 -0.55701266918805681 -0.14578880706657554 +5 -0.61783888880336935 0.32189539528913458 -0.46086045339499304 0.38667673368942418 -0.39082887315768933 +5 0.032116226250772636 0.37788382751053184 0.37339170905185354 0.24931481645654946 0.80906928926017996 +5 -0.062201604939676421 0.48158547236711069 -0.55318649438944401 -0.64020204958944993 0.21984638108110963 +5 0.43963286001154867 -0.58237961543813122 -0.68268015123007919 0.016241394588271955 0.03522726413596125 +5 0.36598575138692213 -0.072439024911306132 -0.56340774519713788 0.68450645966869139 -0.27355006264916204 diff --git a/Triangulation/test/Triangulation/data/points_6.txt b/Triangulation/test/Triangulation/data/points_6.txt new file mode 100644 index 00000000000..ffa708c9f61 --- /dev/null +++ b/Triangulation/test/Triangulation/data/points_6.txt @@ -0,0 +1,100 @@ +6 +99 +6 -0.52248578532016376 -0.48346324138645691 -0.58974456741264414 0.22252777840028556 -0.015931087719839573 -0.30935551046981807 +6 0.34754132905984381 -0.074985127922628902 0.49930955656743814 -0.49297991574953459 0.3743412038014835 -0.49104143176539627 +6 0.49995311666702108 -0.57210736482775315 -0.25164036633515868 0.10175875354232455 -0.17957742984389918 0.56286257029905196 +6 0.39906582656602591 0.47457715471780493 -0.082408075327093433 -0.15562564967545028 0.36076517581009854 -0.67406308643465562 +6 0.47762233059349435 -0.2842328008690938 0.38623842606683151 0.25571542872305203 -0.48436897768414289 -0.49183820045637949 +6 -0.0042314478443558987 0.66049090972627666 0.47606918346155225 0.26460949335869488 -0.47947866280804441 -0.19280563662043465 +6 -0.38374085169832239 -0.58506782737244056 -0.28816302750472883 0.3515802173604044 -0.5279113747823817 -0.15843483463882974 +6 0.23917340386004574 -0.54065741121454236 -0.33612792325867147 0.0073138842190205713 0.49193768445111852 -0.54355081409662509 +6 -0.33027866095233116 -0.56180392557603231 -0.32646623884361697 -0.56886147641690643 0.33908986323916374 -0.17357083718015598 +6 -0.39192523875775492 0.54423469918164857 0.43041308504361298 0.45346132108040205 0.22340600649055789 0.33077237218748201 +6 0.066836254602841441 -0.52920520249210112 -0.33068598406842653 -0.26992400905794661 0.62845484338677204 0.37189660905209698 +6 0.19743860684640982 0.081543364953937478 0.63446506243002354 -0.097012508529634223 0.70768239786789711 -0.2039533222355914 +6 0.42350956524488981 0.53817080890286528 -0.44826665925687231 -0.4630016158560194 0.23378709098204101 0.24706665212948764 +6 0.09785501454807044 -0.11456262890775261 -0.31134303673278318 -0.49637806372022192 0.55949777724624261 0.56651246127285459 +6 -0.10326273668695649 -0.65814304095940668 -0.31725909306625727 -0.555960810177341 -0.25255650990838052 -0.28749608617380074 +6 -0.61542480481483819 0.0011280450683139097 0.55328692027642723 0.34400335684157046 0.37016000457099912 0.24447470724330039 +6 0.43813574182814297 0.29379416544186204 -0.55292433586480871 -0.36707484188102968 0.413424369672585 0.33216425140632733 +6 0.62368126529536638 -0.3064881542207466 -0.43871298975197703 0.53742069886050947 0.15085507286218508 -0.11418994129448788 +6 0.16476372090864744 0.1109205078824663 -0.23399740855607967 -0.44517529682570806 -0.76827227146836241 0.34259515755693032 +6 -0.4582030961925827 -0.2663673224056024 -0.54961052165427071 0.51751923392842392 0.35978158750630773 -0.14056208054272484 +6 -0.11495774297936535 0.17677227221875624 -0.45880764506787858 0.44376921050871543 0.46355481773156476 0.57725007119384819 +6 -0.52160176513875189 0.31426462456544085 -0.35933189154758549 -0.51331867425419864 -0.43205016526292017 0.22335292571602985 +6 -0.20947455578544788 0.47005432960768112 -0.41475967751478227 0.40696776076920221 -0.54940083105174653 0.30932138002011456 +6 -0.35515545955131517 0.28659947063783103 -0.43389023672403004 -0.75423410037367455 -0.13058245691460899 0.1324528189063271 +6 -0.1072324954411312 0.53549378529716085 0.5303451149630013 -0.13897402329310882 -0.090546592722667144 -0.62687254865762698 +6 0.1102357638392452 0.35390965540162767 -0.15921053186861117 0.56662571537935513 -0.50343143562548798 0.51258182470829694 +6 -0.7521414280651405 -0.34476026492334633 0.19505386347651005 -0.49783859325421242 -0.1655035063064634 -0.04629197260795017 +6 -0.43546464287814302 0.23273923325366619 0.0044777062314122424 0.67556119443422513 0.50870812033248003 0.20252423345567822 +6 0.53251647928358914 -0.39729448899929043 0.58369316051078268 0.22564615748686082 0.37811475342857548 0.15491490414482306 +6 0.24289310169624273 0.11859386955210122 -0.29281369162847548 0.59092439680912245 -0.63259583083229609 0.30303374286919554 +6 -0.35598184358712603 0.77960773923442395 0.26584688554881319 -0.18885184748169259 -0.1277532527817529 0.37792620908390379 +6 -0.57775461906181802 0.56398136201948956 0.24716950956221539 0.26633847280431333 -0.37362408068361069 -0.27658763751791582 +6 -0.57990647596989886 -0.28836767266607671 0.22685410250953331 0.14944399270179443 0.64174541296874976 -0.30808943286460289 +6 -0.5335030315141126 0.54805489620934245 0.42406328570339591 0.093393095662535883 -0.12783094169714468 0.45838592457889477 +6 -0.12909382114378909 -0.56639935858156654 -0.58803157227785718 0.43124035398267208 0.24059819736254101 -0.26998090019131404 +6 -0.43975002441797462 0.42549076003343606 -0.10026091502860482 -0.74594444050366826 -0.23934857461929585 0.042478577866581706 +6 0.96344235807064582 -0.019659692709547497 0.15982487206874871 0.15259660437219755 0.14992374705924039 -0.0092453138313178737 +6 -0.084430753927450891 0.54594301169552162 0.53653011372194326 -0.41453990405074331 0.43836397417083728 -0.20723611398676234 +6 -0.15115603394306507 0.55281885912085593 -0.15786414392716869 0.45384926769871159 -0.57847546467799149 0.32559031533506255 +6 0.54204921011102858 -0.48557698424209411 0.063433639091453539 -0.57195606016163636 0.24305832909277175 -0.28313024127949815 +6 -0.20964859633944177 0.64422189446086331 0.49286994349553021 -0.016379507018461248 -0.25142041984651609 -0.48438034619801107 +6 -0.66412915962225783 -0.078748905511993067 0.26534993875875773 -0.46284549334831837 0.1802169516138587 -0.4854033156654165 +6 -0.025354298800610967 -0.39942902492434534 -0.29081623107075677 0.51367327514162064 -0.4798586670872439 0.51099408935197155 +6 -0.45624010445234175 0.49728960762817503 -0.71376636112381542 0.14604468681390875 0.086243214125533443 -0.079489951774571604 +6 0.042777457242166465 -0.45576092006574703 -0.552753958269535 0.42815940751197412 0.21138424160935149 -0.50686424086565252 +6 -0.69726903180472077 0.58427371427586983 -0.26549450486140008 0.04515354794769965 0.28681486789955868 -0.13285774587986951 +6 0.43703961063496144 -0.10262789880626823 -0.30317985370822126 0.4423049505563586 0.66160948460225333 0.2705274293408918 +6 -0.44503643360426454 0.44210396394781937 -0.30552946308447798 -0.087224327910949404 0.29239336350668083 0.64810218531607033 +6 -0.33416852970579863 0.43114438367926067 -0.37015382974558247 0.4394289146016731 -0.4941491374465089 -0.35798172505540032 +6 0.58427360418679308 0.13212854546799202 0.32961365957906164 -0.15457700371906985 -0.52591774988985029 -0.48170292568554879 +6 -0.14692240259726411 0.50795249686667387 0.32018789462677638 0.58144701994589676 0.41352260304947402 -0.32984269044448206 +6 -0.30224776324831804 -0.54016932402525564 0.062437141365121823 0.29982639105377751 -0.48343582303649113 0.53792093713141187 +6 0.62544035465474512 0.14389245436402084 0.11513839092542102 0.44236996603616979 0.59184763957735986 0.16996370188194654 +6 0.16399979716296756 -0.54611276403195308 0.31075827322246652 0.30247091078354782 0.69596494174650481 -0.049379743875720375 +6 -0.11219854773022092 0.61621528084473354 -0.20736244405315685 0.59256100282170987 -0.26794828151981021 -0.37651853434125537 +6 -0.46302684227036922 -0.25443861931412992 0.32594642236734189 0.11169860998106729 0.43606185210305048 0.64187190603214217 +6 -0.45102710013912661 0.34319441954205482 -0.47602676819679662 0.40310344265859838 0.43758453310888407 0.31339759443247434 +6 -0.51942334686053926 -0.37233703787629813 -0.51991348946415983 -0.3753013101271776 -0.41630361563609058 0.084230081681330463 +6 0.58470861285556364 -0.27462643035008216 -0.26429262032141643 -0.3765127120977812 -0.28781649242151536 0.53688491966927399 +6 0.50045126191095868 0.7871626075227196 -0.21282467832228918 0.28028649755337315 -0.043024392064293426 0.064943060010571332 +6 -0.69508790074194882 0.43616299845857603 -0.3591724438510307 -0.049576650667123003 -0.090986178416972305 0.43228864852267174 +6 0.27823226432546638 -0.072653878980126624 0.44563536030377265 -0.1696865917185551 -0.48061373991631517 -0.67744685415092498 +6 -0.30768510623989498 -0.50822449378663159 0.18610948363783017 -0.71726533661442327 -0.23675331849272591 0.20464433167719714 +6 0.46757798287119678 -0.13228547514553321 -0.69909562048719887 0.51494410224708809 -0.069923553034947503 -0.071273871139087508 +6 0.30979245895544522 -0.27528069259249532 0.40534747257084985 0.38280137237753259 0.7111072591652291 0.108315162414837 +6 -0.75447113237181862 0.22335469077359976 -0.078453049118816759 0.57794290835632367 -0.089983576170946739 -0.18059917583172225 +6 0.53097636282674088 0.47993989234775414 -0.14341376704799877 0.37633704676626029 -0.27087538177519738 -0.50214663998975873 +6 -0.54501406879560677 -0.027692701375586291 -0.018425467843559137 -0.18240602791855356 0.27664238093066079 -0.76944805886565038 +6 0.0049593326721196094 -0.55640609995536572 -0.090097818767519516 0.52601054123491187 -0.32750199904052951 -0.54619171646909292 +6 -0.5246820629099288 0.15438725569802475 -0.40052392363106931 0.61912072585885058 -0.28944503954220524 -0.27085972501316796 +6 0.23252207147619353 -0.088889793755518587 -0.43408635618399199 0.060187728890766561 -0.74515951113397694 -0.43671027750096514 +6 -0.082635336835963871 -0.49519261695606376 0.15854845703115641 -0.56216663205680517 0.38233422075054319 -0.51049709248558417 +6 -0.63625730633727418 0.25866481089124316 0.44123359845324261 -0.49027168711023134 -0.27636701110074274 -0.1297575251319382 +6 -0.44887073462772731 -0.49904555043438975 -0.30600411449649562 -0.21972017202857003 -0.37941072591180663 0.51342052078625433 +6 -0.34623422926080971 0.11834562879027813 -0.58051057852027854 0.45782288815419275 -0.27114225180370755 -0.49598762205263436 +6 0.18476465374966927 0.16780923027338854 -0.42003736535999353 0.32891322320538224 0.44078292065455432 0.67734570576710706 +6 -0.58826517628267483 0.13974808135952232 0.62318859849813157 -0.12874611043451153 0.46759218180316064 0.10407938026297492 +6 -0.31641160184325334 0.54818645501247232 -0.1073258390615717 -0.28649693243150826 -0.24692955978787859 0.666934609418251 +6 0.10226792288332755 0.60622551567028793 -0.53017506565965233 0.071605228794985001 0.40996565618803915 -0.40956946640067621 +6 0.46043313457149759 -0.074442042067401834 0.30689113367015464 0.11103519893154284 -0.70251964235567732 0.42710054991633023 +6 -0.064156465396957033 -0.82837155645765004 0.49937300767398479 -0.21915544003533366 -0.10694135232173688 -0.029078374659791989 +6 0.0042208998272006927 0.36747111488458412 0.76684135998135416 -0.29458715192078899 -0.43565218876602341 0.018085151330519758 +6 0.65851529280804311 0.5194851618852423 -0.41811762733101349 -0.12994527743920986 0.1772560295364389 0.27085965055413574 +6 0.12993326316132806 -0.51206545526523228 0.39669591115833769 0.14384532909354469 -0.65561573013643804 0.33617734369548297 +6 0.16664316396641046 -0.13200053855335347 0.33194364778908209 0.60516407129239946 0.65067562957865477 -0.23455702996626543 +6 -0.54726594996923195 -0.092098298754806088 -0.31987289797771662 -0.4279187441318057 -0.62561590332491124 -0.12324569946937439 +6 -0.11298168347438495 0.36544841132413869 -0.60324357694674791 0.55848239564997726 0.23122326525371081 -0.35272227047200261 +6 -0.58723545016046963 0.58944372207482276 -0.22662085714400246 -0.027374002377005865 0.20652708682257323 0.46146596634115078 +6 0.25382119670786951 -0.49035434210113238 -0.46264611340318978 -0.44845091744845272 -0.46735464124745502 0.24810765200085477 +6 0.59601104905273994 -0.4194785680875594 0.33460981878342455 -0.16429160937140283 -0.25171322089750281 -0.51623013376937443 +6 0.41563033855507381 -0.48609408425483569 -0.08739976523333666 -0.061961248085371137 -0.58592390826984109 -0.48598273777543055 +6 -0.031533077985587805 0.13928846673339906 0.58357639428533792 0.48352257655397113 -0.11733201912831731 0.62568530053903204 +6 0.16248922520275433 -0.47085387551133417 -0.66619299328217085 0.14775302067779422 -0.48370792262089657 0.22864047276252492 +6 0.10089789149314744 0.18194720556532579 -0.66592379404892899 -0.44749698377552732 0.46944144644050056 -0.30435424799785848 +6 -0.16137300109253624 0.4975763651263943 0.040717095122033017 -0.55028097459815839 -0.4278321603812576 -0.48874239133681002 +6 -0.046330434202731273 0.36620529921638473 0.42638300010025254 -0.29858665784419686 -0.55582640196409261 0.532773615670874 +6 0.58075496826088835 0.62077282856651106 -0.01995679162257755 -0.40908951563845819 0.11026240062152064 -0.31217696876264217 +6 -0.2011053790337092 -0.462204381963504 0.52235264924999425 -0.52403901785865747 0.0083805492421482313 -0.44540354712899355 diff --git a/Triangulation/test/Triangulation/test_triangulation_static_filters_5.cpp b/Triangulation/test/Triangulation/test_triangulation_static_filters_5.cpp new file mode 100644 index 00000000000..fb2cebc8cf5 --- /dev/null +++ b/Triangulation/test/Triangulation/test_triangulation_static_filters_5.cpp @@ -0,0 +1,64 @@ +// Switch off the static filters for 4, 5, and 6 points. +// #define CGAL_NO_STATIC_FILTER_456 + +#include +#include +#include +#include +#include +#include +#include +#include + +typedef CGAL::Epick_d< CGAL::Dimension_tag<5> > K; +typedef CGAL::Triangulation_vertex Vertex; +typedef CGAL::Triangulation_ds_full_cell DS_full_cell; +typedef CGAL::Triangulation_full_cell Full_cell; +typedef CGAL::Triangulation_data_structure, + Vertex, + Full_cell> TDS; +typedef CGAL::Triangulation Triangulation; + + +int main() +{ + const int D = 5; // we work in Euclidean 5-space + + std::vector points; + std::ifstream in("data/points_5.txt"); + Triangulation::Point p; + int d; + in >> d; + assert(d == D); + int n; + in >> n; + points.reserve(n); + while (in >> p) { + points.push_back(p); + } + + CGAL::Timer timer; + timer.start(); + Triangulation t(D); // create triangulation + assert(t.empty()); + + //std::array ar = { 0, 0, 0, 0, 0 }; + //Triangulation::Point orig(ar.begin(), ar.end()); + //t.insert(orig); // insert origin + t.insert(points.begin(), points.end()); // compute triangulation + + std::cout << "Time taken to insert "<< points.size() << " points: " << timer.time() << " seconds." << std::endl; + timer.reset(); + assert( t.is_valid() ); + // - - - - - - - - - - - - - - - - - - - - - - - - STEP 2 + typedef Triangulation::Face Face; + typedef std::vector Faces; + Faces edges; + std::back_insert_iterator out(edges); + t.tds().incident_faces(t.infinite_vertex(), 1, out); + // collect faces of dimension 1 (edges) incident to the infinite vertex + std::cout << "There are " << edges.size() + << " vertices on the convex hull." << std::endl; + std::cout << "Time taken to find edges: " << timer.time() << " seconds." << std::endl; + return 0; +} \ No newline at end of file diff --git a/Triangulation/test/Triangulation/test_triangulation_static_filters_6.cpp b/Triangulation/test/Triangulation/test_triangulation_static_filters_6.cpp new file mode 100644 index 00000000000..8a450ad5e84 --- /dev/null +++ b/Triangulation/test/Triangulation/test_triangulation_static_filters_6.cpp @@ -0,0 +1,83 @@ + +#include +#include +#include +#include +#include +#include +#include +#include + +typedef CGAL::Epick_d< CGAL::Dimension_tag<6> > K; +typedef CGAL::Triangulation_vertex Vertex; +typedef CGAL::Triangulation_ds_full_cell DS_full_cell; +typedef CGAL::Triangulation_full_cell Full_cell; +typedef CGAL::Triangulation_data_structure, + Vertex, + Full_cell> TDS; +typedef CGAL::Triangulation Triangulation; + + +int main() +{ + const int D = 6; // we work in Euclidean 6-space + + std::vector points; + std::ifstream in("data/points.txt"); + Triangulation::Point p; + int d; + in >> d; + assert(d == D); + int n; + in >> n; + points.reserve(n); + while (in >> p) { + points.push_back(p); + } + + CGAL::Timer timer; + timer.start(); + Triangulation t(D); // create triangulation + assert(t.empty()); + + + t.insert_and_index(points.begin(), points.end()); // compute triangulation + + std::cout << "Time taken to insert "<< points.size() << " points: " << timer.time() << " seconds." << std::endl; + timer.reset(); + assert( t.is_valid() ); + + std::vector infinite_cells; + t.tds().incident_full_cells(t.infinite_vertex(), std::back_inserter(infinite_cells)); + + return 0; + std::set> edges; + + for(auto ch : infinite_cells) { + std::vector vertices; + std::cout << "cell" << std::endl; + vertices.reserve(D); + for(int i = 0; i < D + 1; ++i) { + if(ch->vertex(i) != t.infinite_vertex()) { + vertices.push_back(ch->vertex(i)); + std::cout << ch->vertex(i)->data() << " "; + } + } + std::cout << std::endl; + for (int i = 0; i < D-1; i++) { + for (int j = 0; j < D-1; j++) { + + if((i != j) && (vertices[i]->data() < vertices[j]->data())) { + edges.insert(std::make_pair(vertices[i]->data(), vertices[j]->data())); + } + } + } + } + for(auto pair : edges) { + std::cout << "edge between vertices " << pair.first << " and " << pair.second << std::endl; + } + + std::cout << "Time taken to find edges: " << timer.time() << " seconds." << std::endl; + + return 0; +} \ No newline at end of file From 17586da7a4fefbedbd9dcaecdfe559c199c56fec Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Thu, 17 Jul 2025 19:34:06 +0100 Subject: [PATCH 48/49] No need to spatial_sort() --- Triangulation/include/CGAL/Triangulation.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/Triangulation/include/CGAL/Triangulation.h b/Triangulation/include/CGAL/Triangulation.h index 8271cdb27c5..488bf796412 100644 --- a/Triangulation/include/CGAL/Triangulation.h +++ b/Triangulation/include/CGAL/Triangulation.h @@ -699,8 +699,6 @@ public: using Search_traits_d = CGAL::Spatial_sort_traits_adapter_d; CGAL::spatial_sort(indices.begin(), indices.end(), Search_traits_d(start)); - std::vector points(start, end); - spatial_sort(points.begin(), points.end(), geom_traits()); Full_cell_handle hint = Full_cell_handle(); for (auto index : indices) { From 5b547309e7be0da2fca48a4eeb9bc15c471effb0 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Tue, 22 Jul 2025 07:20:17 +0100 Subject: [PATCH 49/49] Read the right input file in test_triangulation_static_filters_6 --- .../test/Triangulation/test_triangulation_static_filters_6.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Triangulation/test/Triangulation/test_triangulation_static_filters_6.cpp b/Triangulation/test/Triangulation/test_triangulation_static_filters_6.cpp index 8a450ad5e84..624ff5c7cdf 100644 --- a/Triangulation/test/Triangulation/test_triangulation_static_filters_6.cpp +++ b/Triangulation/test/Triangulation/test_triangulation_static_filters_6.cpp @@ -23,7 +23,7 @@ int main() const int D = 6; // we work in Euclidean 6-space std::vector points; - std::ifstream in("data/points.txt"); + std::ifstream in("data/points_6.txt"); Triangulation::Point p; int d; in >> d;