سؤال

أرغب في تجربة بعض مثلثات Delaunay (ثنائية الأبعاد)، وأبحث عن مكتبة صغيرة إلى حد معقول للعمل معها.أنا على دراية بـ CGAL، لكنني كنت أتساءل عما إذا كان هناك شيء بسيط ومباشر إلى حد ما.

الأشياء التي أود القيام بها:

  • إنشاء تثليث لمجموعة من النقاط التعسفية
  • ابحث عن المثلث الذي توجد به نقطة عشوائية، واحصل على القمم
  • إنشاء صورة للتثليث (اختياري)

اقتراحات؟

هل كانت مفيدة؟

المحلول

ربما ينبغي عليك تفصيل أهدافك قليلاً، حتى يمكن تقديم إجابات أكثر صلة، لكن دعني أذكر ذلك أولاً مثلث, ، أداة إنشاء Delaunay ثنائية الأبعاد، مكتوبة بلغة C، ويمكن استخدامها كبرنامج مستقل، أو استدعاؤها من التعليمات البرمجية الخاصة بك.

بعد ذلك، فيما يتعلق بـ CGAL، إليك مثال صغير نموذجي، في حالة ما إذا كنت لا تزال تفكر فيه:

#include <vector>
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Delaunay_triangulation_2.h>

typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef CGAL::Delaunay_triangulation_2<K>                   Delaunay;    
typedef K::Point_2                                          Point;

void load_points(std::vector< Point >& points)
{
  points.push_back(Point(1., 1.));
  points.push_back(Point(2., 1.));
  points.push_back(Point(2., 2.));
  points.push_back(Point(1., 2.));      
}

int main()
{
  std::vector< Point > points;
  load_points(points);
  Delaunay dt;
  dt.insert(points.begin(), points.end());
  std::cout << dt.number_of_vertices() << std::endl;
  return 0;
}

نصائح أخرى

انظر أيضًا poly2tri، يبدو جميلًا: https://github.com/greenm01/poly2tri

لقد استخدمت مكتبة Gnu Triangulated Surface لتثليث Delaunay ثنائي الأبعاد وقد نجح الأمر بشكل جيد.من الغريب الاتصال به بعض الشيء لأنه يستخدم أسلوب OOP-in-C GLib، ولكن يمكن أن يكون كذلك بسهولة ملفوف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top