الگوریتم مثلث سازی حریص. مثلث سازی فضایی دلونی. وظیفه محاسبه نوردهی شیب معمولاً برای تجزیه و تحلیل روشنایی زمین استفاده می شود. در این رابطه، اغلب نیاز به در نظر گرفتن موقعیت فعلی خورشید وجود دارد، یعنی. انقضا

ارسال کار خوب خود در پایگاه دانش ساده است. از فرم زیر استفاده کنید

دانشجویان، دانشجویان تحصیلات تکمیلی، دانشمندان جوانی که از دانش پایه در تحصیل و کار خود استفاده می کنند از شما بسیار سپاسگزار خواهند بود.

میزبانی شده در http://www.allbest.ru/

پروژه دوره

ساخت و سازمثلث بندیدلوني

بر انضباط "سازه هایوالگوریتم هادر حال پردازشداده ها"

محتوا

  • مقدمه
  • 2.1 الگوریتم حریص
  • 2.4 الگوریتم با نمایه سازی مراکز مثلثک- D- درخت
  • 3.4 الگوریتم فن
  • 4. بخش نرم افزاری
  • نتیجه

مقدمه

امروزه، در آغاز قرن بیست و یکم، بشریت در حال ورود به یک تمدن جدید است - تمدنی که با نفوذ رایانه ها به تمام حوزه های زندگی بشر مرتبط است. این تمدن را اطلاعات، مجازی، کامپیوتر می نامند.

نظریانفورماتیک- یک رشته ریاضی که از روش های ریاضی برای ساخت و مطالعه مدل هایی برای پردازش، انتقال و استفاده از اطلاعات استفاده می کند. این مبتنی بر منطق ریاضی است و شامل بخش هایی مانند نظریه الگوریتم ها و خودکارها، نظریه اطلاعات و نظریه کدگذاری، نظریه زبان های رسمی و دستور زبان، تحقیق در عملیات و غیره است.

یکی از حوزه های علم کامپیوتر نظری - هندسه محاسباتی است , که روش هایی را برای حل مسائل هندسی در رایانه با استفاده از الگوریتم ها و برنامه ها توسعه می دهد.

محاسبههندسهشاخه ای از علوم کامپیوتر است که الگوریتم هایی را برای حل مسائل هندسی مطالعه می کند. چنین وظایفی در گرافیک کامپیوتری، طراحی مدارهای مجتمع، دستگاه های فنی و غیره یافت می شود. داده های اولیه برای چنین کارهایی می تواند مجموعه ای از نقاط در یک صفحه، مجموعه ای از قطعات، چند ضلعی و غیره باشد. مشکلات هندسی در علوم کامپیوتر بسیار رایج هستند، زیرا رایانه ابزاری بسیار راحت و سریع برای حل آنها است، زیرا شمارش دستی در اینجا کاملاً غیر قابل اجرا است.

هدفکار کردنووظایف: مطالعه یکی از الگوریتم های تکرار شونده برای ساخت مثلث دلونی.

1) تعاریف و قضایای اساسی مسئله مثلث سازی دلونی را مطالعه کنید.

2) انواع اصلی الگوریتم های تکراری برای ساخت مثلث را در نظر بگیرید.

3) الگوریتم «حذف و ساخت» را برای ساخت مثلث دلون اجرا کنید.

1. شرح کلی مثلث سازی دلونی

وظیفه ساخت مثلث.

Delaunay یکی از پایه ها در هندسه محاسباتی است. بسیاری از وظایف دیگر به آن کاهش می یابد، به طور گسترده ای در گرافیک کامپیوتری و سیستم های اطلاعات جغرافیایی برای مدل سازی سطوح و حل مشکلات فضایی استفاده می شود. مسئله ساختن مثلث دلونی اولین بار در سال 1934 در کار ریاضیدان شوروی بوریس نیکولاویچ دلونای مطرح شد.

مثلث بندیدلونيبرای مجموعه ای از نقاط S در صفحه، یک مثلث DT (S) نامیده می شود به طوری که هیچ نقطه A از S در داخل دایره ای قرار ندارد که اطراف هر مثلثی از DT (S) محصور شده باشد به طوری که هیچ یک از رئوس آن نقطه A نباشد.

1.1 تجزیه و تحلیل ادبیات در مورد موضوع

اسکورتسوفولی.AT.مثلث سازیدلونيواوکاربرد. /اسکورتسوفولی.AT. -تومسک: انتشاراتجلد. un-ta،2002 . - 128. این آموزش اصلی ترین آموزش برای این پروژه دوره است. اطلاعات نظری مربوط به مثلث دلونی را به تفصیل شرح می دهد، تعاریف و قضایای مختلفی را ارائه می دهد.

همچنین بخش‌هایی وجود دارد که الگوریتم‌های ساخت مثلث‌ها را به تفصیل شرح می‌دهند، ویژگی‌های مقایسه‌ای و پیچیدگی الگوریتم‌ها را ارائه می‌دهند.

چی قرض گرفته شده است: مواد اولیه، اطلاعات نظری، تعاریف، نقشه ها.

پوپوفاز جانب.ولی.محاسبهمواد و روش هاوبرنامه نويسي. /پوپوفاز جانب.ولی. -مسکو: انتشاراتدانشگاه دولتی مسکو2008, - 24 ثانیه. این راهنما یک منبع کمکی از ادبیات است. برخی از الگوریتم‌ها از دیدگاه ریاضی توصیف شده‌اند، فرمول‌های ساخت محاسبه می‌شوند و همچنین شرح مثلث‌سازی در فضای اقلیدسی وجود دارد.

چی قرض گرفته شده است: توصیف ریاضی مثلث سازی دلونی، ساخت و ساز در فضای اقلیدسی

مدودفاچ.ن.روشورونوی - دلونيکه درپژوهشسازه هایغیر کریستالیسیستم های/ RAS،نووسیبیرسکrsk: انتشاراتبنابراینRAS،2000, - 214 با. کتابی اختصاص داده شده به شرح روش های Voronoi و Delaunay در سیستم های غیر کریستالی.

چی قرض گرفته شده است: خواص مثلث های دلونی، تعریف مثلث های دلونی.

1.2 تعاریف و ویژگی های اساسی

مثلث بندییک نمودار مسطح است که تمام نواحی داخلی آن مثلث هستند.

خواص:

· مثلث Delaunay یک به یک با نمودار Voronoi برای همان مجموعه نقاط مطابقت دارد.

در نتیجه: اگر هیچ چهار نقطه روی یک دایره قرار نگیرد، مثلث دلونی منحصر به فرد است.

· مثلث سازی Delaunay حداقل زاویه را در بین تمام زوایای تمام مثلث های ساخته شده به حداکثر می رساند، در نتیجه از مثلث های "نازک" اجتناب می شود.

· مثلث سازی Delaunay مجموع شعاع های توپ های محاطی را به حداکثر می رساند.

· مثلث سازی Delaunay عملکرد گسسته دیریکله را به حداقل می رساند.

· مثلث سازی Delaunay حداکثر شعاع حداقل کره محصور را به حداقل می رساند.

· مثلث سازی دلونی در یک صفحه دارای حداقل مجموع شعاع دایره های محصور در اطراف مثلث ها در بین تمام مثلث های ممکن است.

شکل 1. مثلث بندی.

محدب مثلث بندی یک مثلث به گونه ای نامیده می شود که حداقل چند ضلعی که همه مثلث ها را در بر می گیرد محدب باشد. مثلثی که محدب نباشد نامیده می شود غیر محدب.

وظیفه ساختمان مثلث بندی بر داده شده تنظیم دو بعدی نکته هامشکل اتصال نقاط داده شده توسط قطعات غیر متقاطع به طوری که یک مثلث تشکیل شود نامیده می شود.

گفته می شود که مثلث سازی ارضا می کند وضعیت دلوني ، اگر هیچ یک از نقاط مثلث داده شده در داخل دایره توصیف شده در اطراف هر مثلث ساخته شده قرار نگیرد.

مثلث سازیتماس گرفتمثلث بندی دلوني , اگر محدب باشد و شرط دلون را برآورده کند.

شکل 2. مثلث سازی دلونی.

1.3 روش توپ خالی دلون. ساخت و ساز در حالت کلی

بیایید از یک توپ خالی استفاده کنیم که آن را حرکت می دهیم و اندازه آن را تغییر می دهیم تا بتواند نقاط سیستم (A) را لمس کند، اما همیشه خالی می ماند.

بنابراین، اجازه دهید یک توپ خالی دلونی را در سیستم نقاط (A) قرار دهیم. اگر توپ به اندازه کافی کوچک انتخاب شود، همیشه این امکان وجود دارد. بیایید شروع به افزایش شعاع آن کنیم و مرکز توپ را در جای خود بگذاریم. در نقطه ای، سطح توپ با نقطه ای از سیستم (A) برخورد می کند. این قطعا اتفاق خواهد افتاد، زیرا هیچ فضای خالی بی نهایت بزرگی در سیستم ما وجود ندارد. به شعاع توپ خالی ادامه می دهیم تا نقطه i روی سطح آن باقی بماند. برای این کار باید مرکز توپ را از نقطه i حرکت دهید. دیر یا زود توپ با سطح خود به نقطه دیگری از سیستم (A) خواهد رسید.

شکل 3 - پارتیشن Delaunay از یک سیستم دو بعدی از نقاط

ساده‌سازی‌های Delaunay فضا را بدون شکاف و همپوشانی پر می‌کنند.

کره توصیف شده از هر سیمپلکس شامل سایر نقاط سیستم در داخل نیست.

بگذارید این نقطه j باشد. بیایید به افزایش شعاع توپ خود ادامه دهیم و هر دو نقطه را روی سطح آن نگه داریم. با افزایش، توپ به نقطه سوم سیستم یعنی نقطه k می رسد. در حالت دو بعدی، "دایره خالی" ما در این لحظه ثابت می شود، یعنی. افزایش بیشتر شعاع آن با خالی نگه داشتن دایره غیرممکن می شود. در همان زمان، ما یک پیکربندی دو بعدی ابتدایی از سه نقطه (i، j، k) را نشان می‌دهیم که یک مثلث خاص را تعریف می‌کند، ویژگی آن این است که هیچ نقطه دیگری از سیستم (A) در محدوده آن وجود ندارد. دایره. در سه بعد، یک توپ با سه نقطه تعریف نمی شود. بیایید به افزایش شعاع آن ادامه دهیم و هر سه نقطه پیدا شده را روی سطح آن حفظ کنیم. این کار تا زمانی امکان پذیر خواهد بود که سطح توپ به نقطه چهارم l سیستم برسد. پس از آن حرکت و رشد یک توپ خالی غیرممکن خواهد شد. چهار نقطه یافت شده (i، j، k، l) رئوس چهار وجهی را تعیین می کند، که با این واقعیت مشخص می شود که هیچ نقطه دیگری از سیستم (A) در داخل کره محصور آن وجود ندارد. به چنین چهار وجهی، دلاوی سیمپلکس می گویند.

یک سیمپلکس در ریاضیات به ساده ترین شکل در فضای یک بعد معین گفته می شود: چهار وجهی - در فضای سه بعدی. مثلث - در دو بعد. یک سه گانه (چهارگانه) دلخواه از نقاط سیستم که در یک صفحه قرار ندارند همیشه یک سیمپلکس مشخص را تعریف می کند. با این حال، تنها زمانی یک سیمپلکس دلونی است که کره محدود شده آن خالی باشد. به عبارت دیگر، ساده سازی های دلونی با انتخاب خاصی از سه (چهار برابر) نقاط در سیستم (A) تعیین می شوند.

