y - ghaemindustrial.com
Download
Report
Transcript y - ghaemindustrial.com
گرافیک رایانه ای
الگوریتم های ترسیم خط
گردآوری :مهندس رضا فهیمی
به راستی خطوط چگونه در کامپیوتر ترسیم می شوند؟
• همانطور که در تصویر مشاهده می شود
برای ترسیم یک خط بایستی پیکسل های
مرتبط در صفحه نمایش رنگ شوند حال
برای انتخاب پیکسل های مناسب الگوریتم
های متعددی در دنیای کامپیوتر وجود
دارد که به 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
)R(y
)R(x
y
x
گام
3
2
3
2
0
4
3
3.5
3
1
4
4
4
4
2
5
5
4.5
5
3
5
6
5
6
4
6
7
5.5
7
5
6
8
6
8
6
7
9
6.5
9
7
7
10
7
10
8
8
11
7.5
11
9
8
12
8
12
10
همانطوری که مشاهده شد عملیات ترسیم خط به روش
DDAصورت گرفت ولی محاسبات اعشاری و گرد
کردن اعداد به نزدیکترین نقطه برای سیستم محاسباتی
وقت گیر است.
الگوریتم Bresenham’s
اساس کار این الگوریتم محاسبه فاصله بین مختصات yواقعی
و نقاط yباالئی و پائینی می باشد (در این روش محاسبات
براساس اعداد صحیح و شیب خط نیز مالیم فرض می
شود.
dupper
dlower
فرض کنید که شیب خط با مالیمت از سمت چپ آغاز می شود( .یعنی نقطه ابتدائی سمت چپ قراردارد) نقطه
ابتدائی را رنگ می کنیم و در مرحله بعد برای هر مقدار xبایستی مقدار yیا y+1را محاسبه کنیم.
.1نقطه ابتدائی ) (x0,y0را رنگ می کنیم.
.2مقادیر dxو dyو 2dyو 2dy - 2dxرا محاسبه می کنیم.
.3برای محاسبه نقطه بعدی فرمول زیر را به عنوان فرمول تصمیم 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
پایان
[email protected]
)P(y
)P(x
p
گام
3
2
0
0
4
3
-10
1
4
4
0
2
5
5
-10
3
5
6
0
4
6
7
-10
5
6
8
0
6
7
9
-10
7
7
10
0
8
8
11
-10
9
8
12
0
10