Skip to Content.
Sympa Menu

cgal-discuss - Re: [cgal-discuss] Check if region contains point

Subject: CGAL users discussion list

List archive

Re: [cgal-discuss] Check if region contains point


Chronological Thread 
  • From: Claus Volko <>
  • To:
  • Subject: Re: [cgal-discuss] Check if region contains point
  • Date: Thu, 14 Sep 2023 08:30:52 +0200
  • Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None ; spf=Pass ; spf=None
  • Ironport-data: A9a23:dza5l6nGnyTuuCHidHCBF3bo5gz1I0RdPkR7XQ2eYbSJt1+Wr1Gzt xIXXmnSbPiPMDGkeYggaNi2900Bu8XRy4VkHlZpriswQ1tH+JHPbTi7BhepbnnKdqUvb2o+s p5AMoGYRCwQZiWBzvt4GuG59RGQ7YnRGvymTrSs1hlZHWdMUD0mhQ9oh9k3i4tphcnRKw6Ws LsemeWGULOe82Ayajh8B56r8ks156yj4W9A5DTSWNgS1LPgvylNZH4gDfrpR5fIatE8NvK3Q e/F0Ia48gvxl/v6Io7Nfh7TKyXmc5aKVeS8oiI+t5uK3nCukhcPPpMTb5LwX6v4ZwKhxLidw P0V3XC5pJxA0qfkwIzxWDEAe81y0DEvFBYq7hFTvOTKp3AqfUcAzN0+LEtuYNMV+dwvDEhF8 9NBdCEmUzec0rfeLLKTEoGAh+wmJcjveYcd4zRulG6AS/khRp/HTuPB4towMDUY3JgfW6aDI ZBBOXw2M02ojx5nYj/7DLo1kPmvgnr4WzJdoVOR46Ew5gA/ySQoiuW8aYaOKoziqcN9mQWFt mbk+k/DLwglKYKAywC/z3+Ur7qa9c/8cMdIfFGizdZhj1SXg2ASExYLTkCTuui8kkf4WtRFK kVS9DBGkEQp3EmiT924Wx/h5XDd4UdaVN1XHOk3rgqKz8I4/jqkO4TNdRYZAPROiSP8bWZCO oahzoi1Vw98+qaYU2yc/bqypDa/c3pdZ2wbaCNOCUNP79D/qcthxljCX/RyIp6T19fVIDDXx yzVjS4cg75Is9UH+Z/m9n/6ghWthKPzcCgL2ivtUFmI0CZFda++Ronx6VHk/fdKd4mYaV+av Uk7ocuV7cFQLJTUlCWyX/kHM7a5w8m0IBvOrENdRcg/xW69/1qmW55a2xBlBUJTKs1fUyTYU EzSngJw5ZFoI3qha5FsUb+xE8gHyavBF8zvc+L9Nv5iQ8FWWlec3SdMYUWw4TjcoHI0m/tiB abBINeeM3kKLI9Gkhy0fr45+p02zHkcwWjze8jK/y6/2+DDWE/PGKY3C3rQXOUX96jenR709 exYPM60yxlydu3yTy3U0IwLJ2AxMnkJKsHqmvNTa9K8DFJqKEM5B9/V5IERSYhvsqBWt+XPp 3+GShB5znj7jib5MgmkUC1oR47uepddlkgFGxIQE2ym4UV+Xrb33pwjL8M2WZIF6N1cyeVFS qhZWseYXdVKZDf12xUcSpjfqoZdWgyhrl+MNXD9YRwUXZ1pdyrW8PDKIyrt8ygvCHKslM0c+ reP6CLScaAhdS9DUvnESauI5EyjmFQgg8ROZlvsDvgPXVTz4a5oBjfUjPRqE/oTKB7G+CSW5 zyWDTgcu+PJhY0/q/vNuoypsKarFPlYDGNBPmyG84uzCzbWzlCjzaBETuyMWzLXD0Hw2ae6Y NRq3+POC+IGkHlKorhDPe5Sl4xm3OTWpphe0ghAN1fIZQ7yCrpff1+37fMWvahJnrJkqQ+6X 3yUweZjOJKLBpLBMEUQLw8bfOi8xakquj3N388UfmT+xgFKpYSib2sDHiOiqiJnKJlNDLgE2 sYk4c4f1By+gEElM/GAlSFlyF6PJX0hDYQiuo0rP4vwrg8N1Ft5QIf9DxXu68qlcOR8MUgNI x6VipHdhr9a+FHwTnorGVXJ3stfnZ4rui0W6HMnOHKyhYPjqtIs+R9e4xAbb15w9QpW9fB3N kxAFVxHFY/X8xhG3MF8Dn2RQSdfDxiny2nN4loulkiCamK3V2bIfVYPCczU8G83q2tjLyVmp peGw2PYUBHvTsH7/g02fWVH8/XDb9hAxjfuqfCdPfauPscFOGL+o6qUe2A3hQPtApoxiG35t OBaxrtMRpOhBxEAgZ8QKte85e0cRinRcSYGCbtk8bgSFG7RRCCq1HLcYwqtc8dKPLrR/VX+F 8VqIdlVWg+j0DqV6AoWHrMIP6Q+ictBCADuoV83DTVuX3qjQjtVXFb48yH/gCovQYwrn59ic 8XecDWNFmHWjnxR84MIQA+oJULgCeTopiWltAx2zAnNP50GueBoN0o119NYel2LZRB/8Uv8U BzrPsfrIi8L9Wiot4TpG6RHQQ6zLLsfkQhOHB+b67xzUD8EDSsCW875ZLUq08S68Ib9g+hKq Ik=
  • Ironport-hdrordr: A9a23:ypok76PX1zwEy8BcTvijsMiBIKoaSvp037BL7TEJdfUxSKalfq +V7ZEmPHPP+VQssTQb6LO90cq7IE80l6QFhbX5VI3KNGLbUSmTTL2KhrGSpAEIdReOkNK1Fp 0NT0G9MrDN5JRB4voSKTPXL+od
  • Ironport-phdr: A9a23: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 0xu4uORSeso/TbopVwwIwiTzBY=
  • Ironport-sdr: 6502a8b2_b9Ku1PZhu4uFZ17R8Tc2UZC9jOITHkiA3Ej/rXHDDBjzV2Z YChbsJaD1MFsrNInJicUg/S2i3WM2BS9rbqFhFA==

