পরিচয় (Introduction)
টেমপ্লেট প্যারামিটারের জন্য একটি HDS বা হাফ-এজ ডেটা স্ট্রাকচার (সংক্ষিপ্ত HalfedgeDS) হলো একটি এজ-সেন্ট্রিক ডেটা স্ট্রাকচার যেটি সক্ষম ভের্টেক্স, এজ এবং ফেসের ইনসিডেন্স ইনফরমেশন মেইন্টেইন করতে, যেমন প্ল্যানার ম্যাপ, পলিহেড্রা, বা অন্যান্য অরিয়েন্টেবল, টু-ডাইমেনশনাল সারফেস এম্বেডেড ইন আর্বিট্রারি ডাইমেনশন। প্রতিটি এজ ভাঙা হয় দুটি হাফ-এজে বিপরীত অরিয়েন্টেশনের সাথে। প্রতিটি হাফ-এজ একটি ইনসিডেন্ট ফেস এবং একটি ইনসিডেন্ট ভের্টেক্স স্টোর করে। প্রতিটি ফেস এবং প্রতিটি ভের্টেক্সের জন্য একটি ইনসিডেন্ট হাফ-এজ স্টোর করা থাকে। হাফ-এজ ডেটা স্ট্রাকচার এর রিডিউসড ভ্যারিয়েন্ট কিছু ইনফরমেশন এলিমিনেট করতে পারে, যেমন ফেসে হাফ-এজ পয়েন্টার বা ফেসের স্টোরেজ সবসময়।
হাফ-এজ ডেটা স্ট্রাকচার হলো একটি কম্বিনেটরিয়াল ডেটা স্ট্রাকচার, জ্যামিতিক ইন্টারপ্রিটেশন যোগ করা হয় ক্লাসগুলোর মাধ্যমে যারা হাফ-এজ ডেটা স্ট্রাকচারের ওপর বিল্ট। এই ক্লাসগুলো আরও পরিচিত হতে পারে বাস্তবায়নের জন্য হাফ-এজ ডেটা স্ট্রাকচার সরাসরি বাস্তবায়নের চেয়ে, যেহেতু হাফ-এজ ডেটা স্ট্রাকচার একটি ইমপ্লিমেন্টেশন লেয়ার হিসেবে বিবেচিত হয়।
হাফ-এজ ডেটা স্ট্রাকচার কোয়াড-এজ ডেটা স্ট্রাকচারের ভ্যারিয়েন্টের একটিও হিসেবে প্রদর্শিত করা যেতে পারে। সাধারণত, নন-অরিয়েন্টেবল ২-ম্যানিফোল্ড কোয়াড-এজ ডেটা দ্বারা রিপ্রেজেন্ট করা যায়, কিন্তু এখানে ভ্যারিয়েন্টটি লিমিটেড অরিয়েন্টেবল ২-ম্যানিফোল্ডে।
উদাহরণ প্রোগ্রাম (Example Programs)
ডিফল্ট হাফ-এজ ডেটা স্ট্রাকচার (The Default Halfedge Data Structure)
নিচের উদাহরণ প্রোগ্রাম ডিফল্ট হাফ-এজ ডেটা স্ট্রাকচার এবং ডেকোরেটর ক্লাস ব্যবহার করে। ডিফল্ট হাফ-এজ ডেটা স্ট্রাকচার একটি লিস্ট-বেসড রিপ্রেজেন্টেশন বাস্তবায়ন করে। আইটেমের সকল ইনসিডেন্স এবং ভের্টেক্সের জন্য একটি পয়েন্ট টাইপ এক্সপ্লেন করা হয়। ট্রিভিয়াল ট্রেইটস ক্লাস পয়েন্টের জন্য ব্যবহৃত টাইপ দেয়। প্রোগ্রাম একটি লুপ তৈরি করে, যাতে দুটি হাফ-এজ, একটা ভের্টেক্স (Vertex) এবং দুটি ফেস (Face1 এবং Face2) থাকে, এবং এর বৈধতা যাচাই করে।

#include <CGAL/HalfedgeDS_default.h> #include <CGAL/HalfedgeDS_decorator.h> struct Traits { typedefint Point_2; }; typedef CGAL::HalfedgeDS_default<Traits> HDS1; typedef CGAL::HalfedgeDS_decorator<HDS> Decorator1; int main() { HDS1 hds1; Decorator1 decorator(hds1); decorator.create_loop(); CGAL_assertion(decorator.is_valid()); return 0; }