ما یک Delaunay simplex ساخته‌ایم، اما با قرار دادن توپ خالی در مکان‌های مختلف و تکرار همان روش، می‌توان موارد دیگری را تعریف کرد. بیان شده است که مجموعه تمام ساده سازی های دلونی سیستم (A) فضا را بدون همپوشانی و شکاف پر می کند، یعنی. پارتیشن بندی فضا را اجرا می کند، اما این بار به چهار وجهی. این تقسیم نامیده می شود تقسیم کردندلوني(شکل 3).

1.4 کاربرد مثلث سازی دلونی

غالباً مثلث‌سازی‌های دلونی در فضای اقلیدسی اعمال می‌شوند. حداقل درخت پوشا اقلیدسی تضمین شده است که بر روی مثلث سازی دلونی قرار دارد، بنابراین برخی از الگوریتم ها از مثلث بندی استفاده می کنند. همچنین، از طریق مثلث دلونی، مسئله فروشنده دوره گرد اقلیدسی تقریباً حل می شود.

در درون یابی دوبعدی، مثلث سازی دلونه، صفحه را به ضخیم ترین مثلث های ممکن تقسیم می کند، و از زوایای خیلی تیز یا خیلی مبهم جلوگیری می کند. از این مثلث ها می توان برای ساخت، به عنوان مثال، درون یابی دو خطی استفاده کرد.

مشکل دیگری که اغلب در ژئوانفورماتیک ایجاد می شود، ساخت نوردهی شیب ها است. در اینجا لازم است جهت های غالب شیب ها توسط نقاط اصلی تعیین شود و سطح به مناطقی که در آن جهت خاصی غالب است شکسته شود. از آنجایی که تعریف نوردهی برای مقاطع افقی سطح معنی ندارد، به عنوان مثال، مناطقی که افقی هستند یا دارای شیب کمی هستند، به یک منطقه جداگانه اختصاص داده می شوند.<5 о. По странам света деление обычно выполняется на 4, 8 или 16 частей.

شکل 4. نمونه ای از محاسبه نوردهی های شیب با استفاده از مدل امدادی

وظیفه محاسبه نوردهی شیب معمولاً برای تجزیه و تحلیل روشنایی زمین استفاده می شود. در این رابطه، اغلب نیاز به در نظر گرفتن موقعیت فعلی خورشید وجود دارد، یعنی. نوردهی به عنوان جهت بین حالت عادی به مثلث و جهت خورشید محاسبه می شود.

بنابراین، هر مثلث مثلث را می توان بر اساس اصل تعلق به یک منطقه خاص طبقه بندی کرد. پس از آن، فقط باید الگوریتم انتخاب منطقه را فراخوانی کنید.

2. شرح الگوریتم های ساخت و ساز

به طور کلی، همه الگوریتم ها بر اساس یک ایده بسیار ساده از اضافه کردن متوالی نقاط به یک مثلث Delaunay ساخته شده اند. به طور رسمی، به نظر می رسد این است.

داده شده بسیاری از از جانبن نکته ها.

1. در سه نقطه شروع اول، یک مثلث می سازیم.

2. در چرخه n برای تمام نقاط دیگر، مراحل 3-5 را انجام دهید.

3. نقطه n بعدی به شکل زیر به ساختار مثلثی ساخته شده اضافه می شود. اول، نقطه بومی سازی می شود، یعنی. مثلثی وجود دارد (که قبلاً ساخته شده است) که نقطه بعدی در آن قرار می گیرد. یا اگر نقطه در داخل مثلث قرار نگیرد، مثلثی در مرز مثلث وجود دارد که نزدیکترین نقطه به نقطه بعدی است.

4. اگر نقطه به گره مثلثی که قبلاً درج شده بود برخورد کند، معمولاً چنین نقطه ای کنار گذاشته می شود، در غیر این صورت نقطه به عنوان یک گره جدید در مثلث قرار می گیرد. علاوه بر این، اگر نقطه به لبه ای برخورد کند، به دو مثلث جدید تقسیم می شود و هر دو مثلث مجاور لبه نیز به دو مثلث کوچکتر تقسیم می شوند. اگر نقطه به طور دقیق در داخل هر مثلث باشد، به سه مثلث جدید تقسیم می شود. اگر نقطه خارج از مثلث باشد، یک یا چند مثلث ساخته می شود.

5. بررسی های محلی مثلث های تازه به دست آمده برای انطباق با شرط دلون انجام و بازآرایی های لازم انجام می شود.

پایان الگوریتم.

در زیر داده شده است دقیق شرح چندین الگوریتم ها.

2.1 الگوریتم حریص

یکی از اولین ها الگوریتم زیر را برای ساخت مثلث پیشنهاد کرد.

طمع کارروشاین روشی است که هرگز کارهایی را که قبلا انجام شده است خنثی نمی کند. مراحل زیر به صورت متوالی در الگوریتم انجام می شود.

1. انتهای تمام قطعات سازه ای در مجموعه نقاط اولیه قرار می گیرند.

2. بخش هایی که همه جفت نقاط را به هم متصل می کنند تولید می شوند، بخش ها بر اساس طول مرتب می شوند.

3. تمام بخش های خط شکست در مثلث قرار می گیرند.

4. بخش ها به طور متوالی برای مثلث بندی از مجموعه ای از بخش های مرتب شده بر اساس طول (از کوتاه تر به طولانی تر) انتخاب می شوند. اگر قطعه با هر یک از مواردی که قبلاً درج شده است تلاقی کند، کنار گذاشته می شود، در غیر این صورت در مثلث قرار می گیرد.

مرحله 4 تا زمانی که بخش ها تمام شوند تکرار می شود.

توجه داشته باشید که اگر تمام بخش‌های ممکن دارای طول‌های متفاوتی باشند، نتیجه این الگوریتم بدون ابهام است، در غیر این صورت بستگی به ترتیب درج قطعات با طول یکسان دارد.

مثلثی نامیده می شود طمع کار اگر توسط یک الگوریتم حریص ساخته شده باشد.

2.2 الگوریتم "حذف و ساخت"

" حذف و سیستم " هیچ بازسازی انجام نمی شود در عوض، با هر درج یک گره جدید (a)، تمام مثلث ها بلافاصله حذف می شوند، که در آن یک گره جدید (b) در داخل دایره های توصیف شده قرار می گیرد. در این حالت، همه مثلث های دور به طور ضمنی یک چند ضلعی مشخص را تشکیل می دهند. پس از آن، به جای مثلث های حذف شده، یک مثلث پرکننده با اتصال یک گره جدید به این چند ضلعی ساخته می شود (شکل ج).

برنج. 4. الگوریتم "حذف و ساخت"

این الگوریتم برخلاف الگوریتم تکراری معمول، که در آن هنگام درج یک گره، بازسازی های متعدد از یک مثلث یکسان امکان پذیر است، همه مثلث های لازم را به یکباره می سازد. با این حال، در اینجا روش استخراج کانتور یک چند ضلعی از راه دور به جلو می آید، سرعت کلی الگوریتم به کارایی آن بستگی دارد. به طور کلی، بسته به ساختار داده مورد استفاده، این الگوریتم ممکن است زمان کمتری نسبت به الگوریتم با بازسازی ها ببرد و بالعکس.

2.3 الگوریتم "ساخت با شکست"

الگوریتم درج قطعات ساختاری "ساخت با شکست" ساده ترین در اجرا و پایدار در عملیات است.

در آن، لازم است، با عبور متوالی از مثلث ها در امتداد قطعه درج شده، نقاط تقاطع آن را با لبه های مثلث پیدا کنید. در این نقاط تقاطع، شما باید گره های مثلثی جدیدی قرار دهید، لبه ها و مثلث های موجود را به قطعات تقسیم کنید. پس از آن، تمام مثلث های تازه ساخته شده باید از نظر شرایط دلون بررسی شوند و در صورت لزوم بدون تأثیر بر لبه های ثابت، بازسازی شوند.

برنج. 5. الگوریتم "ساخت با شکستن"

در برخی موارد، نقطه ضعف این الگوریتم درج ممکن است ایجاد تعداد زیادی گره و لبه های مثلث بندی اضافی باشد. در عین حال، در موارد دیگر، این اشکال به یک مزیت تبدیل می شود و از تشکیل مثلث های باریک طولانی جلوگیری می کند، که به ویژه در مدل سازی زمین مورد استقبال قرار می گیرد.

مزیت دیگر این الگوریتم درج در مقایسه با الگوریتم‌های بعدی، هنگام تلاش برای وارد کردن یک بخش ساختاری در یک مثلث که در آن لبه‌های ثابتی در میان یال‌هایی که آن را قطع می‌کند وجود دارد، ظاهر می‌شود. چنین لبه هایی مانند سایر لبه ها به سادگی به دو قسمت تقسیم می شوند.

2.4 الگوریتم با نمایه سازی k-D-tree مراکز مثلث ها

AT الگوریتم مثلث بندی با نمایه سازی مراکز مثلثها ک-د- درختفقط مراکز مثلث ها در درخت k-D قرار می گیرند (برای k = 2). هنگام حذف مثلث های قدیمی، باید مرکز آنها را از درخت k-D حذف کرد و در هنگام ساختن مثلث های جدید، باید آنها را وارد کرد.

برای جستجوی مثلثی که حاوی نقطه فعلی درج شده در مثلث باشد، لازم است یک پرس و جو نقطه ای غیر استاندارد برای درخت k-D اجرا شود. جستجو در درخت باید از ریشه شروع شود و تا برگها پایین بیاید. اگر نوادگان گره فعلی درخت k-D (مستطیلی که فرزندان را در بر می گیرد) نقطه فعلی را نمی پوشانند، لازم است نزول نزدیک ترین به نقطه جستجو را برای فرود بیشتر در امتداد درخت انتخاب کنید.

در نتیجه، مثلثی پیدا می شود که مرکز آن به نقطه داده شده نزدیک است. اگر نقطه داده شده در مثلث یافت شده قرار نگیرد، پس لازم است از الگوریتم جستجوی مثلث معمولی از یک الگوریتم تکراری ساده برای ساخت مثلث دلون استفاده شود.

3. ارزیابی کارایی الگوریتم ها

پیچیدگی محاسباتی یک الگوریتم تابعی است که وابستگی مقدار کار انجام شده توسط برخی از الگوریتم ها را به اندازه داده های ورودی تعیین می کند. مقدار کار معمولاً بر حسب زمان و مکان انتزاعی اندازه گیری می شود که منابع محاسباتی نامیده می شود. زمان با تعداد مراحل ابتدایی مورد نیاز برای حل یک مسئله تعیین می شود، در حالی که فضا با مقدار حافظه یا فضای ذخیره سازی تعیین می شود.

3.1 الگوریتم تکراری ساده

در یک الگوریتم تکراری ساده، جستجوی مثلث بعدی به صورت زیر انجام می شود. هر مثلثی که قبلاً به مثلث تعلق دارد گرفته می شود (مثلاً به طور تصادفی انتخاب می شود) و مثلث مورد نیاز با انتقال های متوالی در امتداد مثلث های متصل جستجو می شود.

در این حالت، در بدترین حالت، تمام مثلث های مثلثی باید متقاطع شوند، بنابراین پیچیدگی چنین جستجویی O (N) است. با این حال، به طور متوسط، فقط عملیات پرش O() برای توزیع یکنواخت مربع باید انجام شود. بنابراین، پیچیدگی ساده ترین الگوریتم تکراری در بدترین حالت است و به طور متوسط ​​-

3.2 الگوریتم تکراری با نمایه سازی مثلث

