Skip to Content.
Sympa Menu

cgal-discuss - [cgal-discuss] Speeding up Intersection

Subject: CGAL users discussion list

List archive

[cgal-discuss] Speeding up Intersection


Chronological Thread 
  • From: "Rasal Raj, Anish" <>
  • To: "" <>
  • Subject: [cgal-discuss] Speeding up Intersection
  • Date: Mon, 3 May 2021 20:17:06 +0000
  • Accept-language: en-US, de-DE
  • Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None ; spf=Pass ; spf=Pass
  • Ironport-hdrordr: A9a23:YNp64qs2+8KQOu/B4T42pSI87skCNoMji2hD6mlwRA09T+Wykd yolvgAkQLz4QxhPU0Is9aGJaWGXDfg5Yd4iLNhXouKcSvHnC+TLI9k5Zb/2DGIIUaVysdx3b ptGpIObuHYIlR3gM3z6gv9M/tI+qj/zImGnuHbpk0BcShPS4VNqzh0ERyaFEoefml7LL40Do CV6MYChxfIQxoqR/+2DHUEQOTPzuej/K7OWhIeAg5i1Q/mt1+VwYTnGBuV1Ap2aVJy6IolmF KrryXJoo2Gm8Kc7Vv5/0/3q697vfPQjuZyPeDksLl2Fhzczi6NTLdGfPmnkA0cjcmTwD8R4b 3xiiZlGd9y5XPXdmTwhRf2wQHv3BYCgkWSrmOwsD/Yjfa8Yi4mBcxAgowxSGqg13Yd
  • Ironport-phdr: A9a23:6Rh53xZ3UW366wPvOWss6KH/LTHD14qcDmYuwqpisKpHd+GZx7+nAna3zctkgFKBZ4jH8fUM07OQ7/mxHzZbvd3Y6i5KWacPfidNsd8RkQ0kDZzNImzAB9muURYHGt9fXkRu5XCxPBsdMs//Y1rPvi/6tmZKSV3wOgVvO+v6BJPZgdip2OCu4Z3TZBhDiCagbb9oIxi6sAHcutMIjYZsJas9xQbFrmVJdu9L2W5mOFWfkgrm6Myt5pBj6SNQu/wg985ET6r3erkzQKJbAjo7LW07/dXnuhbfQwSB4HscSXgWnQFTAwfZ9hH6X4z+vTX8u+FgxSSVJ8z2TbQzWTS/86dmTQLjhSkbOzIl9mzcl8p9h79Zrh28vRxy247abp+IOvpicK3TftIaSnZOUctKUixNHoG8YpETA+YdIOpVqZT2qVsUrRu5AAmhHO3jxCNSiX/tx6I61/kqHx3c0wwiB94FrWjZrNP0NKcJUeC5wrTDwDLZYPNQ2Df984jIfgo7of6WRrJ/a87RxFI1FwLLklWQqZXpMCmP2esRs2iU8exgWfiyhGE5sgx8pCWkycgwhIfTnI0V1kzE+jtjwIYzPdC1Skx2bMCqHZZfsyyUN4t4T8MsTmxqtyg0xbwLtJG6cSYEyZkqxgPSZvyJfYaG/B/uWvicLzdkiXxler+yiBm8/E69weP/Tsm5yEtGoyRKn9XWq3wA2QDf5tKHR/dn8Uqs3S6D2x7J5e1YP0w5kK7WJ4Iiz7M1i5YfrUfOEyzzlUj2lqCaaFko9+2r5unof7rropqROJFvhQ3iPakjn8K/DOY2PwcSWmWW9+Sx26Di8EHhXrlFlOE6nrXcvZ3ZP8sWp7K1DgpI3osm9RmyDyuq3MgdkHQCMl5IeReKg5XpNlzMJv3zEO2xjE62kDhxwvDLJr3hDYvJLnjEiLrheKxy609YyAYqytBf+o5UBqgOLf7pW0/xqMDXAgUjMw263+bnCMxx2ZkEVm2TAq+WLqXSvUWV6e0xO+WMZYkVtyjhK/U9+vLjg3A0lUUAcaSnwZcbcnC1Eu5pLkideXbsh80OEWYOvgowVuzqj1iCXCZJaHa0XqI8/TE7BJi8DYjZXYCimriB0TyhHpxYemBGCkmAHm3yeIqYW/cDdiSSLtV8nTMaTbShUZMu1QmytA/mzLpqNvbb+iICupLnzdR6+uzTlQou+jxpFMSdyHqAT3p0n2MNXz85xrpzoU17yleZ0Kh3meZUFdJJ56ABbgBvf5XTxug/B9HpUR/aZf+ITkynS5OoG3t5Gtk+yttLb0dmEMi5lTjC2TCrCvkbjerYKoYz9/eW5XHqLsI18X/EkOEIiVg9QoEHYWSgh7V/sRLaHIfNu1+Gi6bvfK0X3CPLsmuOmznd9HpEWRJ9BP2WFUsUYVHb+IyRznOHdKenDPEcCiUE0dSLQoNQdcHpyFxPT/fuPpLSbjDp80+AQC2Qz7bJV7LEPmAU3SHTEk8B+ygJ4mqGcAE3DSespSTSAW43fXrfJnj0+Ow7k0uVC085ywbiR0ho1r7w/QMJwKDaSu8YmKgbpCdkojx/HFu7md7bWYPomg==
  • Ironport-sdr: 6c0DHgf6R9Kp2T76Gu6PYQQPJ4dB2nndsbXc5dfL1qvspG4Au5G4/M8dS5T9GVcHf1yhtBdB9z K4qU+wTxGLP8gUcnv0T3jRlnfpVcxTIYQ1yLDNzEMpFPuscFaUfGlTqQ4JnahrF8kFQQBl4B9J ozGx9lNOo/5arzV8bcbT4M0CXpCbitejOpL0pKdGyehnmdHybPDVg4hesaq975dMtZ6rAdau5l Xkthw3ZR/a9QStpYlT14E1t0Z5fxXEaYvt7t1szJpoo0DfvEY6w3DtudEz8RxGq8jXUpfsQfGR nwI=

