مهندسی عمران راه و ساختمان
ایجاد ارتقاء دانش فنی مهندسی ( عمران )

 
تاريخ : پنجشنبه ۲ تیر ۱۳۹۰
منبع : علمیران

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

( الگوریتم DDA )

نقل قول:

هر تصویر را می توان به روشهای مختلف رسم کرد. مثلا هر تصویر را به صورت مجموعه ای از اشکال در نظر گرفت و سپس این اشکال را با بصورت اشکال ساده مثل دایره،خط،نقطه و خیلی از موارد دیگر مدل کرد یعنی با استفاده از این ها شکل های دیگه رو ساخت . که از پرکاربرد نرین آن ها ترسیم خط است.

الگوریتم DDA:

یکی از الگوریتم های ترسیم خط الگوریتم DDA است که بر پایه معادله شیب خط عمل می کند . بسته به مقدار شیب خط از فرمول های زیر را استفاده خواهیم کرد:

فرمول DDA

فرمول ترسیم خط الگوریتم DDA

الف) در صورتیکه شیب خط مقدار مثبت و کمتر از یک باشد در این صورت در هر مرحله مقدار Δx را یک واحد زیاد می کنیم و سپس مقدار y را از فرمول ۱ محاسبه می کنیم.

ب) در صورتیکه شیب خط مقدار ثابت و بیشتر از یک باشد در این صورت در هر مرحله مقدار Δy را یک واحد اضافه می کنیم و سپس مقدار x را از فرمول ۲ محاسبه می کنیم .

نکته مهم این است که از آنجایی که مقدار m باید یک عدد حقیقی رند باشد نیاز به گرد کردن عدد حاصل داریم . الگوریتم DDA الگوریتم سریعی برای پیدا کردن پیکسل ها است که مستقیما از معادله خط استفاده میکند . اما به دلیل عملیات پیاپی در گرد کردن می تواند منجر به خطا های چشمگیر در خطوط طولانی شود . همچنین عملیات گرد کردن و کار با اعداد اعشاری بسیار وقت گیر است.

کد زیر نحوه اجرای این الگوریتم می باشد :

void dda_line(const int x_1,const int y_1,const int x_2,const int y_2)
{
int color=getcolor( );
int x1=x_1;
int y1=y_1;
int x2=x_2;
int y2=y_2;
if(x_1>x_2)
{
x1=x_2;

y1=y_2;
x2=x_1;
y2=y_1;
}
float dx=(x2-x1);
float dy=(y2-y1);
int steps=abs(dy);
if(abs(dx)>abs(dy))
steps=abs(dx);
float x_inc=(dx/(float)steps);
float y_inc=(dy/(float)steps);
float x=x1;
float y=y1;
putpixel(x,y,color);
for(int count=1;count<=steps;count++)
{
x+=x_inc;
y+=y_inc;
putpixel((int)(x+0.5),(int)(y+0.5),color);
}
}

به حجم 163.4 کیلوبایت

در فرمت پی دی اف (pdf)



ارسال توسط حسن فراهانی

اسلایدر