برنامه نویسی

به سادگی منحنی های بزیه را درک کنید. – انجمن DEV

تصور کنید اگر فقط می توانستید از خطوط مستقیم، بیضی و دایره استفاده کنید، آیا طراحی خودرویی با خطوط صاف و ظاهری پیچیده دشوار نخواهد بود؟

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

پیش نمایش bezier

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

منحنی های Bézier به طور گسترده در گرافیک کامپیوتری و مدل سازی تصویر، مانند انیمیشن، طراحی فونت و طراحی صنعتی استفاده می شود.

فرمول

فرمول

این را بفهمیم.

P

بعد، Pi نشان دهنده نقطه کنترل i-ام است (i از 0 شروع می شود). با در نظر گرفتن شکل بالا به عنوان مثال، 4 نقطه کنترل وجود دارد که عبارتند از P0، P1، P2، P3. n در فرمول آخرین شاخص نقاط کنترل است، یعنی n = 3 (توجه داشته باشید که تعداد نقاط کنترل نیست، بلکه تعداد منهای 1 است).

Bi,n

فرمول تابع پایه به شرح زیر است:

تابع پایه


(nمن)\binom{n}{i}

آیا عدد ترکیبی است (چند راه برای انتخاب i از n؟). در مورد اینکه چرا تابع پایه به این شکل است، می توان آن را در ارتباط با الگوریتم De Casteljau درک کرد (به ادامه متن مراجعه کنید)

بازگشت به فرمول P

من=0n\sum_{i=0}^{n}

نماد جمع است که نشان می دهد قسمت بعدی (

بمن،n(تی)پمنB_{i,n}

) باید از i=0 تا i=n جمع شود.

با در نظر گرفتن شکل بالا به عنوان مثال، با فرض اینکه بخواهیم P(0.1) را محاسبه کنیم، چگونه این کار را انجام دهیم؟ به شرح زیر گسترش می یابد:

کالری P (0.1)

کالری P (0.1)

t=0.1 را جایگزین کنید تا به دست آورید:

کالری P (0.1)

نمایش پارامتریک منحنی

در اینجا مستقیماً به مقاله ای از یک کاربر اینترنتی استناد می شود (لینک)

خط

بیایید روی فرمول بالا تمرکز کنیم.

همانطور که در شکل بالا نشان داده شده است، خط مستقیمی که با آن آشنا هستیم را می توان از منظر دیگری درک کرد: با استفاده از t (یعنی طول |AP| از نقطه P تا نقطه شناخته شده (x0,y0))، سپس نقطه P. را می توان از طریق توابع مثلثاتی فوق تعیین کرد.

به طور کلی می توان آن را به صورت زیر نوشت:

خط پارامتریک

در اینجا P0 بردار است [x0,y0]و v نیز بردار است. وقتی با هم جمع شوند، P

دوباره به دایره نگاه می کنیم:

دایره

همانطور که در نمودار نشان داده شده است، دایره را می توان به عنوان دارای یک مرکز شناخته شده، با هر نقطه از دایره با زاویه چرخش و شعاع تعیین می شود. همچنین می توان آن را به صورت زیر نوشت:

پارامتر دایره

معادلات پارامتری تغییر ناپذیری هندسی را حفظ می کنند و می توانند اشکالی مانند دایره ها را نشان دهند (که در آن یک x با چندین مقدار y مطابقت دارد).

از Casteljau

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

در اینجا به دو مقاله لینک1 و لینک2 اشاره می کنیم

ابتدا موارد زیر تعریف شده است:

از Casteljau

به β بالا نگاه کنید. این کمی گیج کننده با بالانویس ها و زیرنویس ها است. می توانید از بازگشت مثلثی زیر برای درک استفاده کنید:

تکرار

لبه های قرمز مثلث در شکل بالا نقاط کنترل دو بخش تقسیم بر t0 هستند. برای درک واضح تر t0، P(t0) (یعنی، ب0(n)\beta_0^{(n)}

)، نقاط کنترل دو منحنی، می توانید به شکل زیر مراجعه کنید:

تکرار جزئیات

شکل بالا روابط بین نقاط مختلف را در زمانی که t=0.5 نشان می دهد.

از منظر “درون یابی”، فرآیند محاسبه را می توان به صورت زیر درک کرد:

  1. یافتن نقاط میانی هر جفت از نقاط کنترل مجاور (زیرا t=0.5)، یعنی b01، b11، b21 (لطفاً نماد من را ببخشید؛ نوشتن در LaTeX خیلی دردسرساز است)
  2. نقطه میانی b02 را در b01−b11، و نقطه میانی b12 را در b11-b21 پیدا کنید.
  3. نقطه میانی b03 را در b02-b12 پیدا کنید در واقع، ماهیت الگوریتم De Casteljau درون یابی و تکرار است.

طراحی منحنی بر اساس De Casteljau

در حال حاضر دو روش مشاهده می شود.

یک روش شامل پیمایش t از 0 تا 1 با افزایش گام های کوچک (یعنی 0.01) است. هر بار که P

ب0(n)\beta_0^{(n)}

.

روش دیگر شامل جستجوی P(t=0.5) است و سپس برای دو منحنی تقسیم شده به ترتیب P(t=0.5) جستجو می شود… این تقسیم بندی تا زمانی که منحنی تقریبی شود ادامه می یابد.

پیاده سازی

تماشا کردن بدون تمرین همیشه غیرواقعی است.

بنابراین من کد پیاده سازی خودم را برای ترسیم منحنی نوشتم و آن را در یک جعبه ابزار سازماندهی کردم: مجموعه ابزار کامپایلایف

کد اصلی مربوطه اینجاست

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا