650 likes | 1.17k Views
فصل سوم مبناهای خروجی گرافیک (Output Primitives). مبناهای خروجی گرافیکی یا مبناها توابعی که در بسته های گرافیکی برای توصیف مؤلفه های تصویری گوناگون بکار برده می شوند، . : رنگ قرار داده شده فعلی را در فریم بافر در مکان صحیح ( x,y ) ذخیره می کند.
E N D
فصل سوم • مبناهای خروجی گرافیک • (Output Primitives)
مبناهای خروجی گرافیکی یا مبناها توابعی که در بسته های گرافیکی برای توصیف مؤلفه های تصویری گوناگون بکار برده می شوند، : رنگ قرار داده شده فعلی را در فریم بافر در مکان صحیح (x,y) ذخیره می کند : پارامتر color مقدار صحیحی متناظر با کد بیتهای RGB مرکب ذخیره شده برای پیکسل واقع در مکان (x,y) دریافت می کند 5 4 3 2 1 0 0 1 2 3 4 - برای صحنه های سه بعدی، مختصات صفحه بصورت مقادیر سه بعدی که در آن بعد سوم معرف مکانهای جسم نسبت به یک موقعیت دید است، ذخیره می شوند. -برای صحنه ای دو بعدی، همه مقادیر عمق برابر صفر هستند
خط پاره خط در صحنه با مواضع مختصات دو رأس آن تعریف می شود و سپس سیستم گرافیکی نزدیکترین مواضع پیکسلی را در طول مسیر خطی بین دو رأس تعیین کند خط به مجموعه ای از نقاط صحیح گسسته که تقریبی برای مسیر خط فعلی اند رقمی میشود. عمل گرد کردن مختصات به اعداد صحیح باعث می شود شکل پله ای خطهای رستر بویژه در سیستمهای با تفکیک پذیری پایین محسوس شود معادله خط مواضع پیکسلی در طول مسیری خط، از روی معادله دکارتی خط قابل محاسبه است. نقطه شروع نقطه پايان و
در اين الگوريتم ساده براي حالتي که |m|>1 اگر نقش x و y را عوض کنيم خط با شکستگي کمتر و دقت بيشتر رسم خواهد شد. 6 5 5 4 4 3 3 2 2 1 1 0 0 0 1 2 3 4 0 1 2 3 4 y=(1/4)x y=4x |m|>1 |m|<1 <1 >1 تغييرات شديدتر است پس نمونه برداري در راستاي x انجام ميشود تغييرات شديدتر است پس نمونه برداري در راستاي yانجام ميشود
متناسب با یک ولتاژ منحرف کننده افقی کوچک قرار داد ميشود سپس ولتاژ منحرف کننده عمودی متناظر، با محاسبه ميشود |m|<1 : متناسب با یک ولتاژ منحرف کننده عمودی کوچک قرار داد ميشود سپس ولتاژ منحرف کننده افقی متناظر، با محاسبه ميشود |m|>1 : الگوریتم DDA • مشکلات روش معادله خط: • عمل ضرب • عمل ROUND کردن • محاسبات اعشاري براي از بين بردن عمل ضرب از معادلات نموي (Incremental Equation) استفاده ميشود x k+1= xk+ 1 yk+1- yk =m x k+1- xk
نقطه شروع سمت راست و |m|<1 نقطه شروع سمت چپ و |m|<1 x k+1= xk- 1 x k+1= xk+ 1 نقطه شروع سمت بالا و |m|>1 نقطه شروع سمت پايين و |m|>1 y k+1= yk+ 1 y k+1= yk- 1
مزايا و معايب الگوريتم DDA(Digital Differential Analyzer) -عمل ضرب بکار رفته در معادله خط حذف میشود -انباشته شدن خطاهای گرد کردن در جمعهای متوالی نموها در مد اعداد اعشاری که باعث دور شدن تدریجی مواضع پیکسلی از خط واقعی برای پاره خطهای بلند ميشود -عمل گرد کردن -حساب در مد اعشاري الگوریتم خط برزنهام (Bresenham`s Algorithm) • قابل کسترش برای نمایش دایره ها و دیگر منحنی ها • محاسبات صحیح نموی ؟ ؟ ؟ ؟
در مثال بحث شده روش برزنهام را براي خطهايی با ضریب زاویه مثبت و کوچکتر از یک (0<m<1)درنظر میگیریم -در مرحله k ام پيکسل انتخاب شده حال بايد تصميم بگيريم در مرحله K+1 ، پيکسل بعدي : يا ؟ y k+1 -اين انتخاب به کمک يک پارامتر تصميمگيري انجام ميشود ؟ yk xk x k+1
يافتن پارامتر تصميمگيري Pkبراي الگوريتم برزنهام y k+1 dupper y dlower y k+1 yk yk xk x k+1
If (dupper> dlower) else محاسبات اعشاري وجود دارد
و m= Pk=dk . فرض ميکنيم همواره >0 ميباشد و بر علامت dkاثر ندارد بنابراين علامت pk همان علامت dk است C ثابت و مقدار آن به xk و yk بستگي ندارد و برابر است با : c= Pk<0 dk<0 dupper>dlower (xk+1,yk) پيکسل منتخب بعدي Pk>0 dk>0 dupper<dlower (xk+1,yk+1) پيکسل منتخب بعدي
محاسبات صحیح و نموی Pk (1) از آنجايي که 0<m<1 مي باشد و Pk<0 yk+1 = yk Pk>0 yk+1= yk + 1 نخستین پارامتر با قرار دادن پیکسل شروع در معادله (1) و همچنين در معادله خطy=mx+b و ارزیابی m بصورت بدست ميآيد
مثال : خط با رئوس (20,10) و (30,18) به کمک الگوريتم برزنهام مرحله به مرحله توليد کنيد (20,10)= (30,18)= پارامتر تصمیم اولیه: نموها برای محاسبة پارامترهای تصمیم متوالی
برای خطی با ضریب زاویه مثبت و بزرگتر از یک، نقشهای جهتهای x و y را عوض می کنیم. y k+1= yk+ 1و تصميمگيري بينxk و xk+1ها (xk,yk+1) يا (xk+1,yk+1) y k+1= yk+ 1 dleft dright ؟ ؟ y k+1 yk x x k+1 xk
برای خطی با ضریب زاویه منفي يکي از جهتها افزايش و ديگري کاهش مييابد xk+1= xk+ 1و تصميمگيري بينyk و yk-1ها ؟ yk y k-1 ؟ xk x k+1
خطهاي و و مستقيما و بدون پردازش با الگوريتم برزنهام رسم ميشوند نمایش چند ضلعیها • پیاده سازی پردازه چند ضلعی با n-1 بار فراخوانی الگوریتم ترسیم خط برای نمایش خطهای متصل کننده n رأس انجام می شود الگوریتمهای موازی خط با کار گیری پردازش موازی، چندین موضع پیکسلی را در طول مسیر خط می توان بصورت همزمان با تقسيم محاسبات بین پردازنده های گوناگون محاسبه کرد روش اول : پردازنده تقسیم مسیر خط به افراز را در جهت مثبت محور x ها افراز می کنیم خطی با ضریب زاویه 0 < m < 1 و با رأس چپ فاصله بین x های شروع افرازهای مجاور (تقسيم صحيح)
x شروع برای افراز k ام 2,1,0 تا np-1 هر پردازنده مواضع پیکسلی زیر بازه منسوب به خود را با استفاده از مقدار پارامترتصمیم شروع مزبور و نقطه شروع محاسبه می کند
دایره مجموعه نقاطی که همگی در فاصله داده شده r از نقطه مرکز قرار دارند از این معادله می توان برای محاسبه نقاط روی محیط دایره با برداشتن گامهایی بطول و احد در روی محور xها از تا و محاسبه مقادیر y از : -محاسبات زیاد -فواصل بین مواضع پیکسلی رسم شده یکنواخت نخواهد بود. (این مسئله را می توان با تعویض نقشهای x و y (گام برداشتن در جهت yها و محاسبه مقادیر برای xها) زمانی که ضریب زاویه دایره بیشتر از یک است بر طرف کرد )
استفاده از معادلات قطبی پارامتری محاسبه نقاط روی مرز دایره با استفاده ز مختصات قطبی r و -با بکارگیری اندازه گام زاویه ای ثابت، دایره ای با نقاط متساوی الفاصله بر روی محیط آن رسم خواهد شد. -برای کاهش محاسبات می توان از فاصله زاویه ای بزرگتر بین نقاط روی محیط دایره استفاده کرد و آنها را بوسیله پاره خطهایی برای تقریب محیط دایره بهم وصل کرد(رسم چند ضلعيهاي منتظم) قرار داد -برای مرزی پیوسته تر در سیستم رستر، اندازه گام زاویه را می توان برابر طول کمان= r . -محاسبات مثلثاتی بکار رفته هنوز هم وقت گیر هستند
خاصیت تقارنی دایره محاسبات را می توان با در نظر گرفتن خاصیت تقارنی دایره ها کاهش داد تمامی مواضع پیکسلی بر روی محیط دایره را می توان فقط با محاسبه نقاط واقع در کمان از x = 0 تا x = y تولید کرد
الگوریتم نقطه میانی برای دایره (MidPoint Circle Algorithm) -نمونه گیری در بازه های واحد انجام می شود و در هر مرحله نزدیک ترین موضع پیکسلی به مسیر دایره تعیین می شود -الگوريتم را براي دايرهاي به مرکز (0,0) و به شعاع r بدست ميآوريم و به راحتي براي دايره به هر مرکز دلخواه قابل گسترش است -با توجه به تقارن در دايره کمان دایره از x = 0 تا x = yدر ربع اول توليد و سپس نقاط واقع در هفت اوکتانت دیگر را با استفاده از خاصیت تقارن بدست می آوریم x = 0 -1<m<0 x = y m=0 m=-1
مرحله k+1ام يا معيار تصميمگيري Pk=? (xk+1=xk+1) در مرحله kام پيکسل به درستي انتخاب شده است ميخواهيم تصميم بگيريم در مرحله k+1ام (xk+1=xk+1) کدام يک از دو پيکسل يا به دايره نزديکتر است؟
X2+y2=r2 fcircle(x,y) = X2+y2 - r2 اگر (x,y) داخل دایره باشد اگر (x,y) روی مرز دایره باشد اگر (x,y) خارج دایره باشد پارامتر تصمیم برای این کار، تابع fcircle، ارزیابی شده در نقطه میانی این دوپیکسل خواهد بود
Pk<0 نقطه مياني داخل دايره به مرز دايره نزديکتر است (xk+1,yk) Pk>0 نقطه مياني خارج دايره به مرز دايره نزديکتر است (xk+1,yk-1) yk+1(y مرحله بعد)
-محاسبات Pk پيچيده ميباشد براي کم کردن محاسبات Pk+1 را با استفاده از معادلات نموي بدست ميآوريم ( ) =(yk-1)yمرحله بعد Pk<0 yk+1 = yk Pk>0 yk+1 = yk-1 و
P0 =? (برای r صحیح)
الگوریتم نقطة میانی برای دایره 1-شعاع r و مرکز دایره را وارد می کنیم سپس مختصات برای نخستین نقطه بر روی محیط دایره به مرکز مختصات را به صورت زیر قرار می دهیم 2-در هر موقعیت xkبا شروع از k = 0 آزمون زیر را انجام می دهیم. اگر Pk<0 نقطه بعدی بر روی دایرهي به مرکز (0,0) برابر است و داريم در غیر این صورت، نقطة بعدی بر روی دایره برابر است و داریم که در آن و 3-نقاط متقارن در هفت اوکتانت دیگر را تعیین می کنیم • 4-هر پیکسل محاسبه شدة (x,y) را به روی دایرة به مرکز منتقل می کنیم و مقادیر مختصات زیر را رسم می کنیم. 5-مراحل 2 تا 4 را آنقدر تکرار می کنیم تا شرط برقرار شد
مثال : دايرهاي به شعاع r = 10 =(yk-1)y مرحله بعد Pk<0 yk+1 = yk Pk>0 yk+1 = yk-1
بیضی مکان هندسي بيضي: مجموع فواصل هر نقطه واقع در روي بيضي از دو نقطه ثابت به نام مراکز کانوني ثابت است. a + b = constant http://www.mathopenref.com/ellipse.html F1=(x1,y1) F2=(x2,y2)
معادله بيضي استاندارد که محورهاي آن موازي محورهاي مختصات به مرکز yc و xc به شعاعهاي rx و ry معادله بيضي مرکز (0،0) : اگر بخواهیم یک بیضی را در موقعیت غیر استاندارد نمایش دهیم می توانیم با دوران آن حول مرکزش، قطرهای بزرگ و کوچک آنرا در جهتهای دلخواه قرار دهیم
بيضي در مختصات قطبی تقارنی در بيضي برای کاهش محاسبات :
الگوریتم نقطه میانی برای بیضی (MidPoint Ellipse Algorithm) يک چهارم بيضي را به کمک الگوريتم نقطه مياني شبيه آنچه بري دايره بدست آورديم توليد ميکنيم و باقي مانده به کمک تقارن توليد ميشود -1<m<0 =شروع نقطه -inf<m<-1 اگر (x,y) داخل بیضی باشد اگر (x,y) روی بیضی باشد اگر (x,y) خارج بیضی باشد پارامتر تصميم(معيار تصميم گيري)
در ناحيه 1بيضي : مرحله k+1ام يا معيار تصميمگيري P1k=? (xk+1=xk+1) در ناحيه 2بيضي : مرحله k+1ام يا معيار تصميمگيري P2k=? (yk+1=yk-1)
آزمون تشخيص خروج از ناحيه (منهاي مشتق نسبت به x تقسيم بر مشتق نسبت به y) m= =-1 شرط خروج از ناحيه 1 (ورود به ناحيه 2) در ناحيه 1بيضي : مرحله k+1ام يا معيار تصميمگيري P1k =? (xk+1=xk+1) midpoint=(xk+1 , yk- 0.5)
P1k<0 نقطه مياني داخل بيضي به مرز بيضي نزديکتر است (xk+1,yk) P1k>0 نقطه مياني خارج بيضي به مرز بيضي نزديکتر است (xk+1,yk-1) کم کردن محاسبات با محاسبه P1k+1: P1k<0 yk+1=yk P1k>0 yk+1=yk-1
در ناحيه 2بيضي : مرحله k+1ام يا معيار تصميمگيري P2k=? (yk+1=yk-1) midpoint=(xk+0.5 , yk-1)
P2k<0 نقطه مياني داخل بيضي به مرز بيضي نزديکتر است (xk+1,yk-1) P2k>0 نقطه مياني خارج بيضي به مرز بيضي نزديکتر است (xk,yk-1) کم کردن محاسبات با محاسبه P2k+1: P2k<0 xk+1=xk+1 P2k>0 xk+1=xk
P2k= ? (x0,y0) = آخرين موقعيت انتخاب شده در ناحيه 1 براي ساده شدن محاسبات p20 مي توان در ناحيه 2 در خلاف چرخش عقربه ساعت و با شروع از (rx,0) و گام در جهت مثبت محور y تا رسيدن به ناحيه 1
/* Region 2 */ p = ROUND (Ry2 * (x+0.5) * (x+0.5) + Rx2 * (y-1) * (y-1) – Rx2 * Ry2); while (y > 0) { y--; py -= twoRx2; if (p > 0) p += Rx2 – py; else { x++; px += twoRy2; p += Rx2 – py + px; } ellipsePlowPoints (xCenter, yCenter, x, y); } } Void ellipsePlotPoints (intxCenter, intyCenter, int x, int y) { setPixel (xCenter + x, yCenter + y); setPixel (xCenter – x, yCenter + y); setPixel (xCenter + x, yCenter – y); setPixel (xCenter – x, yCenter – y); }
مثال: ترسیم بیضی به روش نقطه میانی و و P1k<0 yk+1=yk P1k>0 yk+1=yk-1 برای ناحیة 1 حالا چون از ناحیة 1 خارج می شویم
برای ناحیة 2، نقطه شروع و پارامتر تصمیم شروع نیز برابر P2k<0 xk+1=xk+1 P2k>0 xk+1=xk
منحنی های دیگر (Other Curves) روشی ساده برای نمایش منحنی، تقریب آن توسط پاره خطهاست در جاهایی که قدر مطلق ضریب زاویه منحنی کوچکتر از یک است x را بعنوان متغیر مستقل انتخاب و مقادیر y را در نموهای x متساوی محاسبه می کنیم. زمانی که قدر مطلق ضریب زاویه منحنی بزرگ تر از یک است برای بدست آوردن مواضع متساوی الفاصله، از تابع معکوس استفاده و مقادیر x را در گام های متساوی الفاصله در روی محور yها محاسبه می کنیم اکثر توابع منحنی دارای خاصیت تقارنی اند که می توان از این خاصیت برای کاهش محاسبات مواضع مختصات بر روی مسیر منحنی ها استفاده کرد
هذلولي از تقارن استفاده مي کنيم و نيز منحني را به دو ناحيه (1) |m|<1و (2) |m|>1 تقسيم مي کنيم
نویسه ها قلم (فونت) : طرح و سبک کلی برای مجموعه ای از کاراکترها را فونت نقش بیتی (یا فونت bitmapped) : قرار دادن الگویی از مقادیر دودویی در آرایه ای مستطیلی فضاي ذخيره سازي بيشتر، هر تغييري در اندازه و فونت بايد در يک حافظه به نام فونت پنهان (font cache) ذخيره شود(براي دو برابر کردن اندازه نويسه تعداد پيکسلها نقش بيتي دو برابر شود) B
فونت برون خطی (Outline font) : شکلهای نویسه ای توسط قطعه خطهای مستقیم و قطعه منحنی ها فضاي ذخيره سازي کمتر، براي تغيير اندازه نويسهها تعاريف منحنيها دستکاري ميشوند، پردازش فونتها وقتگيرتر است فونتها 1- با سرکش (serif) : داراي خط هاي کوچک يا علائم نقطه گذاري در انتهاي نويسههاي اصلي است مانند Lotus, Times New Romanو . . . کاربرد: خواناتر هستند و در متنهاي طولاني تر راحت تر خوانده ميشوند 2- بدون سرکش (sans serif) : خط هاي کوچک در انتهاي نويسههاي وجود ندارد مانند Tahoma کاربرد:کلمات انفرادي،عنوان و برچسب گذاري، قابليت شناسايي بيشتر AminZare aminzare@cse.shirazu.ac.ir Amin_zare@pnu.ac.ir 2011/04/19