Subject: CGAL users discussion list
List archive
[cgal-discuss] Assertion violation for certain halfspace intersections using Nef polyhedra
Chronological Thread
- From: Gard Spreemann <>
- To:
- Subject: [cgal-discuss] Assertion violation for certain halfspace intersections using Nef polyhedra
- Date: Sat, 11 Jan 2025 10:57:28 +0100
- Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None ; spf=Pass ; spf=None
- Ironport-data: A9a23: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 Pv+oapfT5B6dNcpmNWmiskmmw==
- Ironport-hdrordr: A9a23:nXRiRKHz62RgyqmQpLqEjceALOsnbusQ8zAXPiFKOH9om6mj/f xG88506faZslsssRIb+exoWpPgfZq0z/ccirX5Vo3MYOCJggeVEL0=
- Ironport-phdr: A9a23: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 G/DSAnmNzWHnT75ERe1PrMU5Bw=
- Ironport-sdr: 67824293_mEfwGY2YfjF5xNiEsuZ22XooI5VQXbejQKpaBfAB3g76N/S lfB7wis65huZPiDBrA+8IejSfBZD0xvJLJCaJ/Q==
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
Attachment:
signature.asc
Description: PGP signature
- [cgal-discuss] Assertion violation for certain halfspace intersections using Nef polyhedra, Gard Spreemann, 01/11/2025
Archive powered by MHonArc 2.6.19+.