IKKI CHIZIQNI KESISHISH UCHUN TEKSHIRISH ALGORITMLARI
MAVZU: IKKI CHIZIQNI KESISHISH UCHUN TEKSHIRISH ALGORITMLARI. MUNDARIJA Kirish. ........................................................................................................................................................... 2 Bresenhem algoritmi ................................................................................................................................... 3 Bresenhem algoritmi qo’llanilishi. ............................................................................................................... 7 Bresenhem algoritmining asosiy g'oyasi. ................................................................................................... 11 Bresenxem algoritmidagi xato grafigi. ....................................................................................................... 12 Birinchi oktant uchun segmentni rastrlash uchun Bresenhem algoritmi ................................................... 13 Bresenhem algoritmining blok diagrammasi. ............................................................................................ 14 General Bresenhem algoritmi. ................................................................................................................... 15 Umumlashtirilgan Bresenhem algoritmi uchun misollar tahlili. ................................................................. 16 Doira hosil qilish uchun Bresenhem algoritmi. .......................................................................................... 17 Birinchi oktantdagi yoydan to`liq aylana hosil bo`lishi. .............................................................................. 17 ................................................................................................................................................................... 18 Birinchi chorakda aylana hosil qilish uchun Bresenhemning bosqichma-bosqich algoritmi ...................... 21 Bezier egri chizig'i va uning geometrik algoritmi. ...................................................................................... 22 Bezier egri chiziqlarining turlari ................................................................................................................. 23 Kompyuter grafikasida dastur .................................................................................................................... 24 Xulosa. ...................................................................................................................................................... 24 Foydalanilgan adabiyotlar. ......................................................................................................................... 26
Kirish . Algoritm so`zi barchamizga ma`lum bo`lganidek, vatandoshimiz Muhammad ibn Muso al-Xorazmiyning ismini yevropacha talaffuzidan kelib chiqqan. Demak, hozirda keng foydalanilayotgan algoritmlashning asosi bizning Vatanimizdan boshlangan. Maktab informatika kursidan ma`lumki, algoritm bu – ma`lum masalani hal qilish uchun bajarish kerak bo`lgan amallar ketma-ketligi. O`sha mashhur choy damlash algoritmidan chekingan holda hayotiy misol keltiramiz. Hayotda eng ko`p bo`ladigan holatimiz bu uyqu. Ko`pchilik rejim bilan uxlaydi , ya`ni uxlashga ma`lum bir vaqtni belgilagan. Misol uchun siz uxlashga yotish uchun 22:00ni tanladingiz. Har safar soatga qaraganingizda uxlash vaqti bo`lgan yoki bo`lmaganini tekshirasiz. Miyangizda esa quyidagi jarayon bo`ladi: Bu oddiy uyquga yotish algoritmi edi. Hayotda o`zimiz bilmagan holatda algoritmlardan foydalanamiz. Miyamiz juda tez ishlagani sabab qadamlar ketma- ketligi haqida o`ylab ko`rmaymiz. Endi maqolamizning asosiy qismi, dasturlashda algoritmlashga o`tamiz. Dasturlashda algoritm bu – masalani yechish uchun bajarilishi kerak bo`lgan amallar ketma-ketligini kodga o`girilgan varianti. Bunda masalani yechish uchun miyamizda kechayotgan jarayonni kompyuter tushunadigan qilib yozish talab etiladi. Algoritmlashning asosi matematika hisoblanadi. Bunda fikrlash muhim rol o`ynaydi. So`zimni quyidagicha isbot qilaman. Dasturlash sanoatida gigant korporatsiya hisoblangan Microsoftning asoschisi Bill Geytsning shunday so`zlari dasturchilar orasidda mashhur:"Qo`shish va ayirishni biladigan har qanday inson dasturchi bo`la oladi". Bu so`zlarni mag`zini chaqish uchun sizlarni boshlang`ich sinflarga qaytishga taklif etaman. Har birimiz boshlang`ich sinflarda qo`shish va ayirish amallarini o`rgangan edik. Ko`pchilik buni barmoqlari orqali bajargan. Chunki barmoqlar 10ta va raqamlarni qo`shish va ayirishda qo`l keladi. Keyinchalik matematik evolutsiyamiz sonlar bilan qo`shish va ayirish amallarini bajarish bosqichiga yetib keladi. Bu rivojlanish jarayoni yangi amallar bilan boyidi va endi bir xil raqamlarni bir necha marta qo`shishni osonlashtirish uchun ko`paytirish jadvalini o`rgandik. E`tibor bering, ko`paytirish algoritmi qo`shish algoritmining asosiga qurilgan. Rivojlanishimiz davom etib, endilikda qoldiqli bo`lish va shu kabi murakkabroq amallarga o`tamiz. Maktabni bitirish vaqtida esa juda murakkab amallarni ham bajara oladigan darajada bo`lamiz. Ana ko`rdingizmi, hamma murakkab amallarning asosi qo`shish va ayirishdan boshlanadi. U yog`i esa fikrlash doirangiz kengligiga bog`liq. Demak, dasturlashdagi asosiy masalalar matematik fikrlashga bog`liq.
Algoritmlashning asosiy shartlaridan biri bu – dasturning ishlash tezligi. Kod qanchalik optimal bo`lsa, dastur shuncha tez ishlaydi. Dastur tezligini pasaytiruvchi omillar bu – loop, ya`ni takrorlanishlar. Sikl ichida sikl ochish yoki sikl ichida shart tekshirish dastur tezligini ma`lum darajada pasaytiradi. Hayotiy misol keltiraman: 7ta 45ni bir biriga qo`shing. Har birini alohida qo`shib chiqish uchun vaqt talab etiladi. Ya`ni 7 marta bir xil amalni bajarish kerak. Xuddi shuni ko`paytirish amali orqali kamroq vaqt sarflab amalga oshirish mumkin. Har birimiz arifmetik progressiya haqida tushunchaga egamiz. Hadlari bir biridan ma`lum d songa farq qiladigan sonli ketma-ketlik. Shuni nta hadi yig`indisini toppish uchun n marta har safar yangi hadni topish va uni oldingi sonlar yig`indisiga qo`shish talab etiladi. Bu esa juda ko`p vaqt talab qiladi. Aynan shu muammo matematikada oddiy formula orqali hal etilgan. Bu muammoni hal etish formulasi esa albatta tafakkur mahsuli hisoblanadi. Siz ham yuqori darajali masalalarni yechishda ana shunday ixtirolar qilasiz yoki boshqa ixtirolardan foydalanasiz. Dasturlashda algoritmlashning asosan 4 turi mavjud: 1.Saralash 2.Qidirish 3.Grafiklar 4.Stringlar Ularning har biriga keyingi maqolalarimizda alohida to`xtalib o`tishga harakat qilamiz. Hozir esa oddiy algoritmlaning kodga o`girilish jarayonini ko`rib chiqamiz. Bresenhem algoritmi Ikki chiziqni kesishish uchun tekshirish algoritmlaridan biri haqida aytsak bu- Bresenhem algoritmidir.Bresenxem algoritmi Jek E. Bresenxem tomonidan 1962 yilda taklif qilingan va u tekislikda nuqtalari bo'lgan raqamlarni chizish uchun mo'ljallangan. Bu algoritm ekranda chiziqlar chizish uchun kompyuter grafikasida keng qo'llaniladi. Algoritm ikki o'lchovli rastrning qaysi nuqtalarini bo'yash kerakligini aniqlaydi. C = y1 ∙ x2-y2 ∙ x1 Koordinatali har qanday raster nuqtasi uchun ( xi;yi) qiymat funktsiyasi Bresenhem algoritmining grafik talqini rasmda ko'rsatilgan .
Bresenhem algoritmi yordamida tekislikda to'g'ri chiziq segmentlarini chizish uchun biz to'g'ri chiziq tenglamasini umumiy shaklda yozamiz. f (x, y) = Ax + By + C = 0 bu erda koeffitsientlar A va B koeffitsientlar bilan ifodalanadi k va b to'g'ri chiziq tenglamalari. Agar to'g'ri chiziq koordinatali ikkita nuqta orqali o'tsa ( x1;y1) va ( x2;y2), keyin to'g'ri chiziq tenglamasining koeffitsientlari formulalar bilan aniqlanadi A = y2-y1, B = x1-x2 f (xi, yi)= 0, agar nuqta to'g'ri chiziqda bo'lsa f (xi, yi)> 0, agar nuqta to'g'ri chiziq ostida bo'lsa f (xi, yi) qayerda i- ko'rsatiladigan nuqta raqami. Shunday qilib, qaysi nuqtalarni hal qilish usullaridan biri P. yoki Q(rasmga qarang) keyingi bosqichda ko'rsatiladi, bu segmentning o'rtasini solishtirish | P-Q | funktsiya qiymati bilan f (x, y)... Agar qiymat bo'lsa f (x, y) chiziq segmentining o'rta nuqtasidan pastda joylashgan | P-Q |, keyin keyingi ko'rsatiladigan nuqta nuqta bo'ladi P., aks holda - nuqta Q .
Funktsiyaning ortishini yozamiz ∆f = A∆x + B∆y Nuqtani koordinatalar bilan ko'rsatgandan so'ng (xi, yi) ko'rsatiladigan keyingi nuqta aniqlanadi. Buning uchun o'sish ko'rsatkichlari taqqoslanadi Δ x va Yy, mos keladigan koordinata bo'ylab harakatning mavjudligi yoki yo'qligini tavsiflaydi. Bu o'sish 0 yoki 1 bo'lishi mumkin. Shuning uchun biz nuqtadan o'ngga harakat qilsak, biz nuqtadan o'ngga va pastga siljiganimizda ∆f = A + B, biz bir nuqtadan pastga siljiganimizda, demak Biz segment boshining koordinatalarini bilamiz, ya'ni aniq to'g'ri chiziqda yotadigan nuqta. Biz birinchi nuqtani qo'yamiz va qabul qilamiz f= 0. Siz joriy nuqtadan ikki qadam - vertikal (gorizontal) yoki diagonal bo'yicha bitta pikselga o'tishingiz mumkin. Vertikal yoki gorizontal harakatlanish yo'nalishi qiyalik nisbati bilan belgilanadi. Nishab burchagi 45º dan past bo'lsa va | A |<|B| har bir qadamda harakat gorizontal yoki diagonalda amalga oshiriladi. Nishab burchagi 45º dan yuqori bo'lsa, har bir qadamda harakat vertikal yoki diagonalda amalga oshiriladi. Shunday qilib, egilgan segmentni chizish algoritmi quyidagicha: C ++ ilovasi : 1. #qo'shing 2. std nomlar maydonidan foydalanish; 3. bo'sh Brezenhem (char ** z, int x0, int y0, int x1, int y1) 4. { 5. int A, B, belgisi; 6. A = y1 - y0; 7. B = x0 - x1; 8. agar (abs (A)> abs (B)) belgisi = 1; 9. else belgisi = -1; 10. int signa, belgi; 11. agar (A.< 0) signa = -1; 12. else signa = 1; 13. agar (B.< 0) signb = -1; 14. else signb = 1; 15. int f = 0; 16. z = "*";