Araz
Araz
خواندن ۳ دقیقه·۴ سال پیش

پیاده سازی الگوریتم DDA در پایتون

در ابتدا میخوام از کرونا ویروس که باعث شد کارا دور کاری بشه و دانشگاه ها تعطیل بشن و برن سمت آموزش مجازی تشکر ویژه ای بکنم که باعث شد خانه نشین بشیم و بتونیم کمی برای دل خودمان کد بزنیم.
خب از کجا شروع کنیم؟؟!
آهان یادم اومد :)

گوشیم زنگ خورد و رفتم جواب دادم امین پشت خط بود:
امین: سلام.
من: هلو امین.
امین: آراز استاد امدادی درس گذاشته و چند تایی مشق!!
من: مشق؟؟! مطمئنی؟؟؟
امین: آره بابا.
من: خب حالا چی هست؟
امین: الگوریتم DDA و یدونه هم هست برکنهام!
من: مطمئنی برکنهام؟ یوخت برزنهام نباشه :)
امین: اره همون که گفتی (با خنده).
من: خب بشین بنویس به منم بفرست.
من: راستی تا کی وقت داریم اصن؟؟

امین: جمعه.
من: اوووووو کو تا جمعه بشین بنویس به منم بفرست من یخورده کار دارم.
امین: باشه.
شبش امین پیام داد که:

امین: نوشتم آمادس ولی ۳۰۰ خط شده.

من: لعنتی مگه با چی نوشتی که شده ۳۰۰ خط!!

امین: با سی پلاس پلاس.

من: کار میکنه حالا.
امین: نه غلط غلوط.

من: پس بیخیال وللش کن.

امین باشه.

گذشت و گذشت آن جمعه آمد و رفت ما متاسفانه امتیاز این مرحله رو از دست دادیم رفت شد ۱۴ مهر تو همین ویرگول یه نوشته ای دیدم با عنوان معرفی کتابخانه bokeh نظرمو جذب کرد گفتم ببینم چیه که دیدم ای دل غافل داره رسم خط تو پایتون رو یاد میده گفت خب این که عالیه همین فردا DDA رو با این پیاده سازیش میکنم و میفرستم برا استاد البته اگه قبول کنه ;)
خب بریم سراغ پیاده سازیش.

من کاری با نصب و ادد کردنش ندارم چرا که دوستمون آقای وکیلی در مقاله خودشون توضیح دادن پس توصیه میکنم اول کاری برین سراغ مقاله معرفی کتابخانه bokeh

خب اولین کاری که باید بکنیم اینه که مقادیر (x1,x2,y1,y2) رو از کاربر بگیریم:

x1 = int(input(&quotPlease Enter Value of x1: &quot))
y1 = int(input(&quotPlease Enter Value of y1: &quot))
x2 = int(input(&quotPlease Enter Value of x2: &quot))
y2 = int(input(&quotPlease Enter Value of y2: &quot))

حالا میریم سراغ محاسبه شیب یا همون m که طبق فرمول باید بگیم:

m = Delta Y / Delta X

کدی هم که من نوشتم برای محاسبش بدین شکل:

Delta_y = y2 - y1
Delta_x = x2 - x1
m = float(Delta_y / Delta_x)

خب حالا باید یه شرط بزاریم که اگر m بزرگتر از یک بود y ها ثابت حرکت کنند و x ها طبق فرمول زیر:

x= x + (1/m)

اگرم که m کوچکتر از یک بود x ها ثابت حرکت میکنند و y ها طبق فرمول زیر:

y= y+m

مابقی ماجرام که میدونین جدول بکش و اعداد رو روند بکن و نمودار بکش

بخش اول برای بررسی m جایگذاری Xk و Yk
بخش اول برای بررسی m جایگذاری Xk و Yk
بخش دوم بررسی
بخش دوم بررسی

خب اینم از این بخش که یه توضیح مختصری بدم خدمتتون که برنامه بعد از if داره x ها رو که ثابت حرکت میکنند رو تو یک لیست(میتونین آرایه هم درنظر بگیرید)ذخیره میکنه و در بخش دوم هم دار با فرمول و اینا y رو محاسبه میکنه اون Len_X_K رو هم برای اینکه بتونم طول لیست رو بگیرم و ازش استفاده بکنم نوشتم همین الان جدول x و y های ما آمادس فقط کافیه اینارو تو نمودار رسم کنیم اینجاست که کتابخانه bokeh به کمک ما میاد.

رسم نمودار
رسم نمودار

در ابتدا اینو بگم که نمودار ما قراره در یک فایل html ذخیره بشه حالا چرا html دیگه اینو باید از دوستانی که bokeh رو ساختن بپرسین پس در خط اول یک فایل با نام DDA lines درست میکنه و نمودار ما رو در اون قرار میده.

خط دوم در بالای نمودار یک عنوان مینویسه و در پایین محور x ها x رو قرار میده و در محور y ها y رو قرار میده تا ما دچار سردرگمی نشیم نوشتنش اختیاریه ولی بهتره بنویسیمش.

خط سوم اولین عنصر بیان کننده مقادیر محور x هاس عنصر دوم مقادیر y هاس عنصر سوم رو نمیدونم چیه و دستم بهش نزدم عنصر چهارم اندازه ی خط که همون 5 خووبه بنظر من.

و در خط آخر هم بعد از رسم و ذخیره کردن اون در فایل html بلافاصله اون رو نمایش میده.

همین با موفقیت ما الگوریتم DDA رو پیاده اش کردیم.

دوستانیم که مثل خود من دنبال لقمه آماده و حاضرند میتونن از گیتهاب من Araz78 فایل های پروژه رو دریافت کنن.

در آخر سر هم اگر استاد این متن رو دیدین بدونین که اصلا انتظار نمره ای ندارم هدفم از آوردن اسمتون این بود که بدونین واقعا کار کردم و درس رو یاد گرفتم.

مهندس نرم افزار عاشق بازی و سفر
شاید از این پست‌ها خوشتان بیاید