پیچیدگی یافتن مثلث در درخت R در بدترین حالت O(N) و به طور متوسط ​​O(log N) است. در این مورد، از 1 تا N مثلث را می توان یافت که سپس باید بررسی شود. علاوه بر این، هزینه های زمانی اضافی برای حفظ ساختار درختی - O (log N) با هر ساخت و حذف مثلث ها وجود دارد. از این نتیجه می‌گیریم که پیچیدگی الگوریتم مثلث‌سازی با نمایه‌سازی مثلث‌ها در بدترین حالت، و به طور متوسط ​​- O (N log N) است.

3.3 الگوریتم تکراری با نمایه سازی درخت K-D مراکز مثلث

پیچیدگی یافتن یک نقطه در درخت k-D در بدترین حالت O(N) و در حالت متوسط ​​O(logN) است. علاوه بر این، روند انتقال از طریق مثلث ها می تواند درگیر باشد، که در بدترین حالت O N () می تواند پرزحمت باشد. همچنین هزینه های زمانی اضافی برای حفظ ساختار درختی - O N (log) با هر ساخت و حذف مثلث ها وجود دارد.

از این نتیجه می‌گیریم که پیچیدگی الگوریتم مثلث با نمایه‌سازی مراکز مثلث در بدترین حالت، و به طور متوسط ​​- O (N log N) است.

3.4 الگوریتم فن

در الگوریتم مثلث بندی فن (الگوریتم جاروب شعاعی هواپیما)، ابتدا از نقاط ابتدایی، نقطه ای انتخاب می شود که تا حد امکان به مرکز جرم تمام نقاط نزدیک باشد. علاوه بر این، برای نقاط باقیمانده، زاویه قطبی نسبت به نقطه مرکزی انتخاب شده محاسبه می شود و همه نقاط بر اساس این زاویه مرتب می شوند. سپس تمام نقاط توسط لبه ها با نقطه مرکزی و نقاط مجاور در لیست مرتب شده به هم متصل می شوند. سپس مثلث به یک محدب کامل می شود. در نهایت، مثلث به طور کامل بازسازی می شود تا شرط دلونه را برآورده کند.

پیچیدگی چنین الگوریتمی به طور متوسط ​​O N () است. الگوریتم تقریباً با همان سرعت الگوریتم قبلی کار می کند.

4. بخش نرم افزاری

این برنامه در محیط توسعه Microsoft Visual Studio 2012 توسعه یافته است.این برنامه پنجره ای است که در آن کاربر می تواند خودسرانه نقاطی را اضافه کند که بلافاصله به مثلث Delaunay متصل می شوند. لیست مختصات تمام نقاط اضافه شده در سمت راست نمایش داده می شود.

اصلی cpp - توابع پنجره، توابع رابط کاربر

حذف کردن cpp - الگوریتم و توابعی که برای کار با آن ضروری است

شرح توابع برنامه:

void DrawPoint (int x، int y) - تابعی برای رسم یک نقطه در پنجره برنامه

void Triangulation() - تابعی برای انجام مثلث بندی

void TriangulationIn () - تابعی برای انجام اقدامات با نقاطی که داخل مثلث هستند

void TriangulationOut () - تابعی برای انجام اقدامات با نقاطی که خارج از مثلث هستند.

برای کار با اپلیکیشن، کاربر باید در ناحیه مورد نظر کلیک کند و پس از آن ساخت مثلث Delaunay انجام می شود.

الگوریتم نرم افزار مثلث بندی Delaunay

برنج. 6. رابط برنامه

نتیجه

در این کار، برنامه ای تدوین شد که بر اساس آن ساخت مثلث دلونایی انجام می شود.

همچنین تمامی اهداف و مقاصد محقق شد، یعنی یکی از الگوریتم‌های تکراری برای ساخت مثلث دلونی مورد مطالعه قرار گرفت. تعاریف و قضایای اساسی مسئله مثلث سازی دلونی مورد مطالعه قرار گرفته است. انواع اصلی الگوریتم های تکراری برای ساخت مثلث در نظر گرفته شده است. الگوریتمی برای ساخت مثلث دلونی پیاده سازی شده است.

فهرست ادبیات استفاده شده

1. Skvortsov A.V. مثلث سازی دلون و کاربرد آن / Skvortsov A.V. - Tomsk: Publishing House Vol. دانشگاه، 2012. - 128s.

2. Popov S.A. روش های محاسباتی و برنامه نویسی /پوپوف اس.ا. - مسکو: انتشارات دانشگاه دولتی مسکو، 2008، - 24 ص.

3. مدودف N.N. روش Voronoi-Delaunay در مطالعه ساختار سیستم های غیر کریستالی / RAS، نووسیبیرسک: انتشارات شعبه سیبری آکادمی علوم روسیه، 2009، - 214p.

میزبانی شده در Allbest.ru

اسناد مشابه

    روش توپ خالی دلون. پارتیشن ساده (مثلثی). ویژگی های چیدمان متقابل ساده های دلونی. الگوریتم ساخت دایره دلونی. قابلیت های برنامه نویسی با فناوری Microsoft Windows Presentation Foundation.

    مقاله ترم، اضافه شده 05/14/2011

    بررسی امکانات برنامه "Surface": در نظر گرفتن روش هایی برای ساخت خطوط ایزوله، نمودارهای Voronoi، پروفایل ها، نمودارهای درون یابی، تجسم سه بعدی، سطوح با استفاده از روش مثلث سازی Delaunay و محاسبه مناطق دید خط.

    خلاصه، اضافه شده 02/11/2010

    بررسی نظری موضوع و کاربرد عملی. اطلاعات کلی در مورد نمودارها الگوریتم دایکسترا ویژگی های کار در محیط. پیاده سازی نرم افزار. شرح الگوریتم و ساختار برنامه. توضیحات نرم افزار. متن برنامه

    مقاله ترم، اضافه شده در 2007/11/27

    ساخت بلوک دیاگرام - نمایش گرافیکی الگوریتم های فیلتر دیجیتال. گزینه های ممکن برای سنتز ساختارها به عنوان مثال فیلترهای بازگشتی. ساخت معادله اختلاف برای اینگونه فیلترها با تابع سیستم که به صورت کلی نوشته شده است.

    ارائه، اضافه شده در 2013/08/19

    شرح راه حل طراحی سیستم استراتژیک، مراحل تجزیه و تحلیل و طراحی شی گرا. شرح پیوندهای بین اشیاء پیاده سازی نرم افزار، ساخت مدلی از حالات شی. راهنمای کاربر و توضیحات برنامه.

    مقاله ترم، اضافه شده در 11/17/2011

    ویژگی های اصلی الگوریتم های تکاملی شرح الگوریتم های انتخاب، جهش، تلاقی مورد استفاده برای پیاده سازی الگوریتم های ژنتیک. محاسبه تابع تناسب اندام پیاده سازی نرم افزار. تست و راهنمای کاربر.

    مقاله ترم، اضافه شده 03/11/2014

    مراحل توسعه گرافیک کامپیوتری مفهوم کلی گرافیک سه بعدی. سازماندهی فرآیند ساخت پروژکتور. مدل سیم، پیرایش خارج از صورت، چرخش. اجرای نرم افزار ساخت تصویر. ساخت مدل های پیچیده

    مقاله ترم، اضافه شده 06/11/2012

    شبکه های معنایی به عنوان مدل های بازنمایی دانش روش های اساسی برای تعیین شباهت مدل های نموداری سیستم ها. روشی برای حل مسائل تعیین شباهت شبکه های معنایی بر اساس پیچیدگی آنها. توسعه الگوریتم ها و پیاده سازی نرم افزاری آنها.

    پایان نامه، اضافه شده 12/17/2011

    شرح فرآیند اسکن به شکل ساده شده. شرح اجزای متامدل و حالت های احتمالی آنها. آغازگر و نتیجه، کلاس های هم ارزی. عملیات روی فرآیندها: تغییر موقعیت، کاهش، ترکیب. ساخت شبکه پتری و خواص آن.

    مقاله ترم، اضافه شده 06/13/2011

    ساخت مدل مفهومی و روش مدل سازی شبیه سازی. تعیین معادلات متغیر یک مدل ریاضی و ساخت الگوریتم مدلسازی. شرح بهبودهای احتمالی در سیستم و نسخه نهایی مدل با نتایج.

مثلث سازی تقریبی از سطح جسم شبیه سازی شده توسط صفحات مثلثی است که از آن در فاصله ای بیش از مقدار مشخص شده 6 نیست. همه صفحات مثلثی باید به یکدیگر متصل شوند. بالای آنها روی سطح قرار دارد. کار با مجموعه ای از صفحات مثلثی راحت تر از یک سطح عمومی است. صفحات مثلثی را مثلث می نامند. برای یک مثلث، فاصله تا یک نقطه معین یا نقطه تقاطع با یک خط مستقیم مشخص در فضا به سرعت محاسبه می شود. مثلث بندی صورت ها برای درک بصری مدل هندسی انجام می شود، بنابراین اضلاع مثلث ها طوری انتخاب می شوند که چشم متوجه شکستگی ها نشود.

هنگام نمایش اجسام هندسی به‌وسیله مثلث‌ها بر روی سطوح پارامتریک سطوح، باید با محاسبه آرایه‌ای از نقاط در فضا و آرایه‌ای از نرمال‌ها به صورت‌های بدن در این نقاط، یک مثلث‌سازی فضایی چهره‌های بدن با استفاده از آرایه‌ای از دو نشان داد. نقاط بعدی برای نمایش سریع اجسام، چهره‌های آن‌ها با صفحات مثلثی ساخته شده بر روی نقاط تقریبی می‌شوند. الگوهای تن در فصل های قبل و در این فصل با استفاده از مثلث سازی ساخته شده اند.

در نتیجه مثلث‌سازی سطح، می‌خواهیم آرایه‌ای از نقاط دوبعدی در صفحه پارامتری و آرایه‌ای از سه اعداد صحیح داشته باشیم که این تعداد نقاط در اولین آرایه ذکر شده است. بنابراین، هر مثلث با سه عدد رأس خود در آرایه پارامترها نشان داده می شود. برای هر نقطه دو بعدی حوزه پارامتریک، یک نقطه فضایی روی سطح و سطح نرمال در آن قابل محاسبه است. نقاط مکانی و نرمال ها را می توان در آرایه هایی مشابه آرایه نقطه ای دوبعدی ذخیره کرد.

اجازه دهید به برخی از روش های مثلث بندی بپردازیم. برای سطوح مسطح، روش های مثلث بندی اقتصادی وجود دارد که در آن مثلث ها در نقاط مرزی سطح ساخته می شوند و نیازی به جستجوی نقاط در داخل ناحیه پارامتری نیست.

مثلث سازی دلونی

قسمتی از هواپیما را در نظر بگیرید. منطقه ای محدب نامیده می شود که هنگام حرکت در امتداد مرز آن، فقط در یک جهت بچرخد (فقط به چپ یا فقط به راست). می توانید از الگوریتم Delaunay برای مثلث بندی مناطق مسطح محدب استفاده کنید. ما نمی‌توانیم مستقیماً از این الگوریتم برای مثلث‌بندی سطوح آزاد استفاده کنیم، اما از روش آن برای ساخت مثلث استفاده خواهیم کرد.

برنج. 9.7.1. ناحیه محدب با نقاط داده شده در داخل

اجازه دهید یک ناحیه دو بعدی محدب که توسط یک خط شکسته بسته محدود شده و مجموعه ای از نقاط در داخل این منطقه محدود شده باشد (شکل 9.7.1).