I've got it now. It is perhaps not the most elegant piece of code but it seems to work fine:

  std::list<int> listRegions = {};

  for (std::size_t i = 0; i < regions.size(); i++)
  {
      Region_growing::Primitive_and_region region = regions[i];
      Line_3* l = new Line_3(Point_3(0, -1, 0), Point_3(0, +1, 0));
      auto intersection = boost::get<Point_3>(&*CGAL::intersection(region.first, *l));

      if (intersection && region.first.has_on(*intersection))
      {
          auto x11 = region.second.front()->halfedge()->vertex()->point().x();
          auto z11 = region.second.front()->halfedge()->vertex()->point().z();
          auto x12 = region.second.front()->halfedge()->next()->vertex()->point().x();
          auto z12 = region.second.front()->halfedge()->next()->vertex()->point().z();
          auto x13 = region.second.front()->halfedge()->next()->next()->vertex()->point().x();
          auto z13 = region.second.front()->halfedge()->next()->next()->vertex()->point().z();
          auto x1a = x11 < x12 ? x11 < x13 ? x11 : x13 : x12 < x13 ? x12 : x13;
          auto z1a = z11 < z12 ? z11 < z13 ? z11 : z13 : z12 < z13 ? z12 : z13;
          auto x1b = x11 > x12 ? x11 > x13 ? x11 : x13 : x12 > x13 ? x12 : x13;
          auto z1b = z11 > z12 ? z11 > z13 ? z11 : z13 : z12 > z13 ? z12 : z13;

          if (intersection->x() > x1a && intersection->x() < x1b && intersection->z() > z1a && intersection->z() < z1b)
          {
              std::cout << "Region " << i << " has point on it : " << region.first << " at " << *intersection << std::endl;
              listRegions.push_back(i);
          }
      }
  }

