240 likes | 768 Views
گرافیک رایانه ای. الگوریتم های ترسیم خط. گردآوری: مهندس رضا فهیمی. به راستی خطوط چگونه در کامپیوتر ترسیم می شوند؟.
E N D
گرافیک رایانه ای الگوریتم های ترسیم خط گردآوری: مهندس رضا فهیمی
به راستی خطوط چگونه در کامپیوتر ترسیم می شوند؟ • همانطور که در تصویر مشاهده می شود برای ترسیم یک خط بایستی پیکسل های مرتبط در صفحه نمایش رنگ شوند حال برای انتخاب پیکسل های مناسب الگوریتم های متعددی در دنیای کامپیوتر وجود دارد که به 2 الگوریتم DDA و برسنهایم اشاره می شود:
(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 گرد کرده و رنگ می کنیم.
تابع نمونه برای الگوریتم 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)); } }
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صورت گرفت ولی محاسبات اعشاری و گرد کردن اعداد به نزدیکترین نقطه برای سیستم محاسباتی وقت گیر است.
Bresenham’s الگوریتم اساس کار این الگوریتم محاسبه فاصله بین مختصات y واقعی و نقاط y بالائی و پائینی می باشد (در این روش محاسبات براساس اعداد صحیح و شیب خط نیز ملایم فرض می شود. dupper dlower
فرض کنید که شیب خط با ملایمت از سمت چپ آغاز می شود. (یعنی نقطه ابتدائی سمت چپ قراردارد) نقطه ابتدائی را رنگ می کنیم و در مرحله بعد برای هر مقدار 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تغییر خواهد کرد.
مثال برای الگوریتم 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