لازم است ناحیه مشخص شده را به مثلث هایی تقسیم کنیم که رئوس آن نقاط داده شده در داخل منطقه و رئوس چند خطی است که آن را محدود می کند. مثلث ها نباید همپوشانی داشته باشند و اضلاع آنها فقط می توانند در رئوس یکدیگر را قطع کنند.

می توانید چندین مجموعه مختلف مثلث بسازید که ناحیه مشخص شده را پر می کند. در همه موارد، تعداد مثلث ها برابر است، جایی که K تعداد رئوس چندخط کران کننده است، I تعداد نقاط داده شده در داخل منطقه است.

برنج. 9.7.2. انتخاب نقطه سوم الگوریتم دلون

اگر هیچ رئوسی از مثلث های دیگر در داخل دایره محصور در اطراف هر مثلث وجود نداشته باشد، یک مثلث دامنه، مثلث دلونی خواهد بود. مثلث سازی Delaunay مثلث هایی را تا حد امکان نزدیک به متساوی الاضلاع می سازد (اجازه ساخت مثلث های دراز غیر منطقی را نمی دهد).

می توانید آن را متعادل بنامید. اگر چهار راس روی یک دایره نباشد، مثلث دلونی منحصر به فرد خواهد بود.

مثلث Delaunay را در نظر بگیرید. رئوس چند خطی که منطقه و نقاط داده شده در داخل منطقه را محدود می کند، راس مثلثی نامیده می شود. اضلاع مثلث ها لبه نامیده می شوند. از میان یال ها، پاره های پلی خط مرزی را انتخاب می کنیم که آن ها را لبه های مرزی می نامیم. اجازه دهید تمام لبه های مرزی را طوری جهت دهیم که ناحیه محدب در سمت چپ هر یال قرار گیرد. اجازه دهید لازم باشد مثلثی بسازید که ضلع آن لبه مرزی AB باشد که در شکل نشان داده شده است. 9.7.2.

یک دایره را می توان از میان رئوس A، B و هر رأسی که روی یک خط با آنها قرار ندارد رسم کرد. به عنوان سومین راس مثلث، راس V را انتخاب می کنیم که مربوط به آن دایره دارای رئوس دیگری در همان ضلع نسبت به قطعه AB که نقطه V روی آن قرار دارد، نیست. در حالت کلی، یکی از این رأس ها می توان برای لبه مرزی یافت. بیایید آن را نزدیکترین نام بگذاریم. مرکز دایره ای که از نقاط A، B و V می گذرد در محل تلاقی عمود بر نقاط وسط قطعات AB، BV و VA قرار دارد. موقعیت مرکز دایره با پارامتر t از بخش MN عمود بر لبه AB مشخص می شود که طول آن برابر است و از وسط لبه AB می گذرد.

برنج. 9.7.3. فرآیند مثلث سازی دلونی

برای تمام رئوس سمت چپ قطعه AB، نزدیکترین راس دارای کوچکترین پارامتر t است. دایره مربوط به نزدیکترین راس شامل رئوس دیگری در سمت چپ قطعه AB نیست. بگذارید رئوس A، B و V به ترتیب با بردارهای شعاع دو بعدی توصیف شوند. بردار شعاع نقاط میانی قطعات AB و BV برابر خواهد بود

مقدار پارامتر t خط مستقیم، مربوط به موقعیت مرکز دایره ای که از نقاط A، B و V می گذرد، برابر است با

برای نزدیکترین راس به سمت چپ قطعه AB، پارامتر t دارای حداقل مقدار است.

تمام لبه های مرزی را طوری جهت دهید که ناحیه مثلثی در سمت چپ هر یک از آنها قرار گیرد. از هر لبه مرزی شروع به ساخت مثلث می کنیم. برای آن نزدیکترین راس را پیدا کنید که دایره متناظر آن شامل رئوس دیگری نباشد. اجازه دهید نزدیکترین راس V برای یال مرزی AB پیدا شود سپس مثلث ABV را می سازیم و یال AB را به دسته های غیرفعال تبدیل می کنیم. ما لبه ها و رئوس های غیرفعال را که در الگوریتم مثلث سازی شرکت نمی کنند فراخوانی می کنیم. اگر لبه BV در بین لبه های مرزی وجود نداشته باشد، یک یال مرزی جدید روی قطعه VB می سازیم. اگر یک یال BV در بین یال های مرزی وجود داشته باشد، آن را و راس B را به دسته غیرفعال ها منتقل می کنیم. اگر هیچ لبه VA در بین لبه های مرزی وجود نداشته باشد، یک لبه مرزی جدید بر روی قطعه AV می سازیم. اگر یک یال VA در بین یال های مرزی وجود داشته باشد، آن را و راس A را به دسته های غیرفعال منتقل می کنیم. فرآیند مثلث سازی در شکل نشان داده شده است. 9.7.3.

برنج. 9.7.4. مثلث سازی دلون

مثلث سازی زمانی به پایان می رسد که تمام رئوس و یال ها غیرفعال شوند. نتیجه مثلث بندی ناحیه داده شده در شکل نشان داده شده است. 9.7.4.

مثلث بندی به روش تصحیح.

بیایید مثلث بندی سطحی را با دامنه مستطیلی تعریف پارامتر در نظر بگیریم.بیایید دامنه تعریف پارامترهای سطح را با خطوط دو بعدی به سلول های مستطیلی تقسیم کنیم.این خطوط یک شبکه مستطیل شکل را تشکیل می دهند. فاصله پارامتری بین خطوط مجاور را مطابق با فرمول (9.4.7) برابر می کنیم

فواصل پارامتریک بین خطوط مجاور را مطابق با فرمول (9.4.8) برابر می کنیم

با ساختن مورب ها در تمام سلول های مستطیلی، یک مثلثی از سطح به دست می آوریم (مجموعه ای از مثلث ها را به دست می آوریم که نیازها را برآورده می کند). روی انجیر 9.7.5 مثلث بندی سطح چرخش را به روش توصیف شده نشان می دهد.

مثلث بندی سطحی با مرز دلخواه را در نظر بگیرید. ما روش مثلث‌سازی را بر روی تصحیح خطوط مرزی مثلث‌سازی سطحی که در بالا توضیح داده شد با دامنه مستطیلی تعریف پارامتر می‌سازیم.

برنج. 9.7.5. مثلث سازی یک سطح با دامنه پارامتر مستطیلی شکل

اجازه دهید مرز سطح در حوزه تعریف پارامترها با چندین خطوط دو بعدی غیر متقاطع توصیف شود (2.12.7). یکی از خطوط بیرونی است و شامل بقیه خطوط است. به عنوان یک جهت مثبت برای هر کانتور، جهتی را در هنگام حرکت در نظر می گیریم که ناحیه تعریف سطح همیشه در سمت چپ کانتور است، اگر به سمت سطح عادی نگاه کنید. بیایید چند ضلعی در جهت مثبت خطوط مرزی منطقه تعریف سطح بسازیم. برای ساختن چند ضلعی های مرزی، لازم است از امتداد خطوط مرزی سطح با مقداری پله متغیر عبور کرده و آرایه ای از نقاط دو بعدی را که مختصات آن پارامترهای سطح هستند پر کنیم. چند ضلعی از نقاطی در صفحه پارامتری ساخته می شود، اما گام در انتقال از یک نقطه به نقطه دیگر از هندسه فضایی تعیین می شود، یعنی از شرایطی که انحراف قوس منحنی بین نقاط مجاور دیگر وجود نداشته باشد. از یک مقدار معین مراحل پارامتری ساخت چند ضلعی برای منحنی خطوط مرزی سطح با فرمول (9.4.4) محاسبه می شود.

هر چند ضلعی از مجموعه ای مرتب از نقاط دو بعدی تشکیل شده است. از این بخش‌ها به عنوان لبه‌های مرزی استفاده می‌کنیم و از نقاط چندضلعی‌هایی که لبه‌ها روی آن‌ها قرار گرفته‌اند به‌عنوان رئوس مثلث‌سازی استفاده می‌کنیم. از آنجایی که دامنه تعریف پارامترهای سطح در سمت چپ چند ضلعی های مرزی قرار دارد، هنگام ساخت مثلث برای هر لبه مرزی مثلث، باید به دنبال راس سوم مثلث در سمت چپ لبه بود.

بیایید تعیین کنیم که کدام گره ها در داخل چند ضلعی های مرزی قرار دارند و کدام گره ها در مرز یا خارج از ناحیه تعریف سطح قرار دارند. با استفاده از این اطلاعات، سلول های شبکه مستطیلی را به دو گروه دسته بندی می کنیم. گروه اول شامل سلول هایی است که کاملاً در محدوده تعریف پارامترهای سطح قرار دارند (سلول ها نباید چند ضلعی های مرزی را لمس کنند). گروه دوم شامل بقیه سلول ها (که خارج از محدوده تعریف سطح قرار دارند یا با چند ضلعی های مرزی متقاطع شده اند).

برنج. 9.7.6. مثلث سازی سطحی ناتمام

در داخل هر خانه از گروه اول با استفاده از مورب دو مثلث می سازیم. بنابراین، یک مثلث ناتمام دریافت می کنیم. نمونه ای از ساخت مثلث در سلول های گروه اول برای یک سطح چرخشی که با خطوط محدود شده است در شکل نشان داده شده است. 9.7.6.

در اضلاع غیر متقاطع سلول های گروه دوم، لبه های مرزی می سازیم و آنها را طوری هدایت می کنیم که سلول مربوطه در سمت چپ لبه باشد. ما یک چند خط بسته در اطراف سلول های گروه اول می سازیم (چند خط بسته ممکن است) به طوری که هنگام حرکت در امتداد آن، اگر به سمت سطح عادی نگاه کنید، قسمتی از ناحیه که به مثلث تقسیم نشده است به سمت چپ قرار گیرد. مقاطع مستقیم این چند خط نیز به عنوان لبه های مرزی استفاده خواهند شد. ما همه لبه ها را در حقوق برابر در نظر خواهیم گرفت. برای تکمیل مثلث بندی، باید مثلث هایی بین لبه های مرزی بسازیم. برای هر یال، ما به دنبال یک راس خواهیم بود که در سمت چپ آن قرار دارد و بتوان از آن برای ساختن یک مثلث استفاده کرد. ما یک راس را فقط در میان آن رئوس هایی که در یک سلول با یک یال قرار دارند جستجو خواهیم کرد. برای انتخاب یک راس، از روش Delaunay که در بالا توضیح داده شده و در شکل نشان داده شده است استفاده می کنیم. 9.7.2. اگر چنین رأسی یافت شود، باید بررسی کرد که آیا دو یال جدید مثلث با هر یال مرزی تلاقی می کنند یا خیر. اجازه دهید نزدیکترین راس V برای لبه مرزی AB پیدا شود و باید تأیید شود که بخش‌های BV و VA لبه‌های مرزی دیگر را قطع نمی‌کنند. سپس یک مثلث ABV می سازیم و یال AB را به دسته غیرفعال ها منتقل می کنیم. اگر در بین لبه های مرزی یال BV وجود نداشته باشد، یک یال مرزی جدید روی قطعه VВ می سازیم، اما اگر یک یال BV در بین یال های مرزی وجود داشته باشد، آن را و راس B را به دسته غیرفعال منتقل می کنیم. . اگر در بین لبه های مرزی یال VA وجود نداشته باشد، در قسمت AV یک یال مرزی جدید می سازیم، اما اگر یک یال VA در بین یال های مرزی وجود داشته باشد، آن را و راس A را به دسته غیرفعال منتقل می کنیم.