Am Do., 14. Sept. 2023 um 07:28 Uhr schrieb Claus Volko <>:
I tried coloring the regions with intersections red. The result looked strange. That's why I don't think the code I posted does its job.

Am Mi., 13. Sept. 2023 um 12:41 Uhr schrieb Claus Volko <>:
I'm now trying this:

  for (std::size_t i = 0; i < regions.size(); i++)
  {
      Region_growing::Primitive_and_region region = regions[i];
      Line_3* l = new Line_3(Point_3(0, -1, 0), Point_3(0, +1, 0));
      auto intersection = boost::get<Point_3>(&*CGAL::intersection(region.first, *l));

      if (intersection && region.first.has_on(*intersection)) std::cout << "Region has point on it: " << region.first << " at" << *intersection << std::endl;
  }

It returns fewer incidences of intersection, but I'm still not sure if it does what it should.

Am Mi., 13. Sept. 2023 um 11:39 Uhr schrieb Claus Volko <>:
I've realized the way I did it was not correct because it searched for the intersection of the plane with the line, which always returns a point. But I actually want to check for intersection with the finite region.

However, I've not understood how region_map() would help me in my endeavour. Could you perhaps point me to an example?

Thank you!

Am Mi., 13. Sept. 2023 um 11:03 Uhr schrieb Sebastien Loriot <>:
region_map()

https://doc.cgal.org/latest/Shape_detection/classCGAL_1_1Shape__detection_1_1Region__growing.html#a60adecff409f4025585c64cd3bd70110

Provides a property map associating indicating the region index for each
input element. The key of the map depends on your instantiation. But
everything should be documented in the documentation of your model.

Best,

Sebastien.

On 9/13/23 09:56, Claus Volko ( via cgal-discuss
Mailing List) wrote:
> OK, it seems I've found it out myself by now:
>
>    for (Region_growing::Primitive_and_region region : regions)
>    {
>        Line_3* l = new Line_3(Point_3(0, -10, 0), Point_3(0, +10, 0));
>
>        if (CGAL::intersection(region.first, *l))
>        {
>            std::cout << "Region has point on it" << std::endl;
>            break;
>        }
>    }
>
> Am Mi., 13. Sept. 2023 um 09:39 Uhr schrieb Claus Volko
> < <mailto:>>:
>
>     OK, I've realized by now that the code I posted was not wrong but
>     that what I really need is to check if a line intersects with a
>     region, as I don't know the y coordinate of the point I'm looking
>     for. How can that be done?
>
>     Am Mi., 13. Sept. 2023 um 07:04 Uhr schrieb Claus Volko
>     < <mailto:>>:
>
>         I would like to find the region that contains a given point
>         after using the region growing algorithm for shape detection. I
>         tried this code but it does not seem to work:
>
>            for (Region_growing::Primitive_and_region region : regions)
>            {
>                Point_3 *point = new Point_3(0, 0, 0);
>                if (region.first.has_on(*point))
>                    std::cout << "Region has zero point on it" << std::endl;
>            }
>
>         Also, if I found a region, how can I access the information
>         about the boundaries of the region?
>
>         --
>         Dipl.-Ing. Dr. Claus D. Volko, BSc
>         http://www.cdvolko.net/ <http://www.cdvolko.net/>
>
>
>
>
>
>     --
>     Dipl.-Ing. Dr. Claus D. Volko, BSc
>     http://www.cdvolko.net/ <http://www.cdvolko.net/>
>
>
>
>
>
> --
> Dipl.-Ing. Dr. Claus D. Volko, BSc
> http://www.cdvolko.net/ <http://www.cdvolko.net/>
>
>
>
>
> --
> 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




--
Dipl.-Ing. Dr. Claus D. Volko, BSc
http://www.cdvolko.net/





--
Dipl.-Ing. Dr. Claus D. Volko, BSc
http://www.cdvolko.net/





--
Dipl.-Ing. Dr. Claus D. Volko, BSc
http://www.cdvolko.net/





--
Dipl.-Ing. Dr. Claus D. Volko, BSc
http://www.cdvolko.net/






Archive powered by MHonArc 2.6.19+.

Top of Page