Transcript ****** 1
فصل سوم الگوریتم های ترسیم 1 S. POORKIANI ترسیم خط :مقدمه در این مبحث ابتدا در باره اصول ومبانی خط بحث می شود سپس دو الگوریتم DDAو Bresenhamمورد بررس ی قرار می گیرند. y y mxb yend where: y end y 0 x end x 0 m b y 0 m x0 2 y0 x xend S. POORKIANI x0 مقدمه:ترسیم خط : شیب ها m=∞ m=4 m=2 m = -4 m = -2 m=1 m = -1 m = 1/2 m = -1/2 m = -1/3 m = 1/3 m=0 m=0 S. POORKIANI 3 مقدمه:ترسیم خط y m (7, 5) 5 y end y 0 x end x 0 y = mx + b 2 x (2, 2) 2 7 x S. POORKIANI yb m b y 0 m x0 4 ترسیم خط :مقدمه ابتدا پیدا کردن mو : b 3 5 4 52 72 2 5 3 )(7, 5 )(2, 2 1 5 2 55 3 4 5 4 5 4 6 5 3 5 2 b 2 برای هر مقدار xپیدا کردن مقدار yمتناظر: 4 5 m 5 3 y x 3 y (4) y (6) S. POORKIANI 7 2 5 6 4 4 3 3 3 5 5 5 4 4 3 5 3 5 5 5 2 y (3) y (5) 5 مقدمه:ترسیم خط y (3) 2 7 6 5 y (4) 3 4 3 y (5) 3 2 1 0 0 1 2 3 4 5 6 7 8 S. POORKIANI y (6) 4 3 5 1 5 4 5 2 2 .6 3 3 .2 3 3 .8 4 4 .4 4 5 6 ترسیم خط: در این مبحث دو الگوریتم رسم معرفی وبررس ی می شوند: .i .ii 7 DDA Bersenham S. POORKIANI ترسیم خط :الگوریتم DDA منظور از گام افزایش: یعنی بین دو pixelدر مرحله بعدی که باید یک pixelرا انتخاب کنیم ،کدام یک شانس انتخاب دارد ؟ 8 S. POORKIANI ترسیم خط :الگوریتم DDA -1هنگامی که شیب بین 1و -1است به مختصات ، xیک واحد یک واحد و مختصات yبراساس فرمول زیر افزایش می یابد: y k 1 y k m ))(xk+1, round(yk+m )(xk+1, yk+m ))(xk, round(yk 9 S. POORKIANI )(xk, yk ترسیم خط :الگوریتم DDA -2هنگامی که شیب بین 1و -1نیست( ،شیب تند) .به مختصات ، yیک واحد یک واحد و مختصات xبراساس فرمول زیر افزایش می یابد: 1 m x k 1 x k )(round(xk+ 1/m), yk+1 )(xk+ 1/m, yk+1 10 )(round(xk), yk S. POORKIANI )(xk, yk m=(2-1)/(8-1) = (1/7) (8,2) : مثال (1,1) X y Round(y) 1 1 1 2 1+(1/7)=1.14 1 3 1.14+(1/7)=1.28 1 4 1.28+(1/7)=1.42 1 5 1.42+(1/7)=1.57 2 6 1.57+(1/7)=1.71 2 7 1.71+(1/7)=1.85 2 8 S. POORKIANI 1.85+(1/7)=1.99 2 11 ترسیم خط :الگوریتم برزنهام Jack Bresenhamایده ترسیم خط و دایره را با محاسبه ضربها و توانهای کمتر در اوایل دهه 1950 ارائه کرد و با استقبال زیادی روبرو شد. برزنهام در اين الگوريتم فقط از افزايش ها و کاهش هاي مقاديرصحيح استفاده ميکند و درگیر محاسبات اعشاری نمیشود. 12 S. POORKIANI الگوریتم برزنهام:ترسیم خط y – y0 = m (x - x0 ) ax + by +c =0 Midpoint Line Algorithm NE Decision variable d F M 1 F x p 1, y p 2 Q M P(xp, yp) E 1 a x p 1 b y p c 2 d > 0 : choose NE d <= 0 : choose E S. POORKIANI 13 الگوریتم برزنهام:ترسیم خط Initial Value of d 1 1 F x0 1, y0 a x0 1 b y0 c 2 2 Update d x , if d 0, then y , d 2a b S. POORKIANI x , if d 0, then d 2 a 14 ترسیم خط :الگوریتم برزنهام m=(3-0)/(6-1) = 0.6 )(6,3 )(1,0 15 S. POORKIANI ترسیم خط------------: براي رسم خط چين ها: روش اول :خط از ابتدا تا انتها رسم مي شود در ترسيم دوباره خط چین ها به رنگ پس زمينه مي شود (روش نا کارامد ). روش دوم :ابتدا و انتهاي خط را محاسبه و به چندين خط تقسيم و خطوط کوچکتر ترسيم مي گردند .در اين روش بخاطر عدم ترسيم مناطق خالي زمان ذخیره مي شود). 16 S. POORKIANI ترسیم دایره :خواص دایره دایره به صورت مجموعه نقاطی که همگی در فاصله داده شده rاز نقطه مرکز ) (xc,ycقرار دارند تعریف می شود. برای هر نقطه (X,Y) ،روی دایره با رابطه فیثاغورث به صورت رابطه زیر تعریف می شود: )(x,y 2 y yc r 2 2 x xc ө r y c xc 17 S. POORKIANI ترسیم دایره :خواص دایره از معادله فیثاغورث می توان برای محاسبه نقاط روی محیط دایره با برداشن گامهایی به طول واحد در روی محور xها از r-xcتا r+xcو محاسبه مقادیر y استفاده کرد : 2 r x xc 2 y yc ایرادات این روش : -1نیازمند محاسبات زیاد -2شکل دایره دارای عدم تقارن می باشد . 18 S. POORKIANI ترسیم دایره :خواص دایره راه دیگر برای رسم دایره می توان از معادله دایره به صورت قطبی استفاده کرد که به صورت زیر می باشد : x x c r cos y y c r sin از این معادالت برای تولید دایره می توان با اندازه گام زاویه ای ثابت استفاده کرد. اما استفاده از این معادالت جهت ایجاد دایره به خاطر معادالت مثلثاتی زمان گير می باشد. 19 S. POORKIANI ترسیم دایره برای هر کدام از روشهای گفته شده می توان با در نظر گرفتن خاصیت تقارنی دایره محاسبات را کاهش داد. 20 S. POORKIANI ترسیم دایره 21 با این حال باز هم محاسبات برای رسم دایره زمان زیادی را می گیرد ! در معادله اول محاسبات ضرب و جذر و در معادله دوم ضرب و محاسبات مثلثاتی زمان گیر است. با این حال الگوریتم کارآمدتری برای دایره با محاسبات افزاینده پارامترهای تصمیم مانند الگوریتم خط برزنهام ارائه شده اند. الگوریتم دایره برزنهام با مقایسه مربعات فواصل پیکسلها از این محاسبات پیچیده اجتناب می کند . S. POORKIANI ترسیم دایره :برزنهام براي دايره با معادله fcircle(x,y)= y2+x2-r2 ، y2+x2=r2را در نظر بگیريد، 22 S. POORKIANI ترسیم دایره :برزنهام براي انتخاب يکي از دو نقطه : اگر Pk<0باشد آنگاه نقطه داخل دايره است. اگر Pk>0باشد آنگاه نقطه خارج دايره است. 23 S. POORKIANI ترسیم دایره :برزنهام هدف اين است که همه محاسباتمان را افزايش ي انجام دهيم، در مورد نقطه Sو Tداریم: از آنجاييکه ) f(Sهمیشه مثبت و ) f(Tهمیشه منفی است ،متغیر dرا به صورت زیر تعریف می کنیم: 24 S. POORKIANI ترسیم دایره :برزنهام با توجه به مقدار dبدست آمده خواهيم داشت : 25 S. POORKIANI ترسیم دایره :برزنهام ترسیم دایره به روش نقطه میانی به شعاع r=10رسم کنید . شروع از X=0و y=10 26 S. POORKIANI S. POORKIANI 27 ترسیم بیض ی به کمک تعريف چند جمله اي بيض ي : در اين روش: 28 S. POORKIANI ترسیم بیض ی S. POORKIANI 29 ترسیم بیض ی = 1 (y-k)2 b2 + (x-h)2 a2 اگر مرکز ،مبدا مختصات باشد: h=0 , k=0 y2 = 1 2 b + x2 a2 b2 x2 + a2 y2= b2 a2 30 S. POORKIANI در هر مرحله به xها اضافه میشود و در صورت لزوم از yها کم می کنیم. ترسیم بیض ی y m > -1 m < -1 b x a در هر مرحله از yها کم میشود و در صورت لزوم به xها اضافه می کنیم. 31 S. POORKIANI ترسیم مستطیل 32 S. POORKIANI