Subject: CGAL users discussion list
List archive
- From: Nicklas SB Karlsson <>
- To:
- Subject: Re: [cgal-discuss] about arc in cgal arrangement
- Date: Mon, 30 Jun 2025 22:15:35 +0200
- Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None ; spf=Pass ; spf=Pass
- Ironport-data: A9a23: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
- Ironport-hdrordr: A9a23:UoLq0a71EfLZm1YB/APXwBLXdLJyesId70hD6qkRc202TiX8ra qTdZsgtCMc5Ax/ZJhko7C90cq7MBfhHPxOjLX5VI3KNGLbUSmTXeJfBODZrwEIdReRygcQ79 YET4FOTPPWIBxRhdrh7GCDYq8d6ejC3oeEwd3VyWxgJDsaDZ1I3kNWLSveKFB/WQUuP+tfKK ah
- Ironport-phdr: A9a23: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 HmLxjaLi1eliePJxyc1CHJz
- Ironport-sdr: 6862f06e_AecWkvd+RDVfRytdwTYP5anGnX20R+2egRMtnpNeM0PVThm Kuk16n7BMeB8qI5GDiZ3XvNIjie7+udZ/mi6dhw==
In attached files I do this for polygon. Have complete program that compile and run if you need?
Did not find any examples so had to struggle a while before I figured how it should be done so guess maybe this help you how to solve your problem.
Nicklas Karlsson
sön 2025-06-22 klockan 17:45 +0800 skrev ж��:
I submitted three straight lines and one circular arc to the CGAL Arrangement, as shown in the left figure. The final calculation result, shown in the right figure, is incorrect. However, if I discretize the arc into line segments, the result becomes correct. so how to do .
#ifndef CONSTRUCT_POLYGON_CPP_INCLUDED #define CONSTRUCT_POLYGON_CPP_INCLUDED #include "construct_polygon.hxx" void add_to_polygon (Polygon_2& pgn, const K_Point_2& source, const K_Point_2& mid, const K_Point_2& target) { std::list<CGAL::Object> objects; { Traits_2 traits; Curve_2 circular_arc(source, mid, target); traits.make_x_monotone_2_object() (circular_arc, std::back_inserter(objects)); } //assert(objects.size() == 2); // Construct the polygon. for (std::list<CGAL::Object>::iterator iter = objects.begin(); iter != objects.end(); ++iter) { X_monotone_curve_2 arc; CGAL::assign (arc, *iter); pgn.push_back(arc); } } void add_to_polygon (Polygon_2& pgn, Curve_2& circular_arc) { std::list<CGAL::Object> objects; { Traits_2 traits; traits.make_x_monotone_2_object() (circular_arc, std::back_inserter(objects)); } //assert(objects.size() == 2); // Construct the polygon. for (std::list<CGAL::Object>::iterator iter = objects.begin(); iter != objects.end(); ++iter) { X_monotone_curve_2 arc; CGAL::assign (arc, *iter); pgn.push_back(arc); } } Polygon_2 construct_polygon (const K_Circle_2& circle) { // Subdivide the circle into two x-monotone arcs. Traits_2 traits; Curve_2 curve (circle); std::list<CGAL::Object> objects; traits.make_x_monotone_2_object() (curve, std::back_inserter(objects)); assert(objects.size() == 2); // Construct the polygon. Polygon_2 pgn; X_monotone_curve_2 arc; std::list<CGAL::Object>::iterator iter; for (iter = objects.begin(); iter != objects.end(); ++iter) { CGAL::assign (arc, *iter); auto p0 = arc.source(); auto p1 = arc.target(); pgn.push_back (arc); } return pgn; } // Construct a polygon from a rectangle. Polygon_2 construct_polygon (const K_Point_2& p1, const K_Point_2& p2, const K_Point_2& p3, const K_Point_2& p4) { Polygon_2 pgn; X_monotone_curve_2 s1(p1, p2); pgn.push_back(s1); X_monotone_curve_2 s2(p2, p3); pgn.push_back(s2); X_monotone_curve_2 s3(p3, p4); pgn.push_back(s3); X_monotone_curve_2 s4(p4, p1); pgn.push_back(s4); return pgn; } #endif // CONSTRUCT_POLYGON_CPP_INCLUDED
#ifndef CONSTRUCT_POLYGON_HXX_INCLUDED #define CONSTRUCT_POLYGON_HXX_INCLUDED #include <CGAL/Exact_predicates_exact_constructions_kernel.h> #include <CGAL/Gps_circle_segment_traits_2.h> #include <CGAL/General_polygon_set_2.h> typedef CGAL::Exact_predicates_exact_constructions_kernel Kernel; typedef Kernel::Point_2 K_Point_2; typedef Kernel::Circle_2 K_Circle_2; typedef CGAL::Gps_circle_segment_traits_2<Kernel> Traits_2; /* The traits class Gps_circle_segment_traits_2 models the GeneralPolygonSetTraits_2 concept. * It enables Boolean set-operations on general polygons bounded by linear segments or circular arcs. It should be parameterized with a kernel. */ typedef CGAL::General_polygon_set_2<Traits_2> Polygon_set_2; typedef Traits_2::General_polygon_2 Polygon_2; typedef Traits_2::General_polygon_with_holes_2 Polygon_with_holes_2; typedef Traits_2::Curve_2 Curve_2; typedef Traits_2::X_monotone_curve_2 X_monotone_curve_2; typedef Polygon_2::Point_2 P_Point_2; typedef Polygon_2::X_monotone_curve_2 P_X_monotone_curve_2; typedef Kernel::FT FT; typedef Kernel::RT RT; typedef Traits_2::CoordNT coordnt; void add_to_polygon (Polygon_2& pgn, const K_Point_2& source, const K_Point_2& mid, const K_Point_2& target); // Create and insert a circular arc into polygon void add_to_polygon (Polygon_2& pgn, Curve_2& circular_arc); Polygon_2 construct_polygon (const K_Circle_2& circle); // Create circular polygon Polygon_2 construct_polygon (const K_Point_2& p1, const K_Point_2& p2, // Create polygon between the four points const K_Point_2& p3, const K_Point_2& p4); #endif // CONSTRUCT_POLYGON_HXX_INCLUDED
- [cgal-discuss] about arc in cgal arrangement, ????, 06/22/2025
- Re: [cgal-discuss] about arc in cgal arrangement, Efi Fogel, 06/22/2025
- Re: [cgal-discuss] about arc in cgal arrangement, Nicklas SB Karlsson, 06/30/2025
Archive powered by MHonArc 2.6.19+.