Skip to Content.
Sympa Menu

cgal-discuss - Re: [cgal-discuss] Determine whether or not a Point is inside a 2D triangulation

Subject: CGAL users discussion list

List archive

Re: [cgal-discuss] Determine whether or not a Point is inside a 2D triangulation


Chronological Thread 
  • From: Andreas Fabri <>
  • To:
  • Subject: Re: [cgal-discuss] Determine whether or not a Point is inside a 2D triangulation
  • Date: Fri, 17 Feb 2023 11:44:12 +0100
  • Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None ; spf=Pass ; spf=None
  • Ironport-data: A9a23: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 U7Keg==
  • Ironport-hdrordr: A9a23:zCTWnat/lpqWvyq/8EBPWN167skDkNV00zEX/kB9WHVpm6yj+/ xG785rsSMc6Qx+ZJhOo7C90cW7MArhHNtOkPEs1NSZLWrbUQmTTb2KhLGKq1aLdhEWtNQts5 uIGJIObeEYY2IK6voSrDPIceoI8Z2gz6Htr+Lfw3BxbRgCUc5dxjY8LBmbVnBsTANLHt4YGf Onl7F6jgvlRk9SVP2SIlMsY9Luzue76K7OUFo4PFoc0SGrtxmP05KSKWnk4j4uFwx1hY0a2U z+riTFysyYwouG9iM=
  • Ironport-phdr: A9a23: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
  • Ironport-sdr: 63ef5a7d_v9H8DVOS5FMNNovZ/rpxh27UzHMYAMz/WY5KvqCe3Ei7Mvp gfjNk69U+N0v1ARYzoAUIrWuP3JxS8i+aZaU6JQ==

In fact there is another ingredient missing.  The triangulation must be traversed and the faces marked.

In CGAL 5.5 this is not a documented official function but in an example

https://doc.cgal.org/latest/Triangulation_2/Triangulation_2_2polygon_triangulation_8cpp-example.html

In  the master branch on github and hence in the next release there will be a CGAL function

https://cgal.geometryfactory.com/CGAL/doc/master/Triangulation_2/group__PkgTriangulation2Miscellaneous.html#gabe989734ed8d720d4385900d50b3c9c4

Best,

Andreas


On 2/17/2023 11:26 AM, Andreas Fabri wrote:

You mean for consecutive couples, right.

Unless I am wrong your polygon is self intersecting. That may make the traversing and marking inside outside,  wrong


On 2/17/2023 11:14 AM, Bob Bill ( via cgal-discuss Mailing List) wrote:
Thanks a lot Andreas for your quick reply! Even if I add: cdt.insert_constraint(va,vb);
for all the couples as done in this example (https://doc.cgal.org/latest/Mesh_2/Mesh_2_2conforming_8cpp-example.html#a3) I still get as result 0. I don't see what I'm doing wrong.

Best, Bob
Il venerdì 17 febbraio 2023, 11:07:07 CET, Andreas Fabri <> ha scritto:


You only insert points.

For a domain you have to insert polygons or segments that spit up the plane.

On 2/17/2023 10:59 AM, Bob Bill ( via cgal-discuss Mailing List) wrote:
Hi,

I need to determine if a Point is inside or outside a 2D mesh (in particular a constrained Delaunay triangulation). I’ve found the answer to this question (https://stackoverflow.com/questions/22448060/how-to-determine-a-point-is-inside-2d-mesh-or-not-cgal) on SO, but I can’t understand why this query is always negative in my particular application. Please see the following MWE, where the origin is not recognised as an internal point.

I don't see what is the problem, any hint is highly appreciated.

Best,
Bob

#include <CGAL/Constrained_Delaunay_triangulation_2.h>
#include <CGAL/Delaunay_mesh_face_base_2.h>
#include <CGAL/Delaunay_mesh_size_criteria_2.h>
#include <CGAL/Delaunay_mesher_2.h>
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Triangulation_conformer_2.h>
#include <iostream>
typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef CGAL::Triangulation_vertex_base_2<K> Vb;
typedef CGAL::Delaunay_mesh_face_base_2<K> Fb;
typedef CGAL::Triangulation_data_structure_2<Vb, Fb> Tds;
typedef CGAL::Constrained_Delaunay_triangulation_2<K, Tds> CDT;
typedef CDT::Point Point_2;
typedef CDT::Vertex_handle Vertex_handle;
int main() {
CDT cdt;
// construct a constrained triangulation
Vertex_handle va = cdt.insert(Point_2(5., 5.));
Vertex_handle vb = cdt.insert(Point_2(-5., 5.));
Vertex_handle vc = cdt.insert(Point_2(4., 3.));
Vertex_handle vd = cdt.insert(Point_2(5., -5.));
Vertex_handle ve = cdt.insert(Point_2(6., 6.));
Vertex_handle vf = cdt.insert(Point_2(-6., 6.));
Vertex_handle vg = cdt.insert(Point_2(-6., -6.));
Vertex_handle vh = cdt.insert(Point_2(6., -6.));
std::cout << "Number of vertices before: " << cdt.number_of_vertices()
<< std::endl;
typename CDT::Face_handle fh = cdt.locate(Point_2{0., 0.});
std::cout << fh->is_in_domain() << std::endl;
}

--
You are currently subscribed to cgal-discuss. To unsubscribe or access the archives, go to https://sympa.inria.fr/sympa/info/cgal-discuss
-- 
Andreas Fabri, PhD
Chief Officer, GeometryFactory
Editor, The CGAL Project
--
You are currently subscribed to cgal-discuss. To unsubscribe or access the archives, go to https://sympa.inria.fr/sympa/info/cgal-discuss

--
You are currently subscribed to cgal-discuss.
To unsubscribe or access the archives, go to
https://sympa.inria.fr/sympa/info/cgal-discuss

-- 
Andreas Fabri, PhD
Chief Officer, GeometryFactory
Editor, The CGAL Project

--
You are currently subscribed to cgal-discuss.
To unsubscribe or access the archives, go to
https://sympa.inria.fr/sympa/info/cgal-discuss

-- 
Andreas Fabri, PhD
Chief Officer, GeometryFactory
Editor, The CGAL Project



Archive powered by MHonArc 2.6.19+.

Top of Page