Subject: CGAL users discussion list
List archive
Re: [cgal-discuss] Exact_predicates_inexact_constructions_kernel - sign checks are in the wrong order?
Chronological Thread
- From: "Sebastien Loriot (GeometryFactory)" <>
- To:
- Subject: Re: [cgal-discuss] Exact_predicates_inexact_constructions_kernel - sign checks are in the wrong order?
- Date: Mon, 11 Feb 2013 07:12:41 +0100
- Organization: GeometryFactory
On 02/08/2013 08:41 PM, Jeffrey Bush wrote:
I was hoping to do something while still using doubles, which is why IUnfortunately all rational numbers cannot be represented using double to there is no chance that the intersection of your polyhedron with a
went for Exact_predicates_inexact_constructions_kernel.
plane is exactly on the polyhedron. One solution is to insert the intersection segments inside the polyhedron.
I just tried
Exact_predicates_exact___constructions_kernel like you suggested, but I
get the following exception:
CGAL error: assertion violation!
Expression : !(i>s)
File : C:\CGAL\CGAL-4.1\include\CGAL/Interval_nt.h
Line : 90
Explanation: Variable used before being initialized (or CGAL bug)
Refer to the bug-reporting instructions at
http://www.cgal.org/bug_report.html
I would need a minimal example showing the problem to debug this.
Sebastien.
l_nt<0> > > & ac, const
The stack trace is:
CrossSectionCGAL.exe!CGAL::Interval_nt<0>::Interval_nt<0>(double i,
double s) Line 94C++
CrossSectionCGAL.exe!CGAL::Interval_nt<0>::operator-() Line 99 + 0x6d
bytesC++
CrossSectionCGAL.exe!CGAL::PlaneC3<CGAL::Simple_cartesian<CGAL::Interval_nt<0>
> >::opposite() Line 269 + 0x1a bytesC++
CrossSectionCGAL.exe!CGAL::CommonKernelFunctors::Construct_opposite_plane_3<CGAL::Simple_cartesian<CGAL::Interval_nt<0>
> >::operator()(const
CGAL::Plane_3<CGAL::Simple_cartesian<CGAL::Interval_nt<0> > > & p) Line
1254 + 0x3f bytesC++
CrossSectionCGAL.exe!CGAL::Lazy_rep_1<CGAL::Plane_3<CGAL::Simple_cartesian<CGAL::Interval_nt<0>
> >,CGAL::Plane_3<CGAL::Simple_cartesian<CGAL::Gmpq>
>,CGAL::CommonKernelFunctors::Construct_opposite_plane_3<CGAL::Simple_cartesian<CGAL::Interval_nt<0> > >,CGAL::CommonKernelFunctors::Construct_opposite_plane_3<CGAL::Simple_cartesian<CGAL::Gmpq>
>,CGAL::Cartesian_converter<CGAL::Simple_cartesian<CGAL::Gmpq>,CGAL::Simple_cartesian<CGAL::Interval_nt<0> >,CGAL::NT_converter<CGAL::Gmpq,CGAL::Interval_nt<0> > >,CGAL::Plane_3<CGAL::Epeck>
>::Lazy_rep_1<CGAL::Plane_3<CGAL::Simple_cartesian<CGAL::Interval_nt<0> > >,CGAL::Plane_3<CGAL::Simple_cartesian<CGAL::Gmpq>
>,CGAL::CommonKernelFunctors::Construct_opposite_plane_3<CGAL::Simple_cartesian<CGAL::Interval_nt<0> > >,CGAL::CommonKernelFunctors::Construct_opposite_plane_3<CGAL::Simple_cartesian<CGAL::Gmpq>
>,CGAL::Cartesian_converter<CGAL::Simple_cartesian<CGAL::Gmpq>,CGAL::Simple_cartesian<CGAL::Interval_nt<0> >,CGAL::NT_converter<CGAL::Gmpq,CGAL::Interval_nt<0> > >,CGAL::Plane_3<CGAL::Epeck> >(const
CGAL::CommonKernelFunctors::Construct_opposite_plane_3<CGAL::Simple_cartesian<CGAL::Interva
CGAL::CommonKernelFunctors::Construct_opposite_plane_3<CGAL::Simple_cartesian<CGAL::Gmpq> > & ec, const
CGAL::Plane_3<CGAL::Epeck> & l1) Line 354 + 0x6d bytesC++
CrossSectionCGAL.exe!CGAL::Lazy_construction<CGAL::Epeck,CGAL::CommonKernelFunctors::Construct_opposite_plane_3<CGAL::Simple_cartesian<CGAL::Interval_nt<0>
>
>,CGAL::CommonKernelFunctors::Construct_opposite_plane_3<CGAL::Simple_cartesian<CGAL::Gmpq>
>,CGAL::Default,1>::operator()<CGAL::Plane_3<CGAL::Epeck> >(const CGAL::Plane_3<CGAL::Epeck>
& l0) Line 1381 + 0xbf bytesC++
... (a few really long lines)
CrossSectionCGAL.exe!CGAL::Polyhedron_3<CGAL::Epeck,CGAL::Polyhedron_items_3,CGAL::HalfedgeDS_default,std::allocator<int>
>::inside_out_geometry(CGAL::Boolean_tag<1> __formal) Line 1474C++
>CrossSectionCGAL.exe!CGAL::Polyhedron_3<CGAL::Epeck,CGAL::Polyhedron_items_3,CGAL::HalfedgeDS_default,std::allocator<int>
>::inside_out() Line 1482C++
Jeff
On Thu, Feb 7, 2013 at 9:59 PM, Sebastien Loriot (GeometryFactory)
<
<mailto:>>
wrote:
Check this FAQ entry:
http://www.cgal.org/FAQ.html#__inexact_NT
<http://www.cgal.org/FAQ.html#inexact_NT>
If you use Exact_predicates_exact___constructions_kernel.h this
should be OK.
Even if it's not documented and not officially supported, I suggest
you to have a look at the file CGAL/intersection_of___Polyhedra_3.h
where the following function is defined:
template <typename Polyhedron, typename OutputIterator>
OutputIterator
intersection_Polyhedron_3___Polyhedron_3(const Polyhedron& P, const
Polyhedron& Q, OutputIterator out)
where OutputIterator accepts std::vector<typename Kernel::Point_3>
objects (to represent a polyline).
A plane can always be represented by a triangulated quad.
Sebastien.
On 02/08/2013 12:31 AM, Jeffrey Bush wrote:
Hi,
I am using AABB_tree to determine intersections between a plane
(call it
"h") and a polyhedron, resulting in a vector of segments ("segs").
However the following test fails:
h.has_on(*segs.begin())
This shouldn't be. However doing research I realized the result
may be
because of using Cartesian instead of
Exact_predicates_inexact___constructions_kernel, so I switched
to that.
But still the same problem!
Running the debugger I get to this function:
inline
Uncertain<Sign>
sign (const Interval_nt<Protected> & d)
{
if (d.inf()> 0.0)return POSITIVE;
if (d.sup()< 0.0)return NEGATIVE;
if (d.inf() == d.sup())return ZERO;
return Uncertain<Sign>::__indeterminate();
}
With the following value for d:
d = {
_inf=5.6843418860808015e-014,
_sup=5.6843418860808015e-014,
tester={...}
}
It seems as though the d.inf() == d.sup() check should be first? It
seems that if sup <= inf and inf > 0 or sup < 0, then the d.inf() ==
d.sup() can only be 0 == 0... (but I guess sup > inf - I don't
understand exactly what this is all about).
Just for scale, my points have values on the order of 2500 and
the plane
is <0,0,1> -300.
If this is right (and I could easily be, I don't know too much about
double-precision mathematical testing), then what am I doing
wrong? My
meshes are LARGE so I don't want to use the infinite-precision
numbers.
Thanks!
Jeff
--
You are currently subscribed to cgal-discuss.
To unsubscribe or access the archives, go to
https://sympa.inria.fr/sympa/__info/cgal-discuss
<https://sympa.inria.fr/sympa/info/cgal-discuss>
- [cgal-discuss] Exact_predicates_inexact_constructions_kernel - sign checks are in the wrong order?, Jeffrey Bush, 02/08/2013
- Re: [cgal-discuss] Exact_predicates_inexact_constructions_kernel - sign checks are in the wrong order?, Sebastien Loriot (GeometryFactory), 02/08/2013
- Re: [cgal-discuss] Exact_predicates_inexact_constructions_kernel - sign checks are in the wrong order?, Jeffrey Bush, 02/08/2013
- Re: [cgal-discuss] Exact_predicates_inexact_constructions_kernel - sign checks are in the wrong order?, Sebastien Loriot (GeometryFactory), 02/11/2013
- Re: Re: [cgal-discuss] Exact_predicates_inexact_constructions_kernel - sign checks are in the wrong order?, Laurent Rineau (CGAL/GeometryFactory), 02/18/2013
- Re: [cgal-discuss] Exact_predicates_inexact_constructions_kernel - sign checks are in the wrong order?, Jeffrey Bush, 02/08/2013
- Re: [cgal-discuss] Exact_predicates_inexact_constructions_kernel - sign checks are in the wrong order?, Laurent Rineau (CGAL/GeometryFactory), 02/18/2013
- Re: [cgal-discuss] Exact_predicates_inexact_constructions_kernel - sign checks are in the wrong order?, Sebastien Loriot (GeometryFactory), 02/08/2013
Archive powered by MHonArc 2.6.18.