اگر پاره یا VA یال‌های مرزی دیگر را قطع کند، به سراغ یافتن نزدیک‌ترین راس برای یال مرزی دیگر می‌رویم. مثلث سازی پس از انتقال تمام یال ها و رئوس به دسته غیرفعال تکمیل می شود.

برنج. 9.7.7. مثلث بندی به روش تصحیح

روی انجیر 9.7.7 مثلث بندی سطح را با روش تصحیح مثلث ها در سلول های متقاطع خطوط مرزی نشان می دهد. روی انجیر 9.7.8 با کمک مثلث به دست آمده، خود سطح نمایش داده می شود.

اگر چند ضلعی های مرزی و سطح دارای تقارن باشند، مثلث اصلاحی نیز تقارن مشابهی خواهد داشت.

مثلث بندی به روش جذبی.

روش مثلث بندی دیگری را در نظر بگیرید. از نظر سرعت نسبت به مثلث سازی دلون و اصلاحات آن پایین تر است. برای شروع روش مثلث بندی، لازم است که مرز سطح را به شکل چند ضلعی های بسته نشان دهیم. در فرآیند مثلث بندی، ما باید مراحل پارامترهای سطح را تعیین کنیم. با جهت حرکت مشخص، این مراحل با فرمول (9.4.6) تعیین می شوند. مراحل تقریبی پارامترهای سطح را می توان به شرح زیر یافت. اجازه دهید یک ناحیه در صفحه پارامتر حول یک نقطه خاص به گونه ای تعریف کنیم که هر بخش فضایی از یک نقطه به نقطه ای در این منطقه از یک مقدار معین S از سطح بیشتر نباشد.

برای انجام این کار، افزایش مجاز پارامترها را در امتداد خطوط مختصات محاسبه می کنیم

ضرایب شکل درجه دوم اول و دوم سطح در نقطه کجاست. یک بیضی در مرکز یک نقطه و نیم محور برای مرز ناحیه مورد نظر می گیریم. این بیضی معادله دارد

اگر لازم باشد نقطه ای از صفحه در کنار نقطه در جهت داده شده توسط زاویه با محور پیدا شود، پارامترهای آن به صورت

اجازه دهید ابتدا یک مورد ساده تر را در نظر بگیریم، زمانی که مساحت پارامترهای سطح توسط یک کانتور خارجی محدود می شود. ما مرز سطح را با یک چندضلعی بسته در حوزه پارامتری تقریب می‌زنیم. هنگام ساخت مثلث، از یک چند ضلعی در حال کار استفاده می کنیم که در این حالت چند ضلعی کانتور بیرونی را می گیریم. نقاط چند ضلعی در آرایه حاصل از نقاط دو بعدی وارد می شوند. از لبه چند ضلعی کار مثلث هایی می سازیم و آن را باریک می کنیم تا تنها سه نقطه در چند ضلعی کار باقی بماند.

راس را در چند ضلعی کاری که در آن در داخل ناحیه می چرخد، پیدا کنید. چنین نقطه ای همیشه وجود دارد و زاویه چرخش در آن کمتر از . بیایید این نقطه را از طریق O و پارامترهای آن تعیین کنیم - در اطراف این نقطه، بسته به زاویه چرخش، یک یا دو مثلث می سازیم. اگر زاویه کمتر باشد، روی این سه نقطه یک مثلث می سازیم (شکل 9.7.9). در غیر این صورت، دو مثلث روی داده شده، دو همجوار و یک نقطه جدید می سازیم (شکل 9.7.11). نقطه جدید با P نشان داده می شود. ما به دنبال نقطه P در مورب متوازی الاضلاع B OS P خواهیم بود. اگر راس متوازی الاضلاع در داخل بیضی قرار گیرد (شکل 9.7.10)، آن را به عنوان نقطه در نظر می گیریم. نقطه P. در غیر این صورت، تقاطع بیضی و مورب متوازی الاضلاع را به عنوان نقطه P در نظر می گیریم. در مورد دوم، اصلاً لازم نیست که به دنبال تقاطع بیضی و قطعه باشید.

مختصات نقطه P از طریق مختصات نقاط O VS تعیین می شود

زاویه قطعه OR با افقی با تساوی تعیین می شود

(9.7.8)

این داده ها تعیین موقعیت نقطه P نسبت به بیضی را ممکن می سازد (9.7.5).

در مورد نشان داده شده در شکل. 9.7.9، یک مثلث بسازید (اعداد رئوس آن را به خاطر بسپارید) و نقطه O را در چند ضلعی کار حذف کنید. 9.7.11، دو مثلث بسازید و نقطه O را در چند ضلعی کار با نقطه P جایگزین کنید و دومی را در آرایه نقاط به دست آمده قرار دهید. روی انجیر 9.7.12 چند ضلعی را نشان می دهد که پس از ساخت دو مثلث و حذف نقطه O به دست آمده است. در هر دو حالت، نقطه O از چند ضلعی کار حذف شده و چند ضلعی کار باریک می شود. توجه داشته باشید که مثلث ها را فقط زمانی می توان ساخت که چند ضلعی کار پس از باریک شدن خودش را قطع نکند.

برنج. 9.7.9. ساخت مثلث

برنج. 9.7.10. چند ضلعی نتیجه

برنج. 9.7.11. ساخت دو مثلث

برنج. 9.7.12. چند ضلعی نتیجه

چنین موقعیت هایی در شکل نشان داده شده است. 9.7.13. آنها می توانند زمانی رخ دهند که اضلاع مثلث های ساخته شده اضلاع چند ضلعی کاری را که مجاور آنها نیستند قطع کنند. قبل از ساختن یک مثلث جدید، همانطور که در شکل نشان داده شده است. 9.7.9، و در مورد نشان داده شده در شکل. 9.7.11، باید برای عدم وجود خود تقاطع چندضلعی حاصل بررسی شود.

علاوه بر این، هنگام تعیین موقعیت نقطه P، مهم است که در فاصله کافی از سایر نقاط چند ضلعی کار قرار داشته باشد و به بخش های متصل کننده نقاط چند ضلعی نزدیک نشود. در غیر این صورت، ممکن است در آینده هنگام ساخت مثلث مشکلاتی ایجاد شود. بنابراین، قبل از باریک کردن چند ضلعی کار، باید چند ضلعی حاصل را از نظر خودتقاطع بررسی کنید. اگر یک مثلث (مثلث) را نمی توان در نزدیکی نقطه O ساخت، به جای آن، باید نقطه دیگری را پیدا کنید که در آن چند ضلعی بیش از سایرین در داخل کانتور قرار می گیرد و اقدامات توصیف شده را در آن انجام دهید.

در مرحله بعد، با چند ضلعی کاری اصلاح شده، همان اقداماتی را که توضیح دادیم انجام خواهیم داد. بیایید نقطه ای را در چند ضلعی کار پیدا کنیم که در آن بیشتر از نقاط دیگر در داخل آن ناحیه بچرخد، با ساختن یک یا دو مثلث امکان باریک شدن چند ضلعی در آن را بررسی کرده و چند ضلعی را باریک کنید.

برنج. 9.7.13. مثلث در این گوشه مجاز نیست.

در ادامه این روند، آرایه نقاط دو بعدی و آرایه مثلث ها را گسترش می دهیم و در عین حال چند ضلعی کار را باریک می کنیم و مساحت آن و تعداد نقاط آن را کاهش می دهیم. در برخی از مراحل این اقدامات، ما یک چند ضلعی کار می کنیم که از سه نقطه تشکیل شده است. بیایید آخرین مثلث را روی این نقاط بسازیم، چند ضلعی کار را حذف کنیم و مثلث را تمام کنیم. در روش توصیف شده مثلث بندی، ناحیه محدود شده توسط چند ضلعی کار، همانطور که بود، با بریدن مثلث ها از آن حذف می شود.

اجازه دهید حالت کلی را در نظر بگیریم که مساحت پارامترهای سطح توسط یک کانتور خارجی و چندین کانتور داخلی که کاملاً در داخل کانتور خارجی قرار دارند محدود می شود. ما مرز سطح را با چند ضلعی های بسته در دامنه پارامتری تقریب می زنیم. برای هر کانتور، ما چند ضلعی خود را خواهیم ساخت. و همچنین برای خطوط، برای چند ضلعی های ساخته شده بر روی آنها، قانون جهت گیری متقابل آنها باید رعایت شود. جهت چند ضلعی های داخلی باید برعکس جهت چندضلعی بیرونی باشد. بیایید شروع به ساخت یک مثلث با چند ضلعی از کانتور بیرونی کنیم. بیایید نقاط آن را در آرایه حاصل از نقاط دو بعدی قرار دهیم و خود چند ضلعی کار کند.

ما مثلث ها را به همان روشی که در مورد یک منطقه ساده متصل می سازیم می سازیم. بیایید نقطه O را در چند ضلعی کار پیدا کنیم، امکان باریک شدن چند ضلعی کار در آن را بررسی کنیم و چند ضلعی را باریک کنیم. اگر خطوط داخلی وجود داشته باشد، بررسی امکان باریک شدن چند ضلعی کار در نقطه انتخاب شده دشوارتر می شود. علاوه بر بررسی های توصیف شده برای تقاطع اضلاع مثلث ها با اضلاع چند ضلعی کار، باید تلاقی اضلاع مثلث ها با اضلاع همه چند ضلعی های داخلی را بررسی کنید.

اجازه دهید امکان ساخت دو مثلث در نقطه O را بررسی کنیم (شکل 9.7.11)، و دریابیم که نقطه جدید P، در حال ساخت، در داخل یکی از چند ضلعی های داخلی قرار می گیرد یا به طور غیرقابل قبولی نزدیک به بخش های آن خواهد بود. . در این حالت، نقطه P را نمی سازیم، بلکه با ساخت دو مثلث که در شکل نشان داده شده است، این چند ضلعی داخلی را در چند ضلعی در حال کار قرار می دهیم. 9.7.14.

برای اینکه نقاط یکی از چند ضلعی های داخلی را در چند ضلعی کار قرار دهیم، در بین نقاط چند ضلعی داخلی نزدیک ترین نقطه به نقطه C (مجاور به نقطه O) چند ضلعی کار را می یابیم.

بیایید روی نقاط OCF و CEF مثلث بسازیم و بین نقاط O و C چند ضلعی کار، نقاط چند ضلعی داخلی را وارد کنیم که از نقطه F شروع می شود و به نقطه E ختم می شود. بخش OS، چند ضلعی داخلی در بخش EF را بشکنید و آنها را با بخش های OF و EU یکی کنید.

برنج. 9.7.14. ساخت دو مثلث

برنج. 9.7.15. ادغام چند ضلعی های بیرونی و داخلی

نتیجه ادغام در شکل نشان داده شده است. 9.7.15. البته قبل از ادغام چند ضلعی بیرونی و داخلی باید بررسی هایی برای صحت این عمل انجام شود.

علاوه بر این، ما به محدود کردن چند ضلعی کار به روش توصیف شده ادامه می دهیم تا زمانی که خود را در نزدیکی یک چند ضلعی داخلی دیگر قرار دهیم و آن را در چند ضلعی کاری قرار دهیم. در نتیجه، همه چند ضلعی های داخلی در چند ضلعی کار گنجانده می شوند که باید به سه نقطه آخر محدود شوند. در نتیجه، کل دامنه اتصال چندگانه پارامترهای سطح با مثلث پوشانده می شود.

برنج. 9.7.16. مثلث در این گوشه مجاز نیست.

شرایطی وجود دارد که ساختن یک مثلث منفرد روی چند ضلعی های داده شده غیرممکن است. روی انجیر 9.7.16 ناحیه ای را نشان می دهد که توسط دو چند ضلعی محدود شده است که هر کدام از چهار بخش تشکیل شده است. برای چند ضلعی بیرونی، نمی‌توانیم مثلث‌سازی را ادامه دهیم، زیرا چندضلعی داخلی تداخل دارد. در این حالت دو نقطه همسایه B و C از چند ضلعی را پیدا می کنیم که می توانیم یک مثلث VSR برای آنها بسازیم. نقطه P به وسط ضلع BC کشیده شده و در فاصله ای از آن قرار دارد که مثلث جدید چند ضلعی ها را قطع نمی کند.

سایر روش های مثلث بندی

راه های دیگری برای مثلث بندی وجود دارد. به عنوان مثال، پس از ساخت چند ضلعی های خطوط بیرونی و داخلی ناحیه تعریف سطح، می توان استراتژی متفاوتی برای ساخت مثلث ها انتخاب کرد. از طرف دیگر، می توانید قبل از شروع مثلث، چند ضلعی های بیرونی و داخلی را در یک چند ضلعی ادغام کنید. می توان بر اساس الگوریتم خاصی، نقاطی را در داخل ناحیه تعریف پارامتر ترسیم کرد و با استفاده از آنها و نقاط چندضلعی های مرزی، مثلث سازی دلونی را انجام داد. الگوریتم هایی وجود دارند که ابتدا مثلث های بزرگ می سازند و سپس آنها را به اندازه های قابل قبول تقسیم می کنند.

مثلثی شدن بدن.

مثلث یک جسم به مجموعه مثلث هایی گفته می شود که از مثلث سازی سطوح وجه های آن به دست می آیند. مثلث‌سازی سطوح منفرد با مثلث‌سازی چهره‌های بدن متفاوت است، زیرا در حالت دوم، چندضلعی‌های مرزی برای وجوه مجاور باید مطابقت داده شوند (شکل 9.7.17).

برنج. 9.7.17. سازگاری چند ضلعی های مرزی چهره های بدن

بخش هایی از چند ضلعی های وجه های مجاور که از لبه های مشترک عبور می کنند، اگر نقاط آنها در فضا منطبق باشد، سازگار خواهند بود.

کاربرد مثلث بندی

مثلث های ساخته شده در نتیجه مثلث بندی برای به دست آوردن تصاویر تن استفاده می شود. روی انجیر شکل‌های 9.7.18 و 9.7.19 مثلث‌هایی از صورت بدنه ورق را نشان می‌دهند که تصویر تن آن در شکل نشان داده شده است. 6.5.1.

برنج. 9.7.18. مثلث بندی صورت بدن به روش اصلاح

تقسیم دامنه تعریف پارامترهای سطح به مثلث ها می تواند در انتگرال (8.6.2)، (8.6.3)، (8.6.12)، (8.7.17)-(8.7.22) هنگام محاسبه ویژگی های هندسی استفاده شود. بدن. برای ادغام عددی، گام پارامتری برای منحنی ها باید با استفاده از فرمول (8.11.5) و برای سطوح، گام پارامتری با استفاده از فرمول های (8.11.1) و (8.11.2) محاسبه شود.

اوت 20, 2012 در 10:41 ب.ظ

بهینه سازی الگوریتم بررسی شرایط دلونی از طریق معادله دایره محدود شده و کاربرد آن

  • پردازش تصویر ،
  • برنامه نويسي

من به شما راز چگونگی بررسی سریع شرایط Delaunay برای دو مثلث را به شما می گویم.
در واقع، خود بهینه‌سازی کمی پایین‌تر توضیح داده شده است (به «بهینه‌سازی الگوریتم برای بررسی شرایط Delaunay از طریق معادله دایره محدود» مراجعه کنید)، اما من همه چیز را به ترتیب به شما خواهم گفت.

در مورد من، مثلث سازی در ردیابی تصویر برای تقسیم صفحه به بخش های اولیه (مثلث) استفاده می شود. همانطور که می دانید، آن نیز به چند مرحله تقسیم می شود: تنظیم، تشخیص مرزها، دور زدن مرزها، جارو کردن خطوط. این در کلی ترین حالت است. من فکر می کنم می خواهم در سخت ترین مرحله توقف کنم: جارو کردن هواپیما.

در ورودی
پس از شناسایی و دور زدن مرزها در خروجی، خطوط خارجی زیادی به دست آوردم. هر کانتور لمسی رنگ متفاوتی دارد. هر یک از این خطوط همچنین حاوی تعداد مشخصی از خطوط داخلی است.
بنابراین، از نقطه نظر "جارو کردن هواپیما"، اگر خطوط بیرونی را جداگانه در نظر بگیریم، مجموعه ای از نقاط را داریم که هر کدام یک همسایه در سمت راست و چپ دارند. آن ها تمام نقاط در زنجیره بسته هستند، یک نقطه "آویز" وجود ندارد و هر یک از زنجیره ها حداقل 3 نقطه را شامل می شود (شکل 1).

تصویر 1

چه کاری باید انجام شود
لازم است شکل را با مثلث جارو کنید.
جستجو کردن
پس از خواندن کتاب، من یک راه واحد (حداقل یک) برای ساختن مثلث دلون پیدا نکردم که حداقل تا حدودی برای مورد من مناسب باشد. من دنبال کتاب های دیگر نبودم. بله، و همین کافی بود، او افکار سرم را مرتب کرد. در نتیجه او "دوچرخه" خود را اختراع کرد.
الگوریتم
1) برای شروع، فرض کنید که فقط یک دنباله در شکل مورد بررسی وجود دارد. سپس همه چیز به گرفتن متوالی مثلث ها ختم می شود. هر نقطه ای را می گیریم و سعی می کنیم با نقاط همسایه مثلث بسازیم. اگر امکان ساخت مثلث وجود نداشت (خطی که این دو نقطه را به هم متصل می کند با مواردی که قبلاً ساخته شده اند قطع می شود یا خط در منطقه محرومیت می گذرد (شکل 2)، به نقطه همسایه، فرض کنید به سمت راست حرکت می کنیم. مثلث پیدا می شود، آن را به لیست اضافه می کنیم (شکل 3) و نقطه ای که از آن ساخته شده است حذف می شود (شکل 4).


شکل 2

شکل 3

شکل 4

یک چیز دیگر: هنگام ذخیره مثلث بعدی، لازم است که رئوس را در یک دور زدن جهت عقربه های ساعت (در سیستم مختصات سمت راست) ثبت کنید. این در آینده برای کاهش منابع محاسباتی مفید خواهد بود.

2) مرحله 1 را تکرار کنید تا کل هواپیما را جارو کنیم.

3) اگر چندین دنباله وجود داشته باشد، به عنوان مثال. یک، و در داخل آن یک یا چند کانتور داخلی وجود دارد (شکل 1). در اینجا لازم است هر سکانس را جداگانه در نظر بگیریم. بیایید یک کانتور داخلی دیگر را در نظر بگیریم. از یک خارجی و دیگری داخلی دو کانتور منفرد می سازیم. برای انجام این کار، باید دو "پورت" را از یک مدار به مدار دیگر پیدا کنید. شرط "پورت ها": آنها نباید با یکدیگر تلاقی داشته باشند (حتی انتهای آنها را لمس نکنند)، آنها نباید با خطوط کانتور قطع شوند (شکل 5).


شکل 5

شکل 6
4) بعد، شما باید به نوبه خود تمام دنباله های داخلی را به دنباله های از قبل تشکیل شده، جدا از یکدیگر (نقطه 3) وارد کنید. باید با یکی که حاوی جدید است ادغام شوید. طبق تعریف، هیچ سکانس داخلی با دیگران تماس یا تلاقی ندارد (خواه یکی بیرونی یا همه درونی های ممکن)، بنابراین همه چیز به آرامی پیش خواهد رفت.
با یافتن پورت ها (شکل 6)، ساخت توالی های جدید و دور زدن آنها با نقاط 1 و 2 الگوریتم فعلی آسان است (شکل 7).

شکل 7

5) پس از مرحله چهارم، لیستی از مثلث ها را داریم (شکل 8). انگار قبلاً با این کار کنار آمده‌ایم، اما همچنان زیباتر کردن تصویر باقی مانده است: تحقق شرط Delaunay را بررسی کنید (شکل 9).

شکل 8

شکل 9

6) با نگاهی به آینده، نکته ششم را به شما خواهم گفت. این شامل یک حرکت متوالی در لیست مثلث های دریافت شده توسط نقطه شماره 5 است. ابتدا تمام مثلث ها را به عنوان "کثیف" علامت گذاری می کنیم. در هر چرخه، شرط دلونی را برای هر مثلث بررسی می کنیم. اگر شرط برآورده نشد، همسایه ها و مثلث فعلی را دوباره می سازیم و به عنوان "کثیف" علامت گذاری می کنیم. اگر شرط برآورده شد، آن را تمیز علامت بزنید. در اجرای الگوریتم من، هر مثلث پیوندی به همسایگان خود دارد. در این مورد، نقطه 6 سریع ترین کار را انجام می دهد.

اطلاعات بیشتر در مورد مرحله پنجم
اکنون، تا آنجا که من می دانم، دو راه ممکن برای تعیین اینکه آیا مثلث ها شرط دلونی را برآورده می کنند یا خیر وجود دارد: 1) مجموع زوایای مخالف را بررسی کنید. باید کمتر از 180 باشد. 2) مرکز دایره محدود شده را محاسبه کنید و فاصله تا نقطه چهارم را محاسبه کنید. همه می دانند که اگر نقطه خارج از دایره محدود باشد، شرط دلون برآورده می شود.

توان محاسباتی شماره 1: 10 عملیات ضرب/تقسیم و 13 عملیات جمع/تفریق.
توان محاسباتی شماره 2: 29 ضرب/تقسیم و 24 جمع/ تفریق.

از نظر قدرت محاسباتی که مثلا در کتاب محاسبه شده گزینه شماره 1 سود بیشتری دارد. و او متوجه شد، اگر نه برای ... (شکل 10). همانطور که معلوم شد، پس از قرار دادن این روش بر روی "نقاله"، عدم اطمینان وجود داشت. این گزینه زمانی است که خود زاویه A بیشتر از 180 درجه باشد. در کتاب به عنوان یکی از روش های خصوصی جداگانه در نظر گرفته شده است. و با این همه ظرافت، شفافیت و عملکرد آن از بین می رود. و همچنین بعداً مشخص شد که روش شماره 2 می تواند به طور قابل توجهی بهینه شود.


شکل 10

بهینه سازی الگوریتم بررسی شرایط دلونی از طریق معادله دایره محدود شده

آنچه در ادامه می آید ریاضیات محض است.

بنابراین ما داریم:
بررسی شرط نقطه M(X, Y) با معادله دایره ای که از نقاط A(x1, y1), B(x2, y2), C(x3, y3) می گذرد را می توان به صورت زیر نوشت:

(a ⋅ (X^2 + Y^ 2) − b ⋅ X + c ⋅ Y − د) ⋅ علامت a ≥ 0

جزئیات را می توان در کتاب عالی یافت. (نه، من نویسنده نیستم)
پس علامت a علامت جهت پیمایش است، از همان ابتدا مثلثهایی را در جهت عقربه های ساعت ساختم تا حذف شود (برابر یک است).

A(x1 - X، y1 - Y)، B(x2 - X، y2 - Y)، B(x3 - X، y3 - Y)؛

D >= 0

شکل 11

فقط اینطور نیست؟

طبق کتاب، دوباره،

(x1^2 + y1^2)*(y2*x3 - x2*y3) + (x2^2 + y2^2)*(x1*y3 - y1*x3) + (x3^2 + y3^2)* (y1*x2 - x1*y2)<= 0

ما داریم: 15 عملیات ضرب/تقسیم و 14 عمل جمع/تفریق.

با تشکر از توجه شما. منتظر انتقاد هستم

کتابشناسی - فهرست کتب
1. Skvortsov A.V. مثلث سازی دلون و کاربرد آن - Tomsk: Publishing House Vol. un-ta, 2002. - 128 p. شابک 5-7511-1501-5

مثلث‌سازی برای مجموعه محدودی از نقاط S، مشکل مثلث‌سازی بدنه محدب CH(S) است که تمام نقاط مجموعه S را در بر می‌گیرد. پاره‌های خط در طول مثلث‌بندی نمی‌توانند قطع شوند - آنها فقط می‌توانند در نقاط مشترک متعلق به مجموعه S به هم برسند. پاره های خط مثلث ها را می بندند، آنها را لبه در نظر می گیریم. روی انجیر شکل 1 دو نوع مختلف مثلث بندی را برای یک مجموعه از نقاط نشان می دهد (ما به طور موقت دایره های ترسیم شده در این شکل ها را نادیده می گیریم).

برنج. یکی

با توجه به مجموعه ای از نقاط S، می توانیم ببینیم که تمام نقاط مجموعه S را می توان به نقاط مرزی - آن نقاطی که در مرز بدنه محدب CH(S) قرار دارند و نقاط داخلی - آنهایی که در داخل محدب قرار دارند تقسیم کرد. بدنه CH(S). همچنین می توان لبه های به دست آمده در نتیجه مثلث بندی S را به عنوان طبقه بندی کرد لبه های پوستهو دنده های داخلی. لبه های بدنه شامل لبه های واقع در امتداد مرز بدنه محدب CH(S) و لبه های داخلی شامل تمام لبه های دیگری است که شبکه ای از مثلث ها را در داخل بدنه محدب تشکیل می دهند. توجه داشته باشید که هر لبه پوسته دو نقطه مرزی مجاور را به هم متصل می کند، در حالی که لبه های داخلی می توانند دو نقطه از هر نوع را به هم متصل کنند. به طور خاص، اگر یک لبه داخلی دو نقطه مرزی را به هم متصل کند، آنگاه یک وتر از بدنه محدب CH(S) است. همچنین توجه داشته باشید که هر یال مثلثی مرز دو ناحیه است: هر لبه داخلی بین دو مثلث و هر لبه پوسته بین یک مثلث و یک صفحه بی نهایت قرار دارد.

هر مجموعه ای از نقاط، به جز در برخی موارد پیش پا افتاده، اجازه می دهد تا بیش از یک راه برای مثلث. اما در عین حال، یک ویژگی قابل توجه وجود دارد: هر روش مثلث بندی برای یک مجموعه معین، همان تعداد مثلث را تعیین می کند که از قضیه به دست می آید:

قضیه مثلث بندی مجموعه ای از نقاط.فرض کنید مجموعه نقاط S شامل n>3 نقطه است و همه آنها خطی نیستند. علاوه بر این، نقاط i از آنها داخلی هستند (یعنی در داخل بدنه محدب CH(S) قرار دارند. سپس با هر روش مثلث بندی مجموعه S، دقیقاً n + i - 2 مثلث به دست می آید.

برای اثبات قضیه ابتدا مثلث بندی نقاط مرزی n-i را در نظر می گیریم. از آنجایی که همه آنها رئوس یک چند ضلعی محدب هستند، چنین مثلثی به 2 - n (n - i) منجر می شود. (تأیید این امر دشوار نیست و علاوه بر این، می توان نشان داد که هر مثلثی دلخواهچند ضلعی ضلع m - محدب یا غیر محدب - حاوی m - 2 مثلث است). حالا بیایید بررسی کنیم که با اضافه کردن نقاط داخلی i باقی مانده، هر بار یکی، چه اتفاقی برای مثلث می افتد. ما ادعا می کنیم که جمع هر یک از چنین نقطه ای منجر به افزایش دو مثلث در تعداد مثلث ها می شود. همانطور که در شکل نشان داده شده است، هنگام اضافه کردن یک نقطه داخلی، دو موقعیت ممکن است ایجاد شود. 2. ابتدا ممکن است نقطه در داخل یک مثلث باشد و سپس سه مثلث جدید جایگزین چنین مثلثی شود. ثانیاً، اگر نقطه با یکی از یال های مثلث منطبق باشد، هر یک از دو مثلث مجاور این یال با دو مثلث جدید جایگزین می شود. نتیجه این است که پس از جمع کردن تمام نقاط r، تعداد کل مثلث ها (n - i - 2) + (2i) یا فقط n + i - 2 خواهد بود.

برنج. 2

در این بخش، الگوریتمی برای تولید نوع خاصی از مثلث‌سازی به نام مثلث‌سازی Delaunay ارائه می‌کنیم. این مثلث به خوبی متعادل است به این معنا که مثلث های تشکیل شده تمایل به متساوی الاضلاع دارند. به عنوان مثال، مثلث نشان داده شده در شکل. 1a را می توان به نوع مثلث سازی Delaunay نسبت داد و در شکل 1. مثلث شکل 1b شامل چندین مثلث بسیار کشیده است و نمی توان آن را به نوع Delaunay نسبت داد. روی انجیر شکل 3 نمونه ای از مثلث سازی دلونی را برای مجموعه ای از تعداد زیادی نقطه نشان می دهد.

برنج. 3

برای تشکیل مثلث دلونی، به چندین تعریف جدید نیاز داریم. اگر دایره ای وجود داشته باشد که تمام نقاط مجموعه روی آن قرار گیرند، مجموعه ای از نقاط دایره ای در نظر گرفته می شود. چنین دایره ای برای مجموعه ای از نقاط مشخص خواهد شد. دایره محدود شده برای یک مثلث از هر سه رأس (غیر خطی) آن می گذرد. در صورتی که هیچ نقطه ای از مجموعه S در داخل دایره وجود نداشته باشد، به یک دایره نسبت به مجموعه ای از نقاط S بدون نقطه گفته می شود، اما، با این حال، نقاط مجموعه S را می توان بر روی آزادترین دایره از نقاط قرار داد.

اگر دایره محصور شده برای هر مثلث خالی از نقطه باشد، مثلث بندی مجموعه ای از نقاط S، مثلث دلونی خواهد بود. در نمودار مثلثی در شکل. 1a دو دایره را نشان می دهد که به وضوح حاوی نقاط دیگری در داخل نیستند (می توانید دایره هایی برای مثلث های دیگر بکشید تا مطمئن شوید که آنها نیز خالی از نقاط مجموعه هستند). این قانون در نمودار شکل 1 رعایت نشده است. 16 - یک نقطه از مثلث دیگر در داخل دایره ترسیم شده قرار گرفت، بنابراین، این رگه بندی متعلق به نوع Delaunay نیست.

دو فرض را می توان در مورد نقاط مجموعه S برای ساده سازی الگوریتم مثلث بندی در نظر گرفت. اولاً، برای اینکه مثلث‌سازی اصلاً وجود داشته باشد، باید فرض کنیم که مجموعه S حداقل شامل سه نقطه است و آنها هم خط نیستند. ثانیا، برای اینکه مثلث دلونی منحصر به فرد باشد، لازم است که هیچ چهار نقطه از مجموعه S روی یک دایره محدود قرار نگیرد. به راحتی می توان فهمید که بدون چنین فرضی، مثلث دلونی منحصر به فرد نخواهد بود، زیرا 4 نقطه در یک دایره به ما امکان می دهد دو مثلث دلونی متفاوت را درک کنیم.

الگوریتم ما با ایجاد مدام مثلث فعلی یک مثلث در یک زمان کار می کند. در ابتدا، مثلث فعلی از یک لبه پوسته تشکیل شده است، پس از تکمیل الگوریتم، مثلث فعلی به یک مثلث دلونی تبدیل می شود. در هر تکرار، الگوریتم به دنبال مثلث جدیدی می گردد که به آن متصل می شود مرزمثلث بندی فعلی

تعریف مرز بستگی به طرح طبقه‌بندی لبه مثلث‌سازی Delaunay زیر نسبت به مثلث‌بندی فعلی دارد. هر لبه می تواند باشد خوابیدن, زندهیا مرده:

  • دنده های خفته: یک یال مثلث سازی دلونه در صورتی که هنوز توسط الگوریتم کشف نشده باشد، غیر فعال است.
  • دنده های زنده: لبه در صورت یافتن زنده است، اما فقط یک ناحیه مجاور آن شناخته شده است.
  • دنده های مرده: یک یال در صورتی مرده محسوب می شود که پیدا شود و هر دو ناحیه مجاور آن مشخص باشد.

در ابتدا، تنها لبه‌ای که به نقطه i محدب تعلق دارد زنده است - یک صفحه نامحدود به آن می‌پیوندد و تمام لبه‌های دیگر خاموش هستند. همانطور که الگوریتم کار می کند، لبه های خفته زنده و سپس مرده می شوند. مرز در هر مرحله از مجموعه ای از لبه های زنده تشکیل شده است.

در هر تکرار، هر یک از یال های مرز انتخاب می شود و تحت پردازش قرار می گیرد، که شامل یافتن ناحیه ناشناخته ای است که یال e به آن تعلق دارد. لبه e و راس سوم v، سپس لبه e مرده می شود، زیرا هر دو ناحیه مجاور اکنون شناخته شده اند. هر یک از دو یال دیگر مثلث t به حالت زیر منتقل می شود: از خواب به زنده یا از زنده به مرده. در اینجا راس v فراخوانی می شود مزدوجبا یال e. در غیر این صورت، اگر ناحیه مجهول یک صفحه بی نهایت باشد، یال e به سادگی می میرد. در این حالت، لبه e هیچ راس مزدوج ندارد.

روی انجیر 4 عملکرد الگوریتم را نشان می دهد که در آن عمل از بالا به پایین و از بالا به راست انجام می شود. مرز در هر مرحله با یک خط ضخیم مشخص شده است.

این الگوریتم در برنامه delaunayTriangulate پیاده سازی شده است. به برنامه آرایه‌ای از n نقطه داده می‌شود و فهرستی از مثلث‌هایی را که نشان‌دهنده مثلث دلونی هستند، برمی‌گرداند. پیاده سازی از کلاس و کلاس های لیست حلقه از بخش ساختارهای داده های هندسی استفاده می کند. هر دیکشنری که از عملیات مورد نیاز پشتیبانی می کند می تواند به عنوان کلاس Dictionary استفاده شود. برای مثال، می‌توانید #define Dictionary RandomizedSearchTree را لغو کنید.

فهرست کنید * (نقطه s، int n) (نقطه p؛ فهرست *مثلث = لیست جدید ; فرهنگ لغت مرز (edgeCmp)؛ لبه *e = hullEdge(s, n); درج مرزی (e); while (!frontier.isEmpty()) (e = frontier.removeMin(); if (mate(*e, s, n, p)) ( updateFrontier(frontier, p, e->org); updateFrontier(frontier, e ->dest، p)؛ مثلث-> insert(triangle(e->org, e->dest, p))؛ ) delete e; ) مثلث ها را برگرداند. )

برنج. چهار

مثلث هایی که مثلث را تشکیل می دهند در لیست مثلث ها نوشته می شوند. مرز با فرهنگ لغت لبه های زنده مرزی نشان داده می شود. هر یال طوری هدایت می شود که ناحیه ناشناخته آن (که باید مشخص شود) در سمت راست لبه قرار می گیرد. تابع مقایسه edgeCmp برای جستجوی فرهنگ لغت استفاده می شود. نقاط شروع دو یال را با هم مقایسه می کند، اگر مساوی باشند، نقاط پایانی آنها مقایسه می شود:

Int edgeCmp (Edge *a، Edge *b) (اگر (a->org< b->org) بازگشت 1; if (a->org > b->org) return 1; اگر (a->dest< b->dest) بازگشت -1; if (a->dest > b->dest) return 1; بازگشت 0; )

بنابراین چگونه مرز از یک مرحله به مرحله دیگر تغییر می کند، و چگونه تابع updateFrontier فرهنگ لغت لبه حاشیه را تغییر می دهد تا این تغییرات را منعکس کند؟ هنگامی که یک مثلث جدید t به مرز متصل می شود، حالات سه یال مثلث تغییر می کند. لبه مثلث t مجاور مرز از زنده بودن مرده می شود. تابع updateFrontier می تواند این لبه را نادیده بگیرد، زیرا با فراخوانی تابع removeMin باید قبلاً از فرهنگ لغت حذف شده باشد. هر یک از دو یال باقیمانده مثلث t اگر قبلاً در فرهنگ لغت نوشته نشده بودند، حالت خود را از حالت خواب به زنده تغییر می دهند، یا اگر لبه قبلاً در فرهنگ لغت وجود دارد، از زنده به مرده تغییر می کند. روی انجیر 5 هر دو مورد را نشان می دهد. مطابق شکل، لبه زنده af را پردازش می کنیم و پس از اینکه متوجه شدیم نقطه b مزدوج با آن است، مثلث afb را به مثلث فعلی اضافه می کنیم. سپس در دیکشنری به دنبال edge fb می گردیم و چون هنوز وجود ندارد و برای اولین بار کشف می شود، حالت آن از حالت Sleep به زنده تغییر می کند. برای ویرایش دیکشنری، لبه fb را می چرخانیم تا ناحیه مجاور آن ناشناخته در سمت راست آن قرار گیرد و این لبه را در فرهنگ لغت بنویسیم. سپس لبه ba را در فرهنگ لغت پیدا خواهیم کرد - از آنجایی که در آن است، از قبل زنده است (منطقه شناخته شده مجاور آن مثلث abc است). از آنجایی که ناحیه ناشناخته برای آن، مثلث afb، به تازگی کشف شده است، این لبه از فرهنگ لغت حذف شده است.

تابع updateFrontier دیکشنری frontier را ویرایش می کند که در آن وضعیت لبه از نقطه a به نقطه b تغییر می کند:

برنج. 5

Void updateFrontier(Dictionary &frontier، Point &a، Point &b) (Edge *e = New Edge (a, b)؛ if (frontier.find (e)) frontier.remove(e); else (e->flip(); frontier.insert( ه)))

تابع hullEdge یک لبه بدنه در میان n نقطه آرایه s پیدا می کند. این تابع در واقع از مرحله اولیه سازی و اولین تکرار روش بسته بندی هدیه استفاده می کند:

لبه *hullEdge (نقطه s، int n) (int m = 0; برای (int i = 1; i< n; i++) if (s[i] < s[m]) m = i; swap(s, s[m]); for (m = 1, i = 2; i < n; i++) { int с = s[i].classify (s, s[m]); if ((c == LEFT) || (C == BETWEEN)) m = i; } return new Edge(s, s[m]); }

تابع مثلث به سادگی یک چند ضلعی برای سه نقطه ارسال شده به عنوان پارامتر به آن تشکیل می دهد و برمی گرداند:

چند ضلعی *مثلث (نقطه &a، نقطه &b، نقطه و ج) (چند ضلعی *t = چند ضلعی جدید؛ t->درج (a)؛ t->درج (b)؛ t->درج (c؛ بازگشت t؛)

تعاریف و ویژگی های اساسی

مثلث یک نمودار مسطح است که تمام نواحی داخلی آن مثلث هستند.

خواص:

· مثلث Delaunay یک به یک با نمودار Voronoi برای همان مجموعه نقاط مطابقت دارد.

در نتیجه: اگر هیچ چهار نقطه روی یک دایره قرار نگیرد، مثلث دلونی منحصر به فرد است.

· مثلث سازی Delaunay حداقل زاویه را در بین تمام زوایای تمام مثلث های ساخته شده به حداکثر می رساند، در نتیجه از مثلث های "نازک" اجتناب می شود.

· مثلث سازی Delaunay مجموع شعاع های توپ های محاطی را به حداکثر می رساند.

· مثلث سازی Delaunay عملکرد گسسته دیریکله را به حداقل می رساند.

· مثلث سازی Delaunay حداکثر شعاع حداقل کره محصور را به حداقل می رساند.

· مثلث سازی دلونی در یک صفحه دارای حداقل مجموع شعاع دایره های محصور در اطراف مثلث ها در بین تمام مثلث های ممکن است.

شکل 1. مثلث بندی.

مثلث محدب، مثلثی است که حداقل چندضلعی که همه مثلث ها را در بر می گیرد، محدب است. مثلثی که محدب نباشد غیر محدب نامیده می شود.

وظیفه ساخت مثلث از مجموعه معینی از نقاط دو بعدی، مسئله اتصال نقاط داده شده با قطعات غیر متقاطع است تا یک مثلث تشکیل شود.

اگر هیچ یک از نقاط مثلث داده شده در داخل دایره محصور شده در اطراف هر مثلث ساخته شده قرار نگیرد، مثلث بندی شرط دلونی را برآورده می کند.

یک مثلث اگر محدب باشد و شرط دلونی را برآورده کند، مثلث دلونی نامیده می شود.


شکل 2. مثلث سازی دلونی.

روش توپ خالی دلون. ساخت و ساز در حالت کلی

بیایید از یک توپ خالی استفاده کنیم که آن را حرکت می دهیم و اندازه آن را تغییر می دهیم تا بتواند نقاط سیستم (A) را لمس کند، اما همیشه خالی می ماند.

بنابراین، اجازه دهید یک توپ خالی دلونی را در سیستم نقاط (A) قرار دهیم. اگر توپ به اندازه کافی کوچک انتخاب شود، همیشه این امکان وجود دارد. بیایید شروع به افزایش شعاع آن کنیم و مرکز توپ را در جای خود بگذاریم. در نقطه ای، سطح توپ با نقطه ای از سیستم (A) برخورد می کند. این قطعا اتفاق خواهد افتاد، زیرا هیچ فضای خالی بی نهایت بزرگی در سیستم ما وجود ندارد. به شعاع توپ خالی ادامه می دهیم تا نقطه i روی سطح آن باقی بماند. برای این کار باید مرکز توپ را از نقطه i حرکت دهید. دیر یا زود توپ با سطح خود به نقطه دیگری از سیستم (A) خواهد رسید.

شکل 3

ساده‌سازی‌های Delaunay فضا را بدون شکاف و همپوشانی پر می‌کنند.

کره توصیف شده از هر سیمپلکس شامل سایر نقاط سیستم در داخل نیست.

بگذارید این نقطه j باشد. بیایید به افزایش شعاع توپ خود ادامه دهیم و هر دو نقطه را روی سطح آن نگه داریم. با افزایش، توپ به نقطه سوم سیستم یعنی نقطه k می رسد. در حالت دو بعدی، "دایره خالی" ما در این لحظه ثابت می شود، یعنی. افزایش بیشتر شعاع آن با خالی نگه داشتن دایره غیرممکن می شود. در همان زمان، ما یک پیکربندی دو بعدی ابتدایی از سه نقطه (i، j، k) را نشان می‌دهیم که یک مثلث خاص را تعریف می‌کند، ویژگی آن این است که هیچ نقطه دیگری از سیستم (A) در محدوده آن وجود ندارد. دایره. در سه بعد، یک توپ با سه نقطه تعریف نمی شود. بیایید به افزایش شعاع آن ادامه دهیم و هر سه نقطه پیدا شده را روی سطح آن حفظ کنیم. این کار تا زمانی امکان پذیر خواهد بود که سطح توپ به نقطه چهارم l سیستم برسد. پس از آن حرکت و رشد یک توپ خالی غیرممکن خواهد شد. چهار نقطه یافت شده (i، j، k، l) رئوس چهار وجهی را تعیین می کند، که با این واقعیت مشخص می شود که هیچ نقطه دیگری از سیستم (A) در داخل کره محصور آن وجود ندارد. به چنین چهار وجهی، دلاوی سیمپلکس می گویند.

یک سیمپلکس در ریاضیات به ساده ترین شکل در فضای یک بعد معین گفته می شود: چهار وجهی - در فضای سه بعدی. مثلث - در دو بعد. یک سه گانه (چهارگانه) دلخواه از نقاط سیستم که در یک صفحه قرار ندارند همیشه یک سیمپلکس مشخص را تعریف می کند. با این حال، تنها زمانی یک سیمپلکس دلونی است که کره محدود شده آن خالی باشد. به عبارت دیگر، ساده سازی های دلونی با انتخاب خاصی از سه (چهار برابر) نقاط در سیستم (A) تعیین می شوند.

ما یک Delaunay simplex ساخته‌ایم، اما با قرار دادن توپ خالی در مکان‌های مختلف و تکرار همان روش، می‌توان موارد دیگری را تعریف کرد. بیان شده است که مجموعه تمام ساده سازی های دلونی سیستم (A) فضا را بدون همپوشانی و شکاف پر می کند، یعنی. پارتیشن بندی فضا را اجرا می کند، اما این بار به چهار وجهی. این تقسیم نامیده می شود پارتیشن Delaunay(شکل 3).

کاربرد مثلث بندی دلونی

غالباً مثلث‌سازی‌های دلونی در فضای اقلیدسی اعمال می‌شوند. حداقل درخت پوشا اقلیدسی تضمین شده است که بر روی مثلث سازی دلونی قرار دارد، بنابراین برخی از الگوریتم ها از مثلث بندی استفاده می کنند. همچنین، از طریق مثلث دلونی، مسئله فروشنده دوره گرد اقلیدسی تقریباً حل می شود.

در درون یابی دوبعدی، مثلث سازی دلونه، صفحه را به ضخیم ترین مثلث های ممکن تقسیم می کند، و از زوایای خیلی تیز یا خیلی مبهم جلوگیری می کند. از این مثلث ها می توان برای ساخت، به عنوان مثال، درون یابی دو خطی استفاده کرد.

مشکل دیگری که اغلب در ژئوانفورماتیک ایجاد می شود، ساخت نوردهی شیب ها است. در اینجا لازم است جهت های غالب شیب ها توسط نقاط اصلی تعیین شود و سطح به مناطقی که در آن جهت خاصی غالب است شکسته شود. از آنجایی که تعریف نوردهی برای مقاطع افقی سطح معنی ندارد، به عنوان مثال، مناطقی که افقی هستند یا دارای شیب کمی هستند، به یک منطقه جداگانه اختصاص داده می شوند.<5 о. По странам света деление обычно выполняется на 4, 8 или 16 частей.


شکل 4.

وظیفه محاسبه نوردهی شیب معمولاً برای تجزیه و تحلیل روشنایی زمین استفاده می شود. در این رابطه، اغلب نیاز به در نظر گرفتن موقعیت فعلی خورشید وجود دارد، یعنی. نوردهی به عنوان جهت بین حالت عادی به مثلث و جهت خورشید محاسبه می شود.

بنابراین، هر مثلث مثلث را می توان بر اساس اصل تعلق به یک منطقه خاص طبقه بندی کرد. پس از آن، فقط باید الگوریتم انتخاب منطقه را فراخوانی کنید.