Hello Guys,

I have recently started working with CGAL. I have a doubt.


I am using CGAL intersection operation on a list of triangles. currently, it takes some time to complete the information. What are the possible ways to improve the execution time?


Note: the list of triangles contains around 25k triangles. I have attached a sample code with this e-mail. I am using Exact_predicates_exact_constructions_kernel kernel.


typedef CGAL::Exact_predicates_exact_constructions_kernel Kernel;
typedef Kernel::Point_3 Point;
typedef Kernel::Segment_3 Segment_3;
typedef Kernel::Triangle_3  Triangle;
typedef CGAL::Cartesian<double> tc;


struct Ternion
{
	Triangle triangle;
	int unique_id;
	std::list<Segment_3> intersection_lines;	
}

void cgal_intersect(std::list<Ternion> &list_of_ternions)
{
      
	for(auto &i : list_of_ternions)
	{
		for (auto &j : list_of_ternions)
		{
			if(i.unique_id == j.unique_id) continue;
			
			if(CGAL::do_intersect(i.triangle, j.triangle))
			{


				CGAL::cpp11::result_of<Kernel::Intersect_3(Triangle, Triangle)>::type result;
				result = CGAL::intersection(i.triangle, j.triangle);

				if (result) 
				{
					if (Segment_3* s = boost::get<Segment_3>(&*result))
					{
						Segment_3 seg = *s;
						Point P1(seg.vertex(0).x(), seg.vertex(0).y(), seg.vertex(0).z());
						Point P2(seg.vertex(1).x(), seg.vertex(1).y(), seg.vertex(1).z());
						
						i.intersecting_lines.emplace_back(P1, P2);
						j.intersecting_lines.emplace_back(P1, P2);
					}
					else if (Triangle* t = boost::get<Triangle>(&*result)) 
					{
						Triangle tri = *t;
						Point P1(tri.vertex(0).x(), tri.vertex(0).y(), tri.vertex(0).z());
						Point P2(tri.vertex(1).x(), tri.vertex(1).y(), tri.vertex(1).z());
						Point P3(tri.vertex(2).x(), tri.vertex(2).y(), tri.vertex(2).z());


						auto dist = CGAL::squared_distance(P1, P2);
						if (CGAL::to_double(dist) >= (25e-14)) {
							i.intersecting_lines.emplace_back(P1, P2);
							j.intersecting_lines.emplace_back(P1, P2);
						}
						
						auto dist1 = CGAL::squared_distance(P2, P3);
						if (CGAL::to_double(dist1) >= (25e-14)) {
							i.intersecting_lines.emplace_back(P2, P3);
							j.intersecting_lines.emplace_back(P2, P3);
						}
						
						auto dist2 = CGAL::squared_distance(P1,P3);
						if (CGAL::to_double(dist2) >= (25e-14)) {
							i.intersecting_lines.emplace_back(P3, P1);
							j.intersecting_lines.emplace_back(P3, P1);
						}
					}
					else if (boost::get<std::vector <Point>>(&*result))
					{
						std::cout << "[WARNING] vector of points, unhandles" << std::endl;
					}
					else if (boost::get<Point>(&*result))
					{
						std::cout << "[WARNING] point intersection, unhandled " << std::endl;
					}
					else
					{
						std::cout << "[WARNING] Unknown intersection, unhandled " << std::endl;
					}

				}
			}
		}
	}
}



Archive powered by MHonArc 2.6.19+.

Top of Page