Skip to Content.
Sympa Menu

cgal-discuss - Re: [cgal-discuss] Assertion violation for certain halfspace intersections using Nef polyhedra

Subject: CGAL users discussion list

List archive

Re: [cgal-discuss] Assertion violation for certain halfspace intersections using Nef polyhedra


Chronological Thread 
  • From: "Sebastien Loriot (GeometryFactory)" <>
  • To:
  • Subject: Re: [cgal-discuss] Assertion violation for certain halfspace intersections using Nef polyhedra
  • Date: Tue, 4 Feb 2025 08:58:04 +0100
  • Authentication-results: mail3-smtp-sop.national.inria.fr; spf=None ; spf=Pass ; spf=None
  • Ironport-data: A9a23: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 NVhD7jSyXlp8Hxs5YA=
  • Ironport-hdrordr: A9a23:kFkKxa1sVwTGSJEhLVR6AQqjBGIkLtp133Aq2lEZdPUnSL3iqy nIpoVl6faUskdsZJhEo7q90ca7MBbhHPJOkPMs1PKZLXTbUQiTXeVfBOnZsl/d8kTFn4Y3pM RdmupFeaXN5DBB7foSizPIderIruP3iZxAyd2uqEtFfEVFb+VP4W5CZTpz0XcbeOCFP/cE/V aniPavbgDARUgq
  • Ironport-phdr: A9a23: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
  • Ironport-sdr: 67a1c88e_/SJwklDPIj8qhUayVYoTuiWk5EG/0Rhyqw9EERjeGfcljuV jwRLxhTCJa8Y5HdhpJDvZ79u1B2DERG6h6YEVcA==

Hello,

The patch in https://github.com/CGAL/cgal/pull/8646 should fix your issue.

Best,

Sebastien

On 1/11/25 10:57, Gard Spreemann wrote:
Hello,

I'm seeing some assertion violations regarding certain halfspace
intersections computed using Nef polyhedra.

As a simple example, consider the following example program:

***
#include <iostream>

#include <CGAL/Extended_cartesian.h>
#include <CGAL/Gmpq.h>
#include <CGAL/Nef_polyhedron_3.h>

using Kernel = CGAL::Extended_cartesian<CGAL::Gmpq>;
using Nef = CGAL::Nef_polyhedron_3<Kernel>;

int main(int argc, char ** argv)
{
Nef hspace_1_1(Nef::Plane_3(1.0, 0.0, 0.0, 0.0), Nef::INCLUDED);
Nef hspace_1_2(Nef::Plane_3(1.0, 0.0, 0.0, 1.0), Nef::INCLUDED);
Nef hspace_2_1(Nef::Plane_3(0.0, 1.0, 0.0, 0.0), Nef::INCLUDED);
Nef hspace_2_2(Nef::Plane_3(0.0, 1.0, 0.0, 1.0), Nef::INCLUDED);
Nef hspace_3_1(Nef::Plane_3(0.0, 0.0, 1.0, 0.0), Nef::INCLUDED);
Nef hspace_3_2(Nef::Plane_3(0.0, 0.0, 1.0, 1.0), Nef::INCLUDED);

Nef intersection_1 = hspace_1_1*hspace_1_2;
std::cout << "OK 1" << std::endl;
Nef intersection_2 = hspace_2_1*hspace_2_2;
std::cout << "OK 2" << std::endl;
Nef intersection_3 = hspace_3_1*hspace_3_2;
std::cout << "OK 3" << std::endl;

Nef intersection_1_2 = intersection_1*intersection_2;
std::cout << "OK 1_2" << std::endl;
Nef intersection_1_3 = intersection_1*intersection_3; // Line 30
std::cout << "OK 1_3" << std::endl;
Nef intersection_2_3 = intersection_2*intersection_3;
std::cout << "OK 2_3" << std::endl;
return 0;
}
***

To me, there doesn't seem to be anything mathematically conceptually
different about the intersections that define `intersection_1_2` and
those which define `intersection_1_3`. Yet, the latter computation
terminates with an assertion violation. Here's the gdb backtrace:

#5 0x00007ffff7ca8e85 in std::terminate() () from
/lib/x86_64-linux-gnu/libstdc++.so.6
#6 0x00007ffff7ca90d8 in __cxa_throw () from
/lib/x86_64-linux-gnu/libstdc++.so.6
#7 0x000055555555dc5e in CGAL::assertion_fail (
expr=0x55555562c7c8 "normalized(cet->circle()) ==
normalized(ce->circle().opposite())",
file=0x55555562c738 "/usr/include/CGAL/Nef_3/SNC_external_structure.h", line=697,
msg=0x55555562b09c "")
at /usr/include/CGAL/assertions_impl.h:173
#8 0x000055555556d9a5 in CGAL::SNC_external_structure_base<CGAL::SNC_items,
CGAL::SNC_structure<CGAL::Extended_cartesian<CGAL::Gmpq>, CGAL::SNC_items, bool>
>::link_shalfedges_to_facet_cycles (this=0x7fffffffda60)
at /usr/include/CGAL/Nef_3/SNC_external_structure.h:697
#9 0x0000555555566724 in CGAL::SNC_external_structure_base<CGAL::SNC_items,
CGAL::SNC_structure<CGAL::Extended_cartesian<CGAL::Gmpq>, CGAL::SNC_items, bool>
>::build_external_structure (this=0x7fffffffda60)
at /usr/include/CGAL/Nef_3/SNC_external_structure.h:1014
#10 0x0000555555572684 in CGAL::SNC_external_structure_base<CGAL::SNC_items,
CGAL::SNC_structure<CGAL::Extended_cartesian<CGAL::Gmpq>, CGAL::SNC_items, bool>
>::build_after_binary_operation<CGAL::ID_support_handler<CGAL::SNC_items,
CGAL::SNC_decorator<CGAL::SNC_structure<CGAL::Extended_cartesian<CGAL::Gmpq>, CGAL::SNC_items, bool> > >
> (this=0x7fffffffda60)
at /usr/include/CGAL/Nef_3/SNC_external_structure.h:1049
#11 0x0000555555567c58 in
CGAL::Binary_operation<CGAL::SNC_structure<CGAL::Extended_cartesian<CGAL::Gmpq>, CGAL::SNC_items,
bool> >::operator()<CGAL::Nef_polyhedron_3<CGAL::Extended_cartesian<CGAL::Gmpq>,
CGAL::SNC_items, bool>::AND> (this=0x7fffffffdc40,
pl0=0x5555557d5790, snc1=..., pl1=0x5555557a8b80, snc2=...,
pl2=0x5555557c9630, BOP=...)
at /usr/include/CGAL/Nef_3/Binary_operation.h:525
#12 0x00005555555637e5 in
CGAL::Nef_polyhedron_3<CGAL::Extended_cartesian<CGAL::Gmpq>, CGAL::SNC_items,
bool>::intersection (
this=0x7fffffffdd30, N1=...) at /usr/include/CGAL/Nef_polyhedron_3.h:1416
#13 0x0000555555562313 in
CGAL::Nef_polyhedron_3<CGAL::Extended_cartesian<CGAL::Gmpq>, CGAL::SNC_items,
bool>::operator* (
this=0x7fffffffdd30, N1=...) at /usr/include/CGAL/Nef_polyhedron_3.h:1488
#14 0x000055555555b298 in main (argc=1, argv=0x7fffffffe048) at test.cpp:30

If I flip the signs of the `d` arguments in all the halfspace
constructions, i.e. make them `Nef hspace_1_2(Nef::Plane_3(1.0, 0.0,
0.0, -1.0), Nef::INCLUDED)` etc., then the whole program terminates
normally. Seeing as that sign only shifts some of the halfspaces in a
direction normal to their defining planes, I'm very surprised that this
has an effect.

Does anyone see anything obvious that I'm overlooking or
misunderstanding here?


Best,
Gard



  • Re: [cgal-discuss] Assertion violation for certain halfspace intersections using Nef polyhedra, Sebastien Loriot (GeometryFactory), 02/04/2025

Archive powered by MHonArc 2.6.19+.

Top of Page