1 / 8

الگوریتم های ترسیم خط

گرافیک رایانه ای. الگوریتم های ترسیم خط. گردآوری: مهندس رضا فهیمی. به راستی خطوط چگونه در کامپیوتر ترسیم می شوند؟.

alanna
Download Presentation

الگوریتم های ترسیم خط

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. گرافیک رایانه ای الگوریتم های ترسیم خط گردآوری: مهندس رضا فهیمی

  2. به راستی خطوط چگونه در کامپیوتر ترسیم می شوند؟ • همانطور که در تصویر مشاهده می شود برای ترسیم یک خط بایستی پیکسل های مرتبط در صفحه نمایش رنگ شوند حال برای انتخاب پیکسل های مناسب الگوریتم های متعددی در دنیای کامپیوتر وجود دارد که به 2 الگوریتم DDA و برسنهایم اشاره می شود:

  3. (Digital Differential Analyzer) DDA الگوریتم • برای ترسیم یک خط نقطه ابتدایی و انتهایی خط را در نظر می گیریم: (x0, y0) , (x1, y1) • نقطه ابتدایی را رنگ می کنیم (محاسبات براساس نزدیک ترین نقطه با عدد صحیح می باشد و در صورت لزوم عدد را گرد می کنیم) • فرض کنید x1-x0 > y1-y0 (یعنی شیب خط کوچکتر از 1 است) در صورت وجود فرض بالا برای محاسبه و ترسیم خط بایستی x1-x0 گام را طی کنیم (گام خط) • در این مرحله x=x0, y=y0 را قرار می دهیم. • در هر مرحله x را به اندازه یک واحد افزایش می دهیم ((x1-x0)/numsteps ) y را به اندازه شیب خط افزایش می دهیم ((y1-y0)/numsteps ) • در پایان اعداد هر مرحله را به نزدیکترین عدد صحیح x و y گرد کرده و رنگ می کنیم.

  4. تابع نمونه برای الگوریتم DDA // با فرض ملایم بودن شیب خط DDA(float x0, float x1, float y0, float y1) { float x, y; float xinc, yinc; int numsteps; numsteps = Round(x1) – Round(x0); xinc = (x1 – x0) / numsteps; yinc = (y1 – y0) / numsteps; x = x0; y = y0; ColorPixel(Round(x),Round(y)); for (int i=0; i<numsteps; i++) { x += xinc; y += yinc; ColorPixel(Round(x),Round(y)); } }

  5. DDA مثال برای الگوریتم • مطلوب است ترسیم خطی با نقاط ابتدائی و انتهائی (2,3) و (12,8)از طریق الگوریتم DDA. • حل: برای این منظور بایستی ابتدا گام حل مسئله محاسبه شود با توجه به اینکه x2-x1>y2-1 می باشد داریم: • گام مسئله = x2-x1=12 – 2 = 10 • xinc = 10/10 = 1.0 • yinc = 5/10 = 0.5 کلیه محاسبات در جدول مقابل دیده می شود yافزایش xافزایش همانطوری که مشاهده شد عملیات ترسیم خط به روش DDAصورت گرفت ولی محاسبات اعشاری و گرد کردن اعداد به نزدیکترین نقطه برای سیستم محاسباتی وقت گیر است.

  6. Bresenham’s الگوریتم اساس کار این الگوریتم محاسبه فاصله بین مختصات y واقعی و نقاط y بالائی و پائینی می باشد (در این روش محاسبات براساس اعداد صحیح و شیب خط نیز ملایم فرض می شود. dupper dlower

  7. فرض کنید که شیب خط با ملایمت از سمت چپ آغاز می شود. (یعنی نقطه ابتدائی سمت چپ قراردارد) نقطه ابتدائی را رنگ می کنیم و در مرحله بعد برای هر مقدار x بایستی مقدار y یا y+1 را محاسبه کنیم. • نقطه ابتدائی (x0,y0) را رنگ می کنیم. • مقادیر dx و dy و 2dy و 2dy - 2dxرا محاسبه می کنیم. • برای محاسبه نقطه بعدی فرمول زیر را به عنوان فرمول تصمیم p0 در نظر می گیریم: p0 = 2dy – dx اگر pk<0 نقطه بعدی (xk + 1,yk)خواهد بود و فرمول نقطه تصمیم pk+1 = pk + 2dyمی باشد. در غیر این صورت نقطه بعدی (xk + 1, yk + 1) و نقطه تصمیم pk+1 = pk + 2dy – 2dxخواهد بود. لازم به ذکر است که K در هر مرحله از صفر شروع خواهد شد. 4. مراحل فوق را dx بار تکرار می کنیم. توجه : در صورتی که شیب خط منفی باشد نقش x و yتغییر خواهد کرد.

  8. مثال برای الگوریتم Bresenham’s مطلوب است ترسیم خطی با نقاط ابتدایی و انتهایی (2,3) و (12,8) از طریق الگوریتم برسنهام. حل : ابتدا مقادیر زیر را آماده و تابع تصمیم را نیز برای هر مرحله محاسبه می کنیم اعداد و ارقام در جدول مقابل مشاهده می شود. dx = 12 – 2 = 10 dy = 8 – 3 = 5 p0 = 2dy – dx = 15 2dy = 10 2dy – 2dx = -10 پایان rezafahimi@yahoo.com

More Related