Subject: CGAL users discussion list
List archive
- From: Ronald Paloschi <>
- To: "" <>
- Subject: Re: [cgal-discuss] Intersection of geometries
- Date: Wed, 21 Oct 2015 19:20:26 +0000
- Accept-language: en-US
- Authentication-results: mail3-smtp-sop.national.inria.fr; spf=None ; spf=Pass ; spf=Pass
- Ironport-phdr: 9a23:fy3XWRGyaOuErV8hkJt5CZ1GYnF86YWxBRYc798ds5kLTJ75oMSwAkXT6L1XgUPTWs2DsrQf27eQ6/qrADdbqb+681k8M7V0HycfjssXmwFySOWkMmbcaMDQUiohAc5ZX0Vk9XzoeWJcGcL5ekGA6ibqtW1aJBzzOEJPK/jvHcaK1oLsh730o8eYOl4TzBOGIppMbzyO5T3LsccXhYYwYo0Q8TDu5kVyRuJN2GlzLkiSlRuvru25/Zpk7jgC86l5r50IAu3GePFyRrNRCHEqMns++dbwnRjFVwqGoHUGGC1CmRVBB03J7QrxQ4zqmir8rOt0nieAa57YV7cxDA6l6a5vRFfQgSMALDU58SmDkMt2haZX5gqooxtkyI7VSIiIOPN1c7ibdtQfEzkSFv1NXjBMV9vvJ7AECPAMaL5V
- Spamdiagnosticmetadata: NSPM
- Spamdiagnosticoutput: 1:23
Hi Everybody,
Well, as I imagined, it was easy to implement that way.
Now, I would like to optimize it on the Beziers case.
My definitions:
<code>
using Nt_traits = CGAL::CORE_algebraic_number_traits;
using Rational = Nt_traits::Rational;
using Algebraic = Nt_traits::Algebraic;
using Rat_kernel = CGAL::Cartesian<Rational>;
using Alg_kernel = CGAL::Cartesian<Algebraic>;
using Bezier_Traits =
CGAL::Arr_Bezier_curve_traits_2<Rat_kernel, Alg_kernel, Nt_traits>;
</code>
My application limits the beziers to cubic Beziers, two points and two control points.
If I want to intersect two Bezier_Traits::Curve_2 objects:
* Convert them both to Bezier_Traits::X_monotone_curve_2 using Make_x_monotone_2. (it can result in any number of
X_monotone_curve_2 curves).
* Then I try to intersect, using Intersect_2.
Something like this:
<code>
Bezier_Traits bzTraits;
auto intersectToObject = bzTraits.intersect_2_object();
std::vector<CGAL::Object> results;
intersectToObject(curve1, curve2, std::back_inserter(results));
</code>
Now 'results' contains std::pair<Bezier_Traits::Point_2, unsigned int> objects.
With the first element of the pair (a Bezier_Traits::Point_2), I
can approximate every point of intersection. In fact, I found myself calling the refine() method to get a better approximation.
It works like a charm! But two things are slow:
1) the intersectToObject call.
2) several calls to refine() to get a better approximation.
I think this sums up what I'm trying to do... maybe it is a little
naive because I learned by your Efi,s instructions, the online docs and hacking the code.
The questions are:
- Is this reasonable at least?
- How can I improve performance? (I have a test suite that I run
against a proprietary implementation of ours that runs in 0.085s. Running it against OpenCasCade takes 0.033s. My CGAL implementation takes over 2s. to run. (Results of OpenCascade and CGAL after refining the solutions are quite the same for my application).
Thanks a lot for your help!
From: <> on behalf of Ronald Paloschi <>
Sent: Tuesday, October 13, 2015 8:20 AM
To:
Subject: Re: [cgal-discuss] Intersection of geometries
Sent: Tuesday, October 13, 2015 8:20 AM
To:
Subject: Re: [cgal-discuss] Intersection of geometries
Thanks for answering!
I've made some experiments and this approach of approximating circles and arcs with bezier curves seems to be the way to go (and not difficult to be done ATM).
The book on arrangements is a great Resource!
Well, on to coding! Thanks for your help!
Ronald
From: <> on behalf of Efi Fogel <>
Sent: Saturday, October 10, 2015 12:51 PM
To:
Subject: Re: [cgal-discuss] Intersection of geometries
Sent: Saturday, October 10, 2015 12:51 PM
To:
Subject: Re: [cgal-discuss] Intersection of geometries
Hi Ronald,
There is no immediate way to handle all three types at the same time.You need to define an appropriate instance of the Arrangement_2
CGAL 4.6.3 - 2D Arrangements: CGAL::Arrangement_2< Traits ...
Types: typedef Arrangement_2 < Traits_2, Dcel > Self a private type used as an abbreviation of the Arrangement_2 type hereafter. typedef unspecified_type
|
<Geom_traits, Dcel=...> class template.
BW, if, for example, you are willing to approximate circles with cubic Bézier curves, you can use the
Arr_Bezier_curve_traits_2 geometry traits, but again, this may be not intuitive or even desired.
____ _ ____ _
/_____/_) o /__________ __ //
(____ ( ( ( (_/ (_/-(-'_(/
_/
/_____/_) o /__________ __ //
(____ ( ( ( (_/ (_/-(-'_(/
_/
On Thu, Oct 8, 2015 at 3:25 PM, Ronald Paloschi
<> wrote:
Hi,
In our company, we are experiencing around with CGAL, it is such an amazing library!I need some advice that I think you fellows can give me.
First, context: We have a legacy CAD system with an in-house geometric library. We would like to start experiencing with cgal to replace this library.Our model has 3 main types of geometries (Line segments, Arcs and Bezier curves).It was really easy to move around and start using things.
Now I have a new challenge: Intersections. The Arrangements package seems the way to go, I'm still studying it.My question: How can I setup an Arrangement that is able to manage those 3 types together (if possible)?
Thanks in advance!
- [cgal-discuss] Intersection of geometries, Ronald Paloschi, 10/08/2015
- Re: [cgal-discuss] Intersection of geometries, Efi Fogel, 10/10/2015
- Re: [cgal-discuss] Intersection of geometries, Ronald Paloschi, 10/13/2015
- Re: [cgal-discuss] Intersection of geometries, Ronald Paloschi, 10/21/2015
- Re: [cgal-discuss] Intersection of geometries, Efi Fogel, 10/28/2015
- Re: [cgal-discuss] Intersection of geometries, Ronald Paloschi, 10/21/2015
- Re: [cgal-discuss] Intersection of geometries, Ronald Paloschi, 10/13/2015
- Re: [cgal-discuss] Intersection of geometries, Efi Fogel, 10/10/2015
Archive powered by MHonArc 2.6.18.