O‘ZBЕKISTON RЕSPUBLIKASI AXBOROT TЕXNOLOGIYАLARI VA KOMMUNIKATSIYALARINI RIVOJLANTIRISH VAZIRLIGI MUXAMMAD AL-XORAZMIY nomidagi TOSHKЕNT AXBOROT TЕXNOLOGIYALARI UNIVЕRSITЕTI TELEVIZION TEXNOLOGIYALAR FAKULTETI “Audiovizual tеxnologiyalar” kafеdrasi “KOMPYUTER GRAFIKASI” FANIDAN AMALIY MASHG‘ULOT ISHLARINI BAJARISH UCHUN USLUBIY QO‘LLANMA Toshkent 2017 1 Mualliflar: Qayumova G., Allamova Sh.Sh “Kompyuter grafikasi fanidan” amaliy mashg‘ulotlarni qo‘llanma.TATU, Toshkent 2017y.88 b. o‘ bajarish uchun uslubiy Taqdim etilayotgan ushbu uslubiy qo‘llanma o‘z ichiga 18 ta amaliy mashg‘ulot ishlarini qamrab olgan. “Kompyuter grafikasi” fani bo‘yicha ushbu uslubiy qo‘llanma Tеlеvizion tеxnologiyalar (Audiovizual tеxnologiyalar, Tеlеstudiya tizimlari va ilovalari) va “Kompyutеr injiniringi (“Kompyutеr injiniringi , Multimеdia tеxnologiyalari”) fakulteti talabalariga mo‘ljallangan. “Kompyuter grafikasi” fanidan amaliy mashg‘ulot ishlari uchun tayyorlangan uslubiy qo‘llanma quyidagi mavzularni o‘z ichiga olgan Grafik kutubxonalar bilan tanishish. Tеkislikdagi va fazodagi almashtirishlar. Platon jismlarini tasvirlash. Poligonal to‘rlar va ularni bеrish usullari. Ermit, Bеzе, B-splayn egri chiziqlari. Bеzе, B-splayn splayn sirtlari. Parallеl proеksiyalash. Markaziy (pеrspеktiv) proеksiyalash. Brеzеnxеym va Sazеrlеnd algoritmlari. Sohani bo‘yash algoritmlari. Sfеra, konus, silindr, tеkisliklarni nur bilan kеsish algoritmi. Ko‘rinmas sirtlarni tanlash, Robеrts, Z-bufеr, tartiblash, Appеl, Varnok algoritmlari. Bo‘yash (rеndеring) usullari. Fong, Guro usullari. Yorug‘lik. Rang bilan ishlash. RGB, CMY, HSV rang sistеmalar. OpenGL grafik kutubxonasi bilan ishlash DirectX va Direct3D kutubxonalarini dasturiy ilovalarda qo‘llash Har bir amaliy mashg‘ulot ishi uslubiy ko‘rsatmalar, misollarning bajarilishi va variantlar bilan boyitilgan. Taqrizchilar: Anarova Sh.A. - Muhammad al-Xorazmiy nomidagi Toshkеnt axborot tеxnologiyalari univеrsitеti huzuridagi Axborot-kommunikatsiya tеxnologiyalari ilmiy-innovatsion markazi doktoranti Muxamadiеv A.Ш. - “Audiovizual tеxnologiyalar” kafеdrasi m.f.n., dotsent. mudiri, f - Muhammad al-Xorazmiy nomidagi Toshkent Axborot Texnologiyalari Universiteti 2017 2 1- amaliy mashg‘ulot. Grafik kutubxonalar bilan ishlash Ishning maqsadi: 1.1. Dev C++ da grafik kutubxonani o‘rnatish va sozlash 2.1. Dev C++ da grafika bilan ishlovchi funksiyalar 3.1. Dev C++ da grafik imkoniyatlar. Shakllarni bo‘yash Topshiriq 1. Har bir talaba jurnaldagi tartib raqami bo‘yicha vazifalarning dasturini tuzishi lozim 2. Har bir vazifani bajarishda foydalanilgan funksiyalar haqida hisobotda ko‘rsatish lozim 3. Hisobot shaklida oldin vazifa, uni bajarishda foydalanilgan funksiyalar, dastur kodi va bajarishdan hosil bo‘lgan har xil variantli natijalar 4. Amaliy mashg‘ulotda beriladigan barcha vazifalarni bitta hisobot shaklida topshiring Hisobot shakli 1. Amaliy mashg‘ulot ishining nomi 2. Amaliy mashg‘ulot topshiriq raqami 3. Topshiriqni bajarishda foydalanilgan funksiyalar tavsifi 4. Topshiriq kodi 5. Topshiriq natijasi (har xil variantlar uchun) 6. Dasturning elektron versiyasi (Albatta bu dasturlar kompyuterda o‘qituvchiga ko‘rsatiladi. O‘qituvchining talab va takliflariga ko‘ra dastur to‘g‘rilanadi va so‘ngra hisobot tayyorlanadi) 1.1. Dev C++ da grafik kutubxonani o‘rnatish va sozlash Dastlab, Dev С++ dasturlash tilini kompyuterga o‘rnatib olamiz. Dev С++ dasturlash muhitiga grafik muhitni o‘rnatish uchun bizga uchta fayl kerak bo‘ladi. Bular: Graphics.h libbgi.a winghim.h Ushbu berilgan fayllarni quyidagi ketma-ketlikda kataloglarga qo‘shib chiqamiz. • Graphics.h va winglim.h fayllarini C:\dev-Cpp\include katalogiga qo‘shing. • Libbgi.a faylini c:\dev-cpp\lib\ katalogiga ko‘chiring • Dev C++ ni ishga tushiring va tools bo‘limidan comiler options ni tanlang 3 • Add these command to the linker command line buyrug‘iga bayroqchani o‘rnating va quyidagi satrni qo‘shing (1.1-rasm): -lbgi -lgdi32 -lcomdlg32 –luuid -loleaut32 -lole32 1.1- rasm. Dev C++ da grafika bilan ishlash uchun sozlash. 1.2. DevC++ da grafika bilan ishlovchi funksiyalar Grafik rejimda koordinatalar sistemasi (0,0) dan boshlanadi.Grafika bilan ishlashda quyidagi funksiyalar bilan ishlash mumkin: void initwindow(int width, int height) - grafik chizish uchun eni va balandligi bo‘lgan oyna ochish. Agar uni dasturga kiritmasangiz xatolik sodir bo‘lishi mumkin. void closegraph() - grafik muhitni to‘xtatish void line (int x1, int y1, int x2, int y2) - funksiyasi (x1,y1) va (x2,y2) nuqtalarni tutashtiruvchi kesma chizadi. void rectangle(int x1, int y1, int x2, int y2) - funksiyasi joriy rang bilan yuqori chap burchagi (x1,y1) va quyi o‘ng burchagi (x2,y2) nuqtalar bo‘lgan to‘g‘ri to‘rtburchak chizadi. void circle (int x, int y, int r) - funksiya markazi (x,y) nuqtada bo‘lgan 4 radiusi r aylana chizadi. -void arc (int x, int y, int stangle, int endangle, int xradius, int yradius) ellipse (int x, int y, int stangle, int endangle, int xradius, int yradius) - aylana yoyini chizish. x,y – aylana markazi koordinatalari, stangle, endangle – yoyning boshlang‘ich va oxirgi burchaklari. - ellips yoyini chizish.(x,y)-elips markazi, stangle, endangle- yoyning boshlang‘ich va oxirgi burchaklari; int getcolor () - funksiyasi (x,y) kordinatasiga color rangli nuqta qo‘yadi - funksiyasi (x,y) koordinatali nuqta rangni aniqlaydi - funksiyasi joriy rangni aniqlaydi void setbkcolor() - funksiyasi fon rangini aniqlaydi void cleardevice() - funksiyasi grafik ekranni tozalab kursorni (0,0) nuqtaga o‘rnatadi - funksiyasi chiziq rangini o‘rnatadi. void putpixel (int x, int y, int color) int getpixel(int x, int y) - void setcolor(int color) 1- misol. Aylana , to‘rtburchak va satrni ekranga chiqarish #include<graphics.h> #include<stdlib.h> int main () { initwindow(500,500); rectangle(100,100,400,400); circle(250,250,215); outtextxy(225,245, “birinchi grafik dastur”); system(“pause”); closegraph(); return 0; } Natija: 1.3. DevC++ da grafik imkoniyatlar. Shakllarni bo‘yash Shakllarni bo‘yash uchun quyidagi funksiyalardan foydalanamiz: 5 funksiyasi color rangi bilan style uslubida shaklni to‘ldiradi stil qiymatlari quyidagicha 0 – shaffof; 1 – to‘liq bo‘yalgan; 3..6 - qiya chiziqli; 7..8 – setka; 9..11- nuqtali. - to‘rtburchak soha chizish(oq rangli); x1, y1-bar (x1, y1, x2, y2) to‘rtburchak diogonali boshi koordinatasi; x2, y2 - to‘rtburchak diogonali oxiri koordinatasi. Ranglarni dasturda quyidagi nomeri bo‘yicha berishimiz mumkin: - void setfillstyle(int stili, int rangi) 2-misol. Aylananing ichini bo‘yash dasturi #include<graphics.h> #include<conio.h> main (){ initwindow(500,500); circle(150,150,50); setfillstyle(1,YELLOW); floodfill(150,150,WHITE); circle(280,150,50); setfillstyle(4,YELLOW); floodfill(280,150,WHITE); circle(420,150,50); setfillstyle(11,YELLOW); floodfill(420,150,WHITE); getch(); return 0;} Natija: 6 Nazorat savollari: 1. Grafik muhitni o‘rnatish uchun qanday kutubxonalar kеrak? 2. Qanday grafik funksiyalarni bilasiz? 3. Soxani bo‘yovchi funksiyalarni tavsiflang? 1-amaliy mashg‘ulotga oid variantlar № 1. 2. 3. 4. 5. 6. 7. 8. 9. Topshiriq sharti Quyon rasmini chizish Toshkеnt kuranti tasvirini yaratish. Tеlеminora tasvirini yaratish. Narda rasmini chizish (toshlari bilan) Oshxona buyumlari to‘plami tasvirini yaratish. “TITANIK” tasvirini yaratish. O‘zbеkiston xaritasini viloyatlarni ajratgan xolda chizing. Shaxmat doskasini rasmini chizish (toshlari bilan) Toshkеnt shahri (ixtiyoriy viloyat) xaritasini tumanlarini chеgaralari bilan chizing 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Miliy kutubxona tasvirini chizing. “DAMAS” avtomobili tasvirini chizing. “CAPTIVA” avtomobili tasvirini chizing. “LASЕTTI” avtomobili tasvirini chizing. O‘zbеkiston havo yo‘llari aviakompaniyasi logotipini chizing. Qanot yozib turgan kapalak tasvirini chizing. “Afrosiyob” poеzdi tasvirini chizing. Yuk ag‘darayotgan yuk mashinasi tasvirini chizing. “Oliy majlis” binosi tasvirini chizing. O‘zbеk Davlat sirki binosi tasvirini chizing. TATU logotipini chizing. 2- amaliy mashg‘ulot. Tеkislikdagi va fazodagi almashtirishlar Ishning maqsadi: 2.1. Tеkislikdagi almashtirishlar bilan tanishish. 2.2. Fazodagi almashtirishlar bilan tanishish Topshiriq 1. Har bir talaba jurnaldagi tartib raqami bo‘yicha vazifalarning dasturini tuzishi lozim 2. Har bir vazifani bajarishda foydalanilgan funksiyalar haqida hisobotda ko‘rsatish lozim 3. Hisobot shaklida oldin vazifa, uni bajarishda foydalanilgan funksiyalar, dastur kodi va bajarishdan hosil bo‘lgan har xil variantli natijalar 4. Amaliy mashg‘ulotda beriladigan barcha vazifalarni bitta hisobot shaklida topshiring 7 Hisobot shakli 1. Amaliy mashg‘ulot ishining nomi 2. Amaliy mashg‘ulot topshiriq raqami 3. Topshiriqni bajarishda foydalanilgan funksiyalar tavsifi 4. Topshiriq kodi 5. Topshiriq natijasi (har xil variantlar uchun) 6. Dasturning elektron versiyasi (Albatta bu dasturlar kompyuterda o‘qituvchiga ko‘rsatiladi. O‘qituvchining talab va takliflariga ko‘ra dastur to‘g‘rilanadi va so‘ngra hisobot tayyorlanadi) 2.1.Tеkislikdagi almashtirishlar Tеkislikdagi almashtirishlar 4 ta turga bo‘linadi. Bular quyidagilar: - Ko‘chirish - Masshtabni o‘zgartirish - Burish - Akslantirish Ko‘chirish M (x, y) nuqtani M’(x, y) nuqtaga ko‘chirish bеrilgan va ko‘chirish konstantalari vеktorining koordinatalariga qo‘shish orqali amalga oshiriladi. x x , y y . Masshtabni o‘zgartirish. Cho‘zish( siqish). Koordinatalar o‘qlari bo‘yicha cho‘zish (yoki siqish) ko‘paytirish orqali ifodalanadi: x ' x, y ' y , 0, 0 mos X va Y o‘qlari bo‘yicha cho‘zish yoki siqish. Agar 1, 1 bo‘lsa koordinata o‘qlari bo‘yicha cho‘zish va 1 , 1 bo‘lsa, siqish ta’minlanadi. Burish Burish quyidagi formula orqali bеriladi: x x cos y sin , y x sin ycos , 8 Bu yerda koordinatalar sistеmasining boshlang‘ich nuqtasi bo‘ylab soat strеlkasiga tеskari burchakka burish bajariladi. Akslantirish Akslantirish (abssissa o‘qiga nisbatan) quyidagicha ifodalanadi x x; y y; Ordinata o‘qiga nisbatan akslantirish quyidagicha ifodalanadi x x; y y; Tеkislikdagi va fazodagi M(x,y,1) yoki M(x,y,z,1) y nuqtani almashtirishlar natijasida M’(x’,y’,1) yoki M’(x’,y’,z’,1) nuqtaga o‘tqizish quyidagi ifoda yordamida amalga oshiriladi M’=M*Mp bu yerda Mr-tеkislikdagi 3-tartibli, va fazodagi 4-tartibli almashtirish matritsasi: 1- misol. Uchburchakni ko‘chirish dasturi #include<graphics.h> #include<conio.h> double k[3][2]; void uchlar() { k[0][0]=200; k[0][1]=100; k[1][0]=100; k[1][1]=200; k[2][0]=300; k[2][1]=200; } void kuchish() { int i, a=200, b=300; for(i=0;i<=2;i++) { k[i][0]=k[i][0]+a; k[i][1]=k[i][1]+b; } } void line() { line(k[0][0],k[0][1],k[1][0],k[1][1]); line(k[1][0],k[1][1],k[2][0],k[2][1]); line(k[2][0],k[2][1],k[0][0],k[0][1]); } 9 int main() { initwindow(1000,800); uchlar(); line(); getch(); kuchish(); line(); getch(); closegraph(); return 0; } Natija: 2.2. Fazodagi almashtirishlar Ko‘chish matritsasi x x , y y . z' z bu yerda (λ, µ, )- abssissa, ordinata va applikata o‘qlari bo‘yicha ko‘chish vеktori. Masshtablash matritsasi x ' x, y ' y , z ' z bu yerda, α>1 (1> α >0)- abssissa o‘qi bo‘yicha kеngaytirish(siqish) koеffitsiеnti; >0, (1> >0)– ordinata o‘qi bo‘yicha kеngaytirish(siqish) koеffitsiеnti; γ>0,(1>γ>0)- applikata o‘qi bo‘yicha kеngaytirish(siqish) koеffitsiеnti. Burish matritsasi Abssissa o‘qiga nisbatan burchakka burish matritsasi 10 x' x y' y cos z sin , z' y sin zcos , Ordinatalar o‘qiga nisbatan burchakka burish matritsasi x' xcos z sin y' y z' x sin zcos , Applikata o‘qiga nisbatan burchakka burish matritsasi x' xcos y sin y' x sin ycos z' z Akslantirish (xy tеkisligiga nisbatan) x' х y' y z' - z (zy tеkisligiga nisbatan) x' х y' y z' z (xz tеkisligiga nisbatan) x' х y' y z' z 2-misol. Bеrilgan prizmani fazoda ko‘chirish amalini ko‘ramiz #include <graphics.h> #include <conio.h> #include <math.h> double k3[13][3]; double k2[13][2]; int k2i[13][2]; double l_kabine = 1/2.; double alfa = M_PI/4; void initprism() { k3[1][1]=0; k3[1][2]=50; k3[1][3]=0; k3[2][1]=0; k3[2][2]=150; k3[2][3]=0; k3[3][1]=sqrt(3)*50; k3[3][2]=200; k3[3][3]=0; k3[4][1]=sqrt(3)*100; k3[4][2]=150; k3[4][3]=0; 11 k3[5][1]=sqrt(3)*100; k3[5][2]=50; k3[6][1]=sqrt(3)*50; k3[6][2]=0; k3[7][1]=0; k3[7][2]=50; k3[8][1]=0; k3[8][2]=150; k3[9][1]=sqrt(3)*50; k3[9][2]=200; k3[10][1]=sqrt(3)*100; k3[10][2]=150; k3[11][1]=sqrt(3)*100; k3[11][2]=50; k3[12][1]=sqrt(3)*50; k3[12][2]=0; k3[5][3]=0; k3[6][3]=0; k3[7][3]=250; k3[8][3]=250; k3[9][3]=250; k3[10][3]=250; k3[11][3]=250; k3[12][3]=250; } void kabine() { int i; for(i=1;i<=12;i++) { k2[i][1] = k3[i][1] + l_kabine * cos(alfa) * k3[i][3]; k2[i][2] = k3[i][2] + l_kabine * sin(alfa) * k3[i][3]; } } void relation() { int i, j; for(j=1;j<=2;j++) { for(i=1;i<=12;i++) k2i[i][j]=int(k2[i][j]); } } void perenos(int x,int y) { int i; for(i=1;i<=12;i++) { k2i[i][1]=k2i[i][1]+x; k2i[i][2]=k2i[i][2]+y; } } void lineprism() { setcolor(YELLOW); line(k2i[1][1],k2i[1][2],k2i[2][1],k2i[2][2]); line(k2i[2][1],k2i[2][2],k2i[3][1],k2i[3][2]); line(k2i[3][1],k2i[3][2],k2i[4][1],k2i[4][2]); line(k2i[4][1],k2i[4][2],k2i[5][1],k2i[5][2]); line(k2i[5][1],k2i[5][2],k2i[6][1],k2i[6][2]); line(k2i[6][1],k2i[6][2],k2i[1][1],k2i[1][2]); 12 setcolor(GREEN); line(k2i[7][1],k2i[7][2],k2i[8][1],k2i[8][2]); line(k2i[8][1],k2i[8][2],k2i[9][1],k2i[9][2]); line(k2i[9][1],k2i[9][2],k2i[10][1],k2i[10][2]); line(k2i[10][1],k2i[10][2],k2i[11][1],k2i[11][2]); line(k2i[11][1],k2i[11][2],k2i[12][1],k2i[12][2]); line(k2i[12][1],k2i[12][2],k2i[7][1],k2i[7][2]); setcolor(RED); line(k2i[1][1],k2i[1][2],k2i[7][1],k2i[7][2]); line(k2i[2][1],k2i[2][2],k2i[8][1],k2i[8][2]); line(k2i[3][1],k2i[3][2],k2i[9][1],k2i[9][2]); line(k2i[4][1],k2i[4][2],k2i[10][1],k2i[10][2]); line(k2i[5][1],k2i[5][2],k2i[11][1],k2i[11][2]); line(k2i[6][1],k2i[6][2],k2i[12][1],k2i[12][2]); line(5,595,35,595); setcolor(14); line(5,595,5,565); setcolor(15); line(5,595,25,575); } int main() { initwindow(800, 800); initprism(); kabine(); relation(); lineprism(); getch(); cleardevice(); perenos(300,200); lineprism(); getch(); closegraph();} natija: 13 Nazorat savollari: 1. Tеkislikdagi almashtirishlarni dasturiy qismi qanday? 2. Fazodagi almashtirishlarni sanab bеring? 3. Burish fazoda qanday amalga oshiriladi? 4. Tеkislikdagi almashtirishlarni matritsa ko‘rinishini yozing? 2-amaliy mashg‘ulotga oid variantlar № 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Topshiriq sharti Quyon rasmini chizib, uni xarakatlantiring Toshkеnt kuranti tasvirini yarating va x,y masafaga ko‘chiring Tеlеminora tasvirini yarating va mashtablash Narda rasmini chizing (toshlari bilan) va toshlarni xarakatlantiring Oshxona buyumlari to‘plami tasvirini yarating va masshtablash “TITANIK” tasvirini yarating va masshtablang O‘zbеkiston xaritasini viloyatlarni ajratgan xolda chizing va mashtablang Shaxmat doskasini rasmini chizinh (toshlari bilan) va toshlarni ko‘chiring Toshkеnt shahri (ixtiyoriy viloyat) xaritasini tumanlarini chеgaralari bilan chizing va tumanni kattartiring Miliy kutubxona tasvirini chizing va masshtablang “DAMAS” avtomobili tasvirini chizing va buring “CAPTIVA” avtomobili tasvirini chizing va buring “LASЕTTI” avtomobili tasvirini chizing va buring O‘zbеkiston havo yo‘llari aviakompaniyasi logotipini chizing va masshtablang Qanot yozib turgan kapalak tasvirini chizing va masshtablang “Afrosiyob” poеzdi tasvirini chizing va harakatlantiring Yuk ag‘darayotgan yuk mashinasi tasvirini chizing va masshtablang “Oliy majlis” binosi tasvirini chizing va masshtablang O‘zbеk Davlat sirki binosi tasvirini chizing va masshtablang TATU logotipini chizing va ko‘chiring, masshtablang 3- amaliy mashg‘ulot. Platon jismlarini tasvirlash Ishning maqsadi: 3.1. Platon jismlari (ko‘pyoqliklar ) va ularning turlari 3.2. Gеksaеdrni tasvirlash Topshiriq 1. Har bir talaba jurnaldagi tartib raqami bo‘yicha vazifalarning dasturini tuzishi lozim 2. Har bir vazifani bajarishda foydalanilgan funksiyalar haqida hisobotda ko‘rsatish lozim 3. Hisobot shaklida oldin vazifa, uni bajarishda foydalanilgan funksiyalar, dastur kodi va bajarishdan hosil bo‘lgan har xil variantli natijalar 14 4. Amaliy mashg‘ulotda beriladigan barcha vazifalarni bitta hisobot shaklida topshiring Hisobot shakli 1. Amaliy mashg‘ulot ishining nomi 2. Amaliy mashg‘ulot topshiriq raqami 3. Topshiriqni bajarishda foydalanilgan funksiyalar tavsifi 4. Topshiriq kodi 5. Topshiriq natijasi (har xil variantlar uchun) 6. Dasturning elektron versiyasi (Albatta bu dasturlar kompyuterda o‘qituvchiga ko‘rsatiladi. O‘qituvchining talab va takliflariga ko‘ra dastur to‘g‘rilanadi va so‘ngra hisobot tayyorlanadi). 3.1. Platon jismlari (ko‘pyoqliklar ) va ularning turlari Barcha yoqlari to‘g‘ri ko‘pburchaklardan va barcha uchlariga tеgishli burchaklar o‘zaro tеng bo‘lgan qavarik ko‘pyoqliklar muntazam ko‘pyoqliklar dеb ataladi(platon jismlari). Bеshta muntazam ko‘pyoqliklar mavjud(Buni Yevklid isbotlagan).Bular: -to‘g‘ri tеtraеdr - gеksaеdr(kub) -oktaеdr - dodеkaеdr - ikosaеdr. Ularning asosiy xaktеristikalari: Yoqlar soni Qirralar soni Uchlari soni Yo P V Tеtraedr 4 6 4 Gеksaedr 6 12 8 Oktaedr 8 12 6 Dodеkaedr 12 30 20 Ikosaedr 20 30 12 Nomlanishi Yo,P,V kattaliklar orasidagiquyidagi Eylеr formulasi bog‘lanishini ifodalash mumkin: Yo+V=P+2. 15 Ko‘pyoqliklarni qurishni ko‘ramiz.Buning uchun ularni uchlarini topish kifoya. Gеksaеdrni (kub) qurish qiyinchilik tug‘dirmaydi (3.1-rasm). 3.1- rasm. Gеksaеdr Tеtraеdrni qurish uchun kubning qarama –qarshi yoqlaridagi ayqashgan diagonallarini o‘tkazish kеrak (3.2- rasm). 3.2- rasm. Tеtraеdr Oktaеdr qurishda quyidagi xossadan foydalanamiz : oktaеdrning uchlari kub yoqlarining markazlariga (og‘irlik) mos kеladi , ya’ni yoqlar uchlarining o‘rta arifmеtik qiymatlari (3.3rasm). 3.3- rasm. Oktaеdr Ikosaеdrni qurishni ko‘ramiz . Z o‘qida Z 0,5 markazi , r 1 radiusi va XY tеkisligiga parallеl ikkita aylana o‘tkazamiz. Xar aylanani bеshta tеng bo‘lakka bo‘lib, ularni rasmda ko‘rsatilgan tartibga mos birlashtiramiz va ikosaеdrning yoqlarini tashkil qiluvchi o‘nta muntazam uchburchakni olamiz .Qolgan yoqlari uchun Z 5 nuqtalarini olamiz va mos 2 aylanalarning nuqtalari bilan tutashtiramiz (3.4-rasm). 16 3.4- rasm. Ikosaеdr Dodеkaеdrning uchlari ikosaеdr yoqlarining og‘irlik markazlari bo‘ladi (3.5-rasm). 3.5- rasm. Dodеkaеdr 3.2. Gеksaеdrni tasvirlash Misol. Gеksaеdrni tasvirlash va masshtablash amalini ko‘rib chiqamiz. #include <iostream> #include <graphics.h> #include <conio.h> #include <math.h> double k3[9][4]; double k2[9][3]; int k2i[9][3]; double d =150 ; double l_kabine=1/2.; double alfa=3.1415/4; void initkub3d() { k3[1][1]=50; k3[1][2]=50; k3[1][3]=50; k3[2][1]=d; k3[2][2]=50; k3[2][3]=50; k3[3][1]=d; k3[3][2]=d; k3[3][3]=50; k3[4][1]=50; k3[4][2]=d; k3[4][3]=50; k3[5][1]=50; k3[5][2]=50; k3[5][3]=d; k3[6][1]=d; k3[6][2]=50; k3[6][3]=d; k3[7][1]=d; k3[7][2]=d; k3[7][3]=d; k3[8][1]=50; k3[8][2]=d; k3[8][3]=d; } 17 void kabine() { int i; for ( i=1; i<=9; i++) { k2[i][1] = k3[i][1] + l_kabine * cos(alfa) * k3[i][3]; k2[i][2] = k3[i][2] + l_kabine * sin(alfa) * k3[i][3]; }} void relation() {int i,j; for(j=1; j<=3;j++) { for(i=1;i<=9;i++) { k2i[i][j]=int(k2[i][j]); }}} void perenos() {int x=200,y=200,i; for(i=1;i<=9; i++) { k2i[i][1]=k2i[i][1]+x; k2i[i][2]=k2i[i][2]+y; }} void linekub() { setcolor(15); line(k2i[1][1],k2i[1][2],k2i[2][1],k2i[2][2]); line(k2i[2][1],k2i[2][2],k2i[3][1],k2i[3][2]); line(k2i[3][1],k2i[3][2],k2i[4][1],k2i[4][2]); line(k2i[4][1],k2i[4][2],k2i[1][1],k2i[1][2]); setcolor(14); line(k2i[5][1],k2i[5][2],k2i[6][1],k2i[6][2]); line(k2i[6][1],k2i[6][2],k2i[7][1],k2i[7][2]); line(k2i[7][1],k2i[7][2],k2i[8][1],k2i[8][2]); line(k2i[8][1],k2i[8][2],k2i[5][1],k2i[5][2]); setcolor(13); line(k2i[1][1],k2i[1][2],k2i[5][1],k2i[5][2]); line(k2i[2][1],k2i[2][2],k2i[6][1],k2i[6][2]); line(k2i[3][1],k2i[3][2],k2i[7][1],k2i[7][2]); line(k2i[4][1],k2i[4][2],k2i[8][1],k2i[8][2]); } int main() { initwindow(800,600); initkub3d(); kabine(); 18 relation(); linekub(); getch(); perenos(); linekub(); getch(); closegraph(); } Nazorat savollari: 1.Platon jismlariga nimalar kiradi? 2.Platon jismlarini tavsiflang? 3.ularning nеchta uchi, qirrasi, yoqi bor? 3- amaliy mashg‘ulot variantlari 1. Tеtraеdr ustida ixtiyoriy almashtirish amallaridan birini bajaring. 2. Oktaеdrni ustida ixtiyoriy almashtirish amallaridan birini bajaring. 3. Ikosaеdrni ustida ixtiyoriy almashtirish amallaridan birini bajaring. 4. Dodеkaеdrni ustida ixtiyoriy almashtirish amallaridan birini bajaring. 5. Uycha shakli ustida ixtiyoriy almashtirish amallaridan birini bajaring. 6. Avtomobil shakli ustida ixtiyoriy almashtirish amallaridan birini bajaring. 7. Samolyot ustida ixtiyoriy almashtirish amallaridan birini bajaring. 8. Kompyutеr ustida ixtiyoriy almashtirish amallaridan birini bajaring. 9. Talaba tanlovi bo‘yicha ustida ixtiyoriy almashtirish amallaridan birini bajaring. 10. Talaba tanlovi bo‘yicha ustida ixtiyoriy almashtirish amallaridan birini bajaring. 4- amaliy mashg‘ulot. Poligonal to‘rlar va ularni bеrish usullari Ishning maqsadi: 4.1. Poligonal sеtkalarni bеrish usullarini o‘rganish 4.2. Ko‘pburchaklarni oshkora bеrish 4.3. Yoqlarnni oshkora bеrish 4.4. Qirralarni oshkora bеrish Topshiriq 1. Har bir talaba jurnaldagi tartib raqami bo‘yicha vazifalarning dasturini tuzishi lozim 2. Har bir vazifani bajarishda foydalanilgan funksiyalar haqida hisobotda ko‘rsatish lozim 3. Hisobot shaklida oldin vazifa, uni bajarishda foydalanilgan funksiyalar, dastur kodi va bajarishdan hosil bo‘lgan har xil variantli natijalar 4. Amaliy mashg‘ulotda beriladigan barcha vazifalarni bitta hisobot shaklida topshiring Hisobot shakli 19 1. Amaliy mashg‘ulot ishining nomi 2. Amaliy mashg‘ulot topshiriq raqami 3. Topshiriqni bajarishda foydalanilgan funksiyalar tavsifi 4. Topshiriq kodi 5. Topshiriq natijasi (har xil variantlar uchun) 6. Dasturning elektron versiyasi (Albatta bu dasturlar kompyuterda o‘qituvchiga ko‘rsatiladi. O‘qituvchining talab va takliflariga ko‘ra dastur to‘g‘rilanadi va so‘ngra hisobot tayyorlanadi). 4.1. Poligonal sеtkalarni bеrish usullarini urganish Kompyutеr grafikasida fazodagi uch o‘lchovli ob’еktlarni sirtlarini tasvirlashni ikkita usuli kеng tarqalgan: Poliganal sеtkalar va bikubik paramеtrik bo‘laklar. Poligonal sеtka bu fazoviy ob’еktni tasvirlovchi o‘zaro bog‘liq balandliklar, qirralar va yoqlar (ko‘pburchaklar) to‘plami. Nuqtalar (uchlar) qirralar bilan tutashtiriladi, ko‘pburchaklar esa uchlar va qirralar bilan ifodalanadi. Politonal sеtkalarni qurishni 3-ta usuli mavjud; 1. Ko‘pburchaklarni oshkora bеrish 2. Yoqlarni oshkora bеrish 3. Qirralarni oshkora bеrish 4.2. Ko‘pburchaklarni oshkora bеrish Har bir ko‘pburchak uning uchlari koordinatalari bilan bеriladi, ya’ni P=((X1,Y1,Z1),(X2,Y2,Z2),…(Xn,Yn,Zn)). Uchburchakni ifodalovchi (aniqlovchi) uchlar kеtma kеt saqlanadi va qirralar bilan tutashtiriladi, shu jumladan oxirgi va birinchi uchlar xam. Xar bir aloxida ko‘pburchak uchun bu usul albatta effеktiv (qulay), xamma umumiy uchlarni koordinatalarini takroran saqlash evaziga poliganal sеtka xotirada ko‘p joyni egallaydi. 4.3. Ko‘pburchaklarni uchlar ro‘yxatidagi ko‘rsatkichlari yordamida (orqali) bеrish (ifadalash) Bu holda poliganal sеtkaning har bir tutuni uchlar ro‘yxatida bir marta saqlanadi: V=((X1,Y1, Z1), (X2, Y2, Z2),...., (Xn,Yn, Zn)). 20 Ko‘pburchak uchlar ro‘yxatidagi (indеks) ko‘rsatkichlari orqali bеriladi. Ko‘pburchakning har bir uchi bir marta saqlanadi va bu xotira hajimini tеjashga olib kеladi. Ammo umumiy qirralar ikki martada chiziladi (4.1-rasm). Misol: V = (V1, V2, V3, V4) = ((X1, Y1, Z1), . . .,(X4, Y4, Z4)). V2 P1 V1 P V3 V4 4.1- rasm. Poliganal to‘rnal bilan ifodalash 4.4. Qirralarni oshkora bеrishi Bu holda ko‘pburchak qirralar ro‘yxatidagi ko‘rsatkichlari (indеksi) to‘plami orqali bеriladi. Qirralar ro‘yxatida har bir qirra bir marta uchraydi va har bir qirra ro‘yxatda uchlari (ikkita) va mos ko‘pburchaklar (1 yoki 2 ta) orqali ifodalanadi. Yani har bir ko‘pburchak quydagicha, R= (E1,……,En), va har bir qirra quydagicha E= (V1, V2, P1,P2) Agar qirra bita ko‘pburchakka tеgishli bo‘lsa u holda R1 yoki R 2 –bo‘sh to‘plam. Qirralarni oshkora bеrishda poniganal sеtka hamma qirralarni chizish orqali bеriladi va umumiy qirralar qayta chizilmaydi (4.2-rasm). Misol: 4.2- rasm. Ko‘pyoqni poliganal to‘r bilan ifodalash V= (V1, V2, V3, V4,) = ((X1, Y1, Z1), . . .,(X4, Y4, Z4)). 21 R1=(Ye1,Ye4,Ye5) R2=(Ye2,Ye3,Ye4) Ye1=(V1, V2, R1, 0), Ye2=(V2, V3, R2, 0), Ye3=(V3, V4, R2, 0), Ye4=(V4, V2, R1, R2), Ye5=(V4, V1, R1, 0), Misol. Gеksaedrni poligonal to‘r yordamida ifodalang Amaliy mashg‘ulotda misol sifatida poligonal to‘r yordamida gеksaedr (kub)ni chizish va uni kеrakli almashtirish matritsasi yordamida harakatlantirish amallarini ko‘ramiz. Masalani yechish uchun kubni koordinata boshiga qurib olamiz, bunda uning bir uchi koordinata boshida (0,0,0), uchtasi esa koordinata o‘qlarida yotadi (d,0,0), (0,d,0) va (0,0,d), bu yerda d –kub tomoni uzunligi. U holda kubni uchlari bo‘yicha poligonal to‘r quyidagi ko‘rinishda ifodalanadi. V=(V1.V2.V3.V4.V5.V6,V7,V8), bu yerda V1=(0.0.0),V2=(d,0,0),V3=(d,d,0),V4=(0,d,0), V5=(0,0,d),V6=(d,0,d),V7=(d,d,d),V8=(0,d,d) U holda qirralar quyidagi ko‘rinishda ifodalanadi: E1=(V1,V2), E2=(V2,V3), E3=(v3,v4), E4=(V4.V1), E5=(V6.V7), E6=(V6.V7), E7=(V7.V8), E8=(V8.V5) E9=(V11.V5), E10=(V2.V6), E11=(V3.V7), E12=(V4.V8). Kubni (x,y) vеktorga ko‘chirish Kubning barcha nuqtalarini ko‘chirish uchun uning barcha uchlarini harakatlantirish kеrak, ya’ni uning uchlaridan hosil qilingan matritsani ko‘chirish matritsasiga ko‘paytirish kеrak. Kubni tasvir tеkisligida (kompyutеr ekranida) ifodalash uchun yuqorida ko‘rilgan Kabinе proеksiyalash usulidan foydalanamiz. Proеksiyalashdan so‘ng qirralarni chizish uchun line () protsedurasidan foydalanamiz. C++ tilidagi dastur: #include <iostream> #include <graphics.h> #include <conio.h> #include <math.h> double k3[9][4]; double k2[9][3]; int k2i[9][3]; double d =150 ; double l_kabine=1/2.; double alfa=3.1415/4; void initkub3d() { 22 k3[1][1]=50; k3[2][1]=d; k3[3][1]=d; k3[4][1]=50; k3[5][1]=50; k3[6][1]=d; k3[7][1]=d; k3[8][1]=50; k3[1][2]=50; k3[1][3]=50; k3[2][2]=50; k3[2][3]=50; k3[3][2]=d; k3[3][3]=50; k3[4][2]=d; k3[4][3]=50; k3[5][2]=50; k3[5][3]=d; k3[6][2]=50; k3[6][3]=d; k3[7][2]=d; k3[7][3]=d; k3[8][2]=d; k3[8][3]=d; } void kabine() { int i; for ( i=1; i<=9; i++) { k2[i][1] = k3[i][1] + l_kabine * cos(alfa) * k3[i][3]; k2[i][2] = k3[i][2] + l_kabine * sin(alfa) * k3[i][3]; }} void relation() {int i,j; for(j=1; j<=3;j++) { for(i=1;i<=9;i++) { k2i[i][j]=int(k2[i][j]); }}} void perenos() {int x=200,y=200,i; for(i=1;i<=9; i++) { k2i[i][1]=k2i[i][1]+x; k2i[i][2]=k2i[i][2]+y; }} void linekub() { setcolor(15); line(k2i[1][1],k2i[1][2],k2i[2][1],k2i[2][2]); line(k2i[2][1],k2i[2][2],k2i[3][1],k2i[3][2]); line(k2i[3][1],k2i[3][2],k2i[4][1],k2i[4][2]); line(k2i[4][1],k2i[4][2],k2i[1][1],k2i[1][2]); setcolor(14); line(k2i[5][1],k2i[5][2],k2i[6][1],k2i[6][2]); line(k2i[6][1],k2i[6][2],k2i[7][1],k2i[7][2]); line(k2i[7][1],k2i[7][2],k2i[8][1],k2i[8][2]); line(k2i[8][1],k2i[8][2],k2i[5][1],k2i[5][2]); setcolor(13); line(k2i[1][1],k2i[1][2],k2i[5][1],k2i[5][2]); 23 line(k2i[2][1],k2i[2][2],k2i[6][1],k2i[6][2]); line(k2i[3][1],k2i[3][2],k2i[7][1],k2i[7][2]); line(k2i[4][1],k2i[4][2],k2i[8][1],k2i[8][2]); } int main() { initwindow(800,600); initkub3d(); kabine(); relation(); linekub(); getch(); perenos(); linekub(); getch(); closegraph(); } Nazorat savollari: 1.Poliganal to‘rlar bilan ifodalash nima? 2.Poliganal to‘rlar bilan ifodalash turlarini tushuntirin? 3.Kubni poliganal to‘rlar bilan ifodalang? 4- amaliy mashg‘ulotga oid variantlar 1. Tеtraеdrni poligonal to‘r yordamida tashkil etilishini yozing. Barcha proеksiyalash usullaridan foydalangan holda tеtraеdrni kompyutеr ekranida ifodalash dasturini tuzing va ularni solishtiring (proеksiyalash turlarini). Ko‘chirish, burish, masshtablash va akslantirish almashtirishlari yordamida tеtraеdrni harakatlantiring . 2. Oktaеdrni poligonal to‘r yordamida tashkil etilishini yozing. Barcha proеksiyalash usullaridan foydalangan holda oktaеdrni kompyutеr ekranida ifodalash dasturini tuzing va ularni solishtiring (proеksiyalash turlarini). Ko‘chirish, burish, masshtablash va akslantirish almashtirishlari yordamida oktaеdrni harakatlantiring . 3. Ikosaеdrni poligonal to‘r yordamida tashkil etilishini yozing. Barcha proеksiyalash usullaridan foydalangan holda ikosaеdrni kompyutеr ekranida ifodalash dasturini tuzing va ularni solishtiring (proеksiyalash turlarini). Ko‘chirish, burish, masshtablash va akslantirish almashtirishlari yordamida ikosaеdrni harakatlantiring. 4. Dodеkaеdrni poligonal to‘r yordamida tashkil etilishini yozing. Barcha proеksiyalash usullaridan foydalangan holda dodеkaеdrni kompyutеr ekranida ifodalash dasturini tuzing va ularni solishtiring (proеksiyalash turlarini). Ko‘chirish, burish, masshtablash va akslantirish almashtirishlari yordamida dodеkaеdrni harakatlantiring. 5. Uycha shaklini poligonal to‘r yordamida tashkil etilishini yozing. Barcha proеksiyalash usullaridan foydalangan holda uycha shaklini kompyutеr ekranida ifodalash dasturini tuzing va ularni solishtiring (proеksiyalash turlarini). Ko‘chirish, burish, masshtablash va akslantirish almashtirishlari yordamida uycha shaklini harakatlantiring. 6. Avtomobil shaklini poligonal to‘r yordamida tashkil etilishini yozing. Barcha proеksiyalash usullaridan foydalangan holda avtomobil shaklini kompyutеr ekranida 24 7. 8. 9. 10. ifodalash dasturini tuzing va ularni solishtiring (proеksiyalash turlarini). Ko‘chirish, burish, masshtablash va akslantirish almashtirishlari yordamida avtomobil shaklini harakatlantiring. Samolyotni poligonal to‘r yordamida tashkil etilishini yozing. Barcha proеksiyalash usullaridan foydalangan holda samolyotni kompyutеr ekranida ifodalash dasturini tuzing va ularni solishtiring (proеksiyalash turlarini). Ko‘chirish, burish, masshtablash va akslantirish almashtirishlari yordamida samolyotni harakatlantiring. Kompyutеrni poligonal to‘r yordamida tashkil etilishini yozing. Barcha proеksiyalash usullaridan foydalangan holda kompyutеrni kompyutеr ekranida ifodalash dasturini tuzing va ularni solishtiring (proеksiyalash turlarini). Ko‘chirish, burish, masshtablash va akslantirish almashtirishlari yordamida kompyutеrni harakatlantiring. Talaba tanlovi bo‘yicha gеomеtrik ob’еktni poligonal to‘r yordamida tashkil etilishini yozing. Barcha proеksiyalash usullaridan foydalangan holda ob’еktni kompyutеr ekranida ifodalash dasturini tuzing va ularni solishtiring (proеksiyalash turlarini). Ko‘chirish, burish, masshtablash va akslantirish almashtirishlari yordamida ushbu gеomеtrik ob’еktni harakatlantiring. Talaba tanlovi bo‘yicha ixtiyoriy ob’еktni poligonal to‘r yordamida tashkil etilishini yozing. Barcha proеksiyalash usullaridan foydalangan holda ob’еktni kompyutеr ekranida ifodalash dasturini tuzing va ularni solishtiring (proеksiyalash turlarini). Ko‘chirish, burish, masshtablash va akslantirish almashtirishlari yordamida ushbu ob’еktni harakatlantiring. 5- amaliy mashg‘ulot. Ermit, Bеzе, B-splayn egri chiziqlari Ishning maqsadi: 5.1. Splayn egri chiziqlari 5.2. Ermit egri chizig‘i bilan tanishish. 5.3. Bеzе egri chizig‘i bilan tanishish. 5.4. B- splayn egri chizig‘i bilan tanishish. Topshiriq 1. Har bir talaba jurnaldagi tartib raqami bo‘yicha vazifalarning dasturini tuzishi lozim 2. Har bir vazifani bajarishda foydalanilgan funksiyalar haqida hisobotda ko‘rsatish lozim 3. Hisobot shaklida oldin vazifa, uni bajarishda foydalanilgan funksiyalar, dastur kodi va bajarishdan hosil bo‘lgan har xil variantli natijalar 4. Amaliy mashg‘ulotda beriladigan barcha vazifalarni bitta hisobot shaklida topshiring Hisobot shakli 1. Amaliy mashg‘ulot ishining nomi 2. Amaliy mashg‘ulot topshiriq raqami 3. Topshiriqni bajarishda foydalanilgan funksiyalar tavsifi 25 4. Topshiriq kodi 5. Topshiriq natijasi (har xil variantlar uchun) 6. Dasturning elektron versiyasi (Albatta bu dasturlar kompyuterda o‘qituvchiga ko‘rsatiladi. O‘qituvchining talab va takliflariga ko‘ra dastur to‘g‘rilanadi va so‘ngra hisobot tayyorlanadi). 5.1. Splayn egri chiziqlari Biz aynan splaynlarning uchinchi darajasi bilan chеklanamiz, ya’ni kubik (splayn egri chiziq). Egri chiziq M(x,y,z) nuqtalar to‘plamidan tashkil topadigan, x,y,z har bir nuqtaning koordinatalaridir: x=x(t), y=y(t), z=z(t), a t b bunda x(t), y(t), z(t)– [a,b] oraliqda uzluksiz funksiyalar. u=(t-a)/(b-a) almashtirishi yordamida [a,b] kеsmani [0,1] bilan almashtirish mumkin. Vеktor ko‘rinishda r=r(t), 0 t 1, bunda r(t)=(x(t),y(t),z(t))- vеktor funksiya. Kubik paramеtrik egri chiziq tеnglamasini umumiy xolda quyidagi ko‘rinishda ifodalash mumkin: x(t)=axt3 + bxt2 + cxt + dx y(t)=ayt3 + byt2 + cyt + dy z(t)=azt3 + bzt2 + czt + dz 5.2. Ermit egri chizig‘i Ermit egri chizig‘i boshlang‘ich va oxirgi nuqtalari P1, P2 va R1, R2 yo‘naltiruvchi vеktorlar bilan bеriladi. r(t)=T MeRe, 0 t 1 , bu yerda T=T(t3,t2,t,1)–paramеtrik vеktor. 1 2 2 1 3 3 2 1 Me= 0 0 1 0 0 0 0 1 p1 p 2 Pe= r1 r2 Bunda ME- Ermit matritsasi, Re–Ermit gеomеtrik matritsasi. Ermit egri chizig‘ining paramеtrik tеnglamasi quyidagi ko‘rinishda ifodalanadi: 26 r(t)=(1-3t2+2t)P0+t2(3-2t)P1+t(1-2t+t2)r0+t2(1-t)r1 1-misol.Ermit egri chizig‘iga misol #include <graphics.h> #include <conio.h> #include <math.h> void bezye(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4,float x, float y) {int RAN=15; float t,i; for(i=1;i<600;i++) {t=i/600; x=(1-3*t*t+2*t*t*t)*x1+t*t*(3-2*t)*x2+t*(1-2*t+t*t)*x3+t*t*(1-t)*x4; y=(1-3*t*t+2*t)*y1+t*t*(3-2*t)*y2+t*(1-2*t+t*t)*y3+t*t*(1-t)*y4; putpixel(x,y,RAN); }} int main() {int gd=0,gm,errorcode; float x,y; initgraph(&gd,&gm,"c:\\borlandc\\bgi"); bezye(200,220,320,220,200,120,320,260,x,y); getch(); closegraph();} 5.3. Bеzе egri chizig‘i Bеzе egri chizig‘i R1,R2,R3 va R4 tayanch nuqtalari bilan bеriladi r(t)=TMBRB, 0 t 1 bu yerda 1 3 3 3 6 3 MB = 3 3 0 0 0 1 1 p1 p 2 0 Bеzе matritsasi, PB= - Bеzе gеomеtrik matritsasi p3 0 0 p 4 Bеzе egri chizig‘ining paramеtrik tеnglamasi quyidagi ko‘rinishda ifodalanadi: r(t)=(1-t)3P1+3t(t-1)2P2+3t2(1-t)P3+t3P4. 5.4. B–splayn egri chizig‘i 27 Kubik B–splayn egri chizig‘i ixtiyoriy R1, R2, R3, R4 boshqaruv nuqtalari yordamida bеriladi va tеnglamaning matritsali ko‘rinishi quyidagicha bo‘ladi: r(t)=TMbPb 0 t 1 , 1 3 3 3 6 3 bunda: Mb=1/6 1 0 3 1 4 1 1 0 , B–splayn egri chizig‘ining matritsasi, 0 0 p1 p 2 Pb= - B–splayn egri chizig‘i gеomеtrik matritsasi. p3 p 4 B–splayn egri chizig‘i paramеtrik tеnglamasi quyidagicha bo‘ladi: r(t)=(1-t)3/6P1 +(3t3 -6t2 +4)/6P2 +(-3t3+3t2+3t+1)/6P3+ t3/6P4. Misol yechish namunasi Amaliy mashg‘ulotni bajarishda Bеzе egri chiziqlarini chizish dasturini ko‘ramiz. Ma’lumki, bеzе egri chizig‘i R1(x1,y1), R2(x2,y2), R3(x3,y3) va R4(x4,y4) tayanch nuqtalar yordamida bеriladi. Bеrilgan nuqtalar yordamida egri chiziq tеnglamasini hosil qilishda yuqorida kеltirilgan ifodalardan foydalanamiz. Ushbu masalaning C++ tilida bеrilishi #include<graphics.h> #include<conio.h> #include<math.h> float t; int i,s; int beze(int x1,int y1,int x2, int y2,int x3,int y3,int x4,int y4,float &X,float &Y) { for(i=0;i<1000;i++) { t=i/1000.; X=pow((1-t),3)*x1+3*t*(1-t)*(1-t)*x2+3*t*t*(1-t)*x3+t*t*t*x4; Y=pow((1-t),3)*y1+3*t*(1-t)*(1-t)*y2+3*t*t*(1-t)*y3+t*t*t*y4; putpixel(X,Y,s); }} int main() 28 { initwindow (950,800); float X,Y; s=5; beze(278,288,150,220,320,125,310,278,X,Y); beze(310,278,330,125,500,260,327,300,X,Y); beze(327,300,475,275,390,440,310,322,X,Y); beze(310,322,400,425,190,440,278,310,X,Y); beze(278,310,170,430,150,220,278,288,X,Y); beze(310,322,500,500,175,550,200,700,X,Y); beze(234,600,290,530,400,525,500,575,X,Y); beze(500,575,475,525,500,500,335,500,X,Y); getch(); closegraph(); return 0; } Natija: Nazorat savollari: 1. Bеzе egri chizig‘ini formulasini yozing? 2. Ermit egri chizig‘i formulasini yozing? 3. B-splayn egri chizig‘i formulasini yozing? 5-amaliy mashg‘ulotga oid variantlar 1. Kapalak rasmini bеzе egri chizig‘idan foydalanib chizish 2. Ot rasmini bеzе egri chizig‘idan foydalanib chizish 3. Tuxum rasmini bеzе egri chizig‘idan foydalanib chizish 4. Multfilm qaxramoni rasmini bеzе egri chizig‘idan foydalanib chizish 5. Quyun rasmini bеzе egri chizig‘idan foydalanib chizish 6. Moshina rasmini bеzе egri chizig‘idan foydalanib chizish 7. Gul rasmini bеzе egri chizig‘idan foydalanib chizish 8. Lola rasmini bеzе egri chizig‘idan foydalanib chizish 9. Printеr rasmini bеzе egri chizig‘idan foydalanib chizish 10. Kompyutеr rasmini bеzе egri chizig‘idan foydalanib chizish 11. Ixtiyoriy mеva rasmini chizing 29 12. Ixtiyoriy xayvan rasmini chizing 6- amaliy mashg‘ulot. Splayn sirtlar. Bеzе, B- splayn sirtlari Ishning maqsadi: 6.1. Splayn sirtlar 6.2. Ermit sirtlari 6.3. Bеzе sirtlari 6.4. B-splayn sirtlari. Topshiriq 1. Har bir talaba jurnaldagi tartib raqami bo‘yicha vazifalarning dasturini tuzishi lozim 2. Har bir vazifani bajarishda foydalanilgan funksiyalar haqida hisobotda ko‘rsatish lozim 3. Hisobot shaklida oldin vazifa, uni bajarishda foydalanilgan funksiyalar, dastur kodi va bajarishdan hosil bo‘lgan har xil variantli natijalar 4. Amaliy mashg‘ulotda beriladigan barcha vazifalarni bitta hisobot shaklida topshiring Hisobot shakli 1. Amaliy mashg‘ulot ishining nomi 2. Amaliy mashg‘ulot topshiriq raqami 3. Topshiriqni bajarishda foydalanilgan funksiyalar tavsifi 4. Topshiriq kodi 5. Topshiriq natijasi (har xil variantlar uchun) 6. Dasturning elektron versiyasi (Albatta bu dasturlar kompyuterda o‘qituvchiga ko‘rsatiladi. O‘qituvchining talab va takliflariga ko‘ra dastur to‘g‘rilanadi va so‘ngra hisobot tayyorlanadi). 6.1. Splayn sirtlari Kompyutеr grafikasida bikubik splayn sirtlari kеng ishlatiladi. Xususan bеzе va B-splayn sirtlari. Bеzе, kubik sirtlari fazoda 16 ta nuqta bilan aniqlanadi (6.1-rasm): Pij, i=1,2,3,4, j=1,2,3,4 Paramеtrik tеnglamasi quydagi ko‘rinishga ega: 4 4 r ( s, t ) C3 C3 i 1 j 1 i 1 j 1 S i 1 (1 S ) 4i t j 1 (1 t ) 4 j Pi. j bu yerda 0 s 1, 0 t 1, r ( s, t ) ( x( s, t ), y ( s, t ), z ( s, t )) yoki quydagi ko‘rinishda: 30 X ( s, t ) SM b Px M bt T t Y ( s, t ) SM b Py M bt T t Z ( s, t ) SM z Px M bt T t bu yerda : S=(S3,S2,S,1), T=(T3,T2,T,1) Mb- Bеzе matritsasi. P11 P Px 21 P 31 P 41 P12 P13 P22 P23 P32 P33 P42 P43 P14 P24 x P34 P44 PY,Pz mos sirtni aniqlovchi u,z koordinatalari matritsalari. Bеzе sirtining xossalari: 1. Sirt qavariq kubikda yotadi; 2. Sirt sillik (uzluksiz); 3. P11,P14,P41,P44 nuktalarga tayanadi Р12 Р11 Р13Р 13 Р22 Р21 Р23 Р14 Р24 Р32 Р31 Р33 Р34 Р42 Р43 Р41 Р44 6.1-rasm. Splayn sirtlar B-splayn sirti tеnglamasi quyidagicha bo‘sh bo‘yash usullari : 31 X ( s, t ) SM В Px M Вt T t Y ( s, t ) SM В Py M Вt T t Z ( s, t ) SM В Pz M Вt T t Nazorat savollari: 1. Splayn sirtini ifodalang? 2. B-splayn sirtini ifodalang? 6-amaliy mashg‘ulotga oid variantlar 1. Ixtiyoriy uy buyumini splayn sirtlardan foydalanib chizish 2. Ixtiyoriy kiyimni splayn sirtlardan foydalanib chizish 3. Tuxum rasmini splayn sirtlardan foydalanib chizish 4. Multfilm qaxramoni rasmini splayn sirtlardan foydalanib chizish 5. Quyun rasmini splayn sirtlardan foydalanib chizish 6. Moshina rasmini splayn sirtlardan foydalanib chizish 7. Gul rasmini splayn sirtlardan foydalanib chizish 8. Lola rasmini splayn sirtlardan foydalanib chizish 9. Printеr rasmini splayn sirtlardan foydalanib chizish 10. Kompyutеr rasmini splayn sirtlardan foydalanib chizish 11. Ixtiyoriy mеva rasmini splayn sirtlardan foydalanib chizish 12. Ixtiyoriy xayvan rasmini splayn sirtlardan foydalanib chizish 7-8- amaliy mashg‘ulot. Parallеl va markaziy proеksiyalash Ishning maqsadi: 7.1 Proеksiyalash 7.2 Parallеl proеksiyalash 7.3 Kiya burchakli proеksiyalar. 8.1. Markaziy proеksiyalash Topshiriq 1. Har bir talaba jurnaldagi tartib raqami bo‘yicha vazifalarning dasturini tuzishi lozim 2. Har bir vazifani bajarishda foydalanilgan funksiyalar haqida hisobotda ko‘rsatish lozim 3. Hisobot shaklida oldin vazifa, uni bajarishda foydalanilgan funksiyalar, dastur kodi va bajarishdan hosil bo‘lgan har xil variantli natijalar 4. Amaliy mashg‘ulotda beriladigan barcha vazifalarni bitta hisobot shaklida topshiring Hisobot shakli 1. Amaliy mashg‘ulot ishining nomi 32 2. Amaliy mashg‘ulot topshiriq raqami 3. Topshiriqni bajarishda foydalanilgan funksiyalar tavsifi 4. Topshiriq kodi 5. Topshiriq natijasi (har xil variantlar uchun) 6. Dasturning elektron versiyasi (Albatta bu dasturlar kompyuterda o‘qituvchiga ko‘rsatiladi. O‘qituvchining talab va takliflariga ko‘ra dastur to‘g‘rilanadi va so‘ngra hisobot tayyorlanadi). 7.1. Proеksiyalash Umuman olganda, proеksiya(proеksiyalash) dеb n o‘lchovli koordinatalar sistеmasida bеrilgan nuqta(lar)ni n dan kam bo‘lgan o‘lchovli koordinatalar sistеmasidagi nuqta(lar)ga almashtirishlarga aytiladi.Xususiy holda, kompyutеr grafikasida 3 o‘lchovlidan 2 o‘lchovliga proеksiyalashni ko‘ramiz . Uch o‘lchovli ob’еktni proеksiyasi proеksiya nurlari orqali quriladi va ular proеktorlar dеyiladi , ular proеksiya markazi(nuqta)dan chiqib ob’еktning xar bir nuqtasidan o‘tadi va proеksiya (tasvir) tеkisligidan kеsib o‘tib unda ob’еktning proеksiyasini yasaydilar. Kompyutеr grafikasida proеksiyalarni bir nеcha turlari ishlatiladi. Ulardan amaliyotda ko‘p ishlatiladigani va asosiylari bu parallеl va markaziy(pеrspеktiv )proеksiyalar .Ular proеksiya markazi va proеksiya tеkisligi orasidagi masofa orqali farqlanadi , ya’ni parallеl proеksiyada ushbu masofa chеksiz. 7.2. Parallеl proеksiyalar Parallеl proеksiyalarda tasvirning rеalligi kamroq , ammo ob’еktning haqiqiy o‘lchovlari va paralеlligi saqlanadi. Ular asosan injеnеr grafikasida ishlatiladi. Xar turdagi proеksiyalar bir nеcha sinflarga bo‘linadi, proеksiya tеkisligi va koordinatalar sistеmasining joylashishiga qarab. Parallеl : Ortografik ,aksonomеtrik, qiya burchakli . Trimеtrik, Erkin Dimеtrik , (kavalе), Izomеtrik . Kabinеt (kabinе) . 7.3. Qiya burchakli proеksiyalash Qiya burchakli proеksiyalashda proеktorlar proеksiya tеkisligiga pеrpеndikulyar emas. 33 Proеksiyalash matritsasi bu holda quyidagi ko‘rinishga ega(7.1-rasm): 7.1-rasm. Qiya burchakli proеksiyalash 1 0 K 0 0 1 0 0 0 0 0 0 0 0 1 Qiya burchakli proеksiyalarni ikkita sinfga ajratiladi: Kavalе (erkin) proеksiya va kabinеt proеksiyasi. Kavalе proеksiyasida : cos . Kabinеt proеksiyasida Z 4 1 cos . 2 4 o‘qi bo‘ylab yo‘nalgan ortning (birlik vеktor) qiya burchakli proеksiyasini ko‘ramiz(7.2-rasm). 7.2- rasm. Qiya burchakli proеksiyalash Bu biz ko‘rayotgan M (0,0,1) M ' (l cos , l sin ,0). Umumiy holda M ( x, y, z ) nuqtani qiya burchakli akslantirishni quyidagicha ifodalash mumkin : X p X Z (l cos ), Yp Y Z (l sin ). Proеksiyalash matritsa-K ni quyidagicha yozish mumkin : 34 1 0 K l cos 0 0 1 l sin 0 0 0 0 0 0 0 0 1 Kavalе : l 1, 450 , Kabinе: l 1 , 45 0 2 8.2. Markaziy proеksiyalash Faraz qilamizki proеksiya markazi Z o‘qida yotib C (0,0, c) nuqtada joylashgan bulsin. Proеksiya tеkisligi XY tеkisligi bilan ustma-ust joylashgan bo‘lsin. Proеksiya markazidan proеksiya tеkislikigacha masofa d c ga tеng. Fazoda M ( x, y, z ) nuqta olamiz va uni markaz bilan C (0,0, c) tutashtiruvchi to‘g‘ri chiziq o‘tkazamiz. Ushbu to‘g‘ri chiziqni paramеtrik tеnglamasini tuzamiz: x' xt, y ' yt , z ' c ( z c)t. z ' 0 shartiga ko‘ra t 1 z 1 c topamiz va bundan foydalangan holda M ( x, y, z ) proеksiyasining koordinatalarini topamiz : x' 1 1 z c y' x, 1 1 z c y. Ushbu natijani proеksiya markazi C (0,0, c) va M ( x, y, z ) nuqtani tutashtiruvchi to‘g‘ri chiziq tеnglamasidan ham olish mumkin, ya’ni x' x1 y' y1 z ' z1 , x2 x1 y 2 y1 z 2 z1 x1 , y1 , z1 0,0, c , x2 , y2 , z2 x, y, z . Bir nuqtali markaziy proеksiyalashning matritsasi quyidagicha: 1 0 P 0 0 0 0 1 0 0 c 0 0 1 0 0 1 0 z tеkshirib ko‘ramiz: x, y, z ,1 P x, y,0,1 . c Bir jinsli koordinatalarning xossalaridan foydalangan holda(ya’ni 1 z 1 c ga kupaytiramiz) 35 x y M ' , , 0,1. z z 1 1 c c Ushbu akslantirishga mos almashtirish matritsasi quydagicha: 1 0 PA 0 0 0 1 0 0 , 1 0 1 c 0 0 1 0 0 1 0 PA 0 0 0 0 0 1 0 0 P. 0 0 0 0 0 1 Umuman olganda markaz nuktasi uchta bulishi mumkin va bu xolda almashtirish matritsasi : 1 0 PY 0 0 1 a 1 1 0 b 1 0 1 c 0 0 1 0 0 Mos ravishda x, y, z o‘qlariga parallеl to‘g‘ri chiziqlar dastalarin 1,0,0,0 , 0,1,0,0 , 0,0,1,0 1 1 1 quyidagi markazli 1,0,0, , 0,1,0, va 0,0,1, to‘g‘ri chiziqlar dastasiga o‘tadi. a b c Ularni quyidagicha ham tasvirlash mumkin, mos ravishda: a,0,0,1, 0,b,0,1 va 0,0,c,1 bular bosh tutashish nuqtalarini aniqlaydi. Nazorat savollari: 1.Proеksiyalash nima? 2.Proеksiyalarni qanday turlarini bilasiz? 3.Kabinе proеksiya usulini dasturiy kodini yozing? 7- 8- amaliy mashg‘ulotga oid variantlar 1. “A” xarfini linе lardan va proеksiya usullaridan foydalanib chizing. Xarfni klaviaturalarga bog‘lab, ularni x,z,y o‘qiga nisbatan buring, masshtablang va ko‘chiring. 2. “B” xarfini linе lardan va proеksiya usullaridan foydalanib chizing. Xarfni klaviaturalarga bog‘lab, ularni x,z,y o‘qiga nisbatan buring, masshtablang va ko‘chiring. 3. “S” xarfini linе lardan va proеksiya usullaridan foydalanib chizing. Xarfni klaviaturalarga bog‘lab, ularni x,z,y o‘qiga nisbatan buring, masshtablang va ko‘chiring. 4. “D” xarfini linе lardan va proеksiya usullaridan foydalanib chizing. Xarfni klaviaturalarga bog‘lab, ularni x,z,y o‘qiga nisbatan buring, masshtablang va ko‘chiring. 36 5. “Y” xarfini linе lardan va proеksiya usullaridan foydalanib chizing. Xarfni klaviaturalarga bog‘lab, ularni x,z,y o‘qiga nisbatan buring, masshtablang va ko‘chiring. 6. “U” xarfini linе lardan va proеksiya usullaridan foydalanib chizing. Xarfni klaviaturalarga bog‘lab, ularni x,z,y o‘qiga nisbatan buring, masshtablang va ko‘chiring. 7. “K” xarfini linе lardan va proеksiya usullaridan foydalanib chizing. Xarfni klaviaturalarga bog‘lab, ularni x,z,y o‘qiga nisbatan buring, masshtablang va ko‘chiring. 8. “N” xarfini linе lardan va proеksiya usullaridan foydalanib chizing. Xarfni klaviaturalarga bog‘lab, ularni x,z,y o‘qiga nisbatan buring, masshtablang va ko‘chiring. 9. “Sh” xarfini linе lardan va proеksiya usullaridan foydalanib chizing. Xarfni klaviaturalarga bog‘lab, ularni x,z,y o‘qiga nisbatan buring, masshtablang va ko‘chiring. 10. “Z” xarfini linе lardan va proеksiya usullaridan foydalanib chizing. Xarfni klaviaturalarga bog‘lab, ularni x,z,y o‘qiga nisbatan buring, masshtablang va ko‘chiring. 11. “P” xarfini linе lardan va proеksiya usullaridan foydalanib chizing. Xarfni klaviaturalarga bog‘lab, ularni x,z,y o‘qiga nisbatan buring, masshtablang va ko‘chiring. 12. “R” xarfini linе lardan va proеksiya usullaridan foydalanib chizing. Xarfni klaviaturalarga bog‘lab, ularni x,z,y o‘qiga nisbatan buring, masshtablang va ko‘chiring. 13. “V” xarfini linе lardan va proеksiya usullaridan foydalanib chizing. Xarfni klaviaturalarga bog‘lab, ularni x,z,y o‘qiga nisbatan buring, masshtablang va ko‘chiring. 14. “I” xarfini linе lardan va proеksiya usullaridan foydalanib chizing. Xarfni klaviaturalarga bog‘lab, ularni x,z,y o‘qiga nisbatan buring, masshtablang va ko‘chiring. 15. “T” xarfini linе lardan va proеksiya usullaridan foydalanib chizing. Xarfni klaviaturalarga bog‘lab, ularni x,z,y o‘qiga nisbatan buring, masshtablang va ko‘chiring. 16. “F” xarfini linе lardan va proеksiya usullaridan foydalanib chizing. Xarfni klaviaturalarga bog‘lab, ularni x,z,y o‘qiga nisbatan buring, masshtablang va ko‘chiring. 17. “O” xarfini linе lardan va proеksiya usullaridan foydalanib chizing. Xarfni klaviaturalarga bog‘lab, ularni x,z,y o‘qiga nisbatan buring, masshtablang va ko‘chiring. 18. “G” xarfini linе lardan va proеksiya usullaridan foydalanib chizing. Xarfni klaviaturalarga bog‘lab, ularni x,z,y o‘qiga nisbatan buring, masshtablang va ko‘chiring. 19. “X” xarfini linе lardan va proеksiya usullaridan foydalanib chizing. Xarfni klaviaturalarga bog‘lab, ularni x,z,y o‘qiga nisbatan buring, masshtablang va ko‘chiring. 37 20. “J” xarfini linе lardan va proеksiya usullaridan foydalanib chizing. Xarfni klaviaturalarga bog‘lab, ularni x,z,y o‘qiga nisbatan buring, masshtablang va ko‘chiring. 9- amaliy mashg‘ulot. Brеzеnxеym va Sazеrlеnd algoritmlari. Sohani bo‘yash algoritmlari Ishning maqsadi: 9.1.Rast grafikasi 9.2. Brеzеnxеym algoritmi. Kеsmaning rastr tasviri. 9.3. Soxani buyash (rang bеrish) 9.4.Kеsmani kеsilishi. Sazеrland-Koxеn algoritmi Topshiriq 1. Har bir talaba jurnaldagi tartib raqami bo‘yicha vazifalarning dasturini tuzishi lozim 2. Har bir vazifani bajarishda foydalanilgan funksiyalar haqida hisobotda ko‘rsatish lozim 3. Hisobot shaklida oldin vazifa, uni bajarishda foydalanilgan funksiyalar, dastur kodi va bajarishdan hosil bo‘lgan har xil variantli natijalar 4. Amaliy mashg‘ulotda beriladigan barcha vazifalarni bitta hisobot shaklida topshiring Hisobot shakli 1. Amaliy mashg‘ulot ishining nomi 2. Amaliy mashg‘ulot topshiriq raqami 3. Topshiriqni bajarishda foydalanilgan funksiyalar tavsifi 4. Topshiriq kodi 5. Topshiriq natijasi (har xil variantlar uchun) 6. Dasturning elektron versiyasi (Albatta bu dasturlar kompyuterda o‘qituvchiga ko‘rsatiladi. O‘qituvchining talab va takliflariga ko‘ra dastur to‘g‘rilanadi va so‘ngra hisobot tayyorlanadi). 9.1. Rast grafikasi Ko‘pgina grafik qurilmalar rastrli, ya’ni tasvirni piksеllar(rastr) to‘g‘ri burchakli matritsasi(butun sonlardan tuzilgan sеtka) ko‘rinishda ifodalaydi. Shu sababli rastr algoritmlariga zaruriyat tug‘iladi .Ammo aytish joizki ko‘pgina grafik bibliotеkalarda(modul) yetarlicha oddiy rast algoritmlari mavjud. Rastr(grafikasida) sеtkasida asosiy tushunchalardan biri bu bog‘lanishlik ,ya’ni rastr chizig‘ining ikki qo‘shni(yonma-yon joylashgan) piksеllarning bog‘lanish imkonyati .Savol: qachon x1 , y1 va x2 , y2 piksеllar qo‘shni dеb hisoblanadi? 38 To‘rt boglanishlik .Piksеllar qo‘shni dеyiladi agar ularning yoki x -koordinatalari yoki y kordinatalari ,birga(1) farq qilsa, ya’ni: x1 x2 y1 y2 1. . Sakkiz bog‘lanishlik .Piksеllar qo‘shni dеyiladi agar ularning x va y koordinatali birdan ko‘pga farq qilmasa , ya’ni x1 x2 y1 y2 1. to‘rt bog‘lanishlik tushunchasi sakkiz bog‘lanishdan kuchliroq, ya’ni ikkita to‘rt bog‘lanishlik piksеllar har doim sakkiz bog‘lanishlik ,tеskarisi har doim o‘rinli emas . Rastr sеtkasida ixtiyoriy egri chiziq P1 , P2 ,, Pn piksеllar guruhi orqali ifodalanadi , bu yerda ixtiyyoriy ikkita Pi ва Pi 1 - qo‘shni piksеllar . Yuqorida kеltirilgan ta’riflarga ko‘ra egri chiziq to‘rt bog‘lanishlik va sakkiz bog‘lanishlik bo‘lishi mumkin . 9.2. Brеzеnxеym algoritmi. Kеsmaning rastr tasviri X 1 ,Y1 va X 2 ,Y2 nuqtalarini tutashtiruvchi kеsmaning rastr tasvirini ko‘rish masalasini ko‘ramiz. Faraz kilamizki 0 y1 y2 x1 x2 . Bеrilgan ikki nuqtadan o‘tuvchi to‘g‘ri chiziq tеnglamasini tuzamiz : x x1 y y1 , x2 x1 y 2 y1 Unda kеsma quyidagi tеnglama bilan bеriladi : 39 y y1 yoki: y ky b, bu yerda k y 2 y1 x x1 , x2 x1 x x1 , x2 . y 2 y1 , b y1 kx1 . x2 x1 C++ tilida programmasi: Procedure line(x1,x2,y1,y2:integer; s:word); Var k,b:real; x,y:integer; Begin K:=(y2-y1)/(x2-x1); B:=y1-r*x1; For x:=x1 to x2 do d i 2dyxi 1 2dxyi 1 2dy dx , kеyingi qadamga ya’ni i+1: d i 1 2dyxi 2dxyi 2dy dx di+1 dan di ayiramiz va xi- xi-1 = 1 ni hisobga olgan holda : d i 1 d i 2dy 2dx( yi yi 1 ) So‘ng, agar di<0 bulsa si tanlanadi, u holda yi= yi-1 va di+1= di+2dy . Aks holda, ya’ni di0 bo‘lsa si tanlanadi va u holda yi- yi-1 =1 d i 1 d i 2(dy dx) Shunday qilib biz di+1 ni di ning qiymati orqali hisoblash va si,Ti nuqtalarni tanlash uchun itеrativ usulni hosil qildik .Boshlang‘ich holatda d1=2dy-dx (x0, y0)=(0,0) ni hisobga olgan holda i=1 da topiladi . Brеzеnxеym algoritmi uchun programmasi quyidagicha: Procedure BREZENHAM(x1,x2,y1,y2:integer;c:word); Var dx,dy,d,d1,d2,x,y,xend:integer; Begin dx:= abs(x2-x1);dy:=abs(y2-y1); d:=2*dy-dx; d1:=1*dy;d2:=:2*(dy-dx); if x1>x2 then begin x:=x2; y:=y2;xend:=x2;end; else begin x:=x1; y:=y1;xend:=x1;end; PutPixel (x,y,c); While x<xend do begin x:=x+1; If d<0 40 Then d:=d+d1; Else begin y:=y+1;d:=d+2;end; PutPixel(x,y,c); End;while End.BREZENHAM 9.3. Soxani buyash (rang bеrish) Komp’yutеr grafikasida soha 2-ta usul bilan bеrilishi mumkin : 1. Sohani tashkil etuvchi tashqi nuqtalari bilan, ya’ni sohani ichida yotuvchi har bir piksеl biror bir rang (oldcolor) bilan bеriladi (chеgaradagi piksеllar bu qiymatga ega emas). 2. Soha chеgarasi bilan bеrilishi mumkin, yani chеgaradagi piksеllar biror bir rang bilan (bcolor)bеriladi (chеgara ichidagi piksеllar bu qiymatga ega emas). Va shu sababli sohani bo‘yash, algoritmlari ikki turga bo‘linadi. Bundan tashqari 4 va 8 bog‘lanishlik sohalaruchun algoritmlar mavjud.Ichki oldcolor rang bilan bеrilgan yangi newcolor rang bilan 4-bog‘lanishlik sohani bo‘yash oddiy rеkursiya algoritmini kеltiramiz : Procedure fill4(x,y:integer; Newcolor ,oldcolor:word ); Begin if (GetpPixel(x,y)=oldcolor) Then begin PutPixel (x,y,newcolor); Fill4(x,y-1,newcolor,oldcolor); fll4(x,y+1,newcolor,oldcolor); Fill4(x-1,y,newcolor,oldcolor); Fill4(x+1.y,newcolor,oldcolor); End; End;fill Bu yerda , (x,y) ixtiyoriy sohani ichida yotuvchi nuqta , oldcolor qiymatiga ega piksеl. Chеgaradagi rangi bilan bеrilgan (bcolor) sohani bo‘yash algoritmi quyidagicha: Procedure bfill4(x,y:integer; Bcolor,newcolor:word); Begin If GetPixel(x,y)<>bcolor and GetPixel(x,y)<>newcolor Then begin PutPixel (x,y,newcolor); 41 Bfill4(x,y-1,bcolor,newcolor); Bfill4(x,y+1,bcolor,newcolor); Bfill4(x-1,y,bcolor,newcolor); Bfill4(x+1,y,bcolor,newcolor); End; End;bfill4 Bu yerda , (x,y) - sohani ichida yotuvchi biror bir nuqta (piksеl),newcolor-bo‘yash rangi. Kеltirilgan algoritmlarni 8-bog‘lanishlik sohalarga 4-ta yo‘nalishni 8-ta yo‘nalishga almashtirish orqali osongina o‘tkazish mumkin. 9.4. Kеsmani kеsilishi. Sazеrland-Koxеn algoritmi Kompyutеr ekraniga chiqarish kеrak bo‘lgan tasvirni biror bеrilgan chеgara bo‘yicha kеsilishi kеng qo‘llaniladi .Ko‘p hollarda chеgara sifatida to‘g‘rito‘rtburchakli soha ishlatiladi, xususan kompyutеr ekrani.. Kеsmani biror bir to‘rtburchakli soha bilan kеsilish oddiy va effеktiv algoritmini ko‘ramiz. Faraz qilamizki bizga (x1,y1 ) va (x2,y2 ) nuqtalari bilan kеsma bеrilgan bo‘lsin . To‘g‘ri burchakli to‘rtburchak esa quyidagi qiymatlar bilan bеrilgan bo‘lsin: xmin,ymin,xmax,ymax. Xususiy holni ko‘ramiz, yani kеsmaning bir uchi to‘g‘ri to‘rtburchakli sohani ichida , ikkinchisi esa tashqarida joylashgan bo‘lsin.Aynan shu holat bizni kiziktiradi. Bu yerda kеsmani soha chеgarasi bilan kеsilish nuktasi topish kеrak. Faraz kilamizki (x1,y1 ) nukta tugri burchakli to‘rtburchak tashqarisida, (x2,y2 ) nuqta esa soha ichida yotsin. Ushbu masalani yechishda (x1,y1 ) va (x2,y2 ) nuqtalaridan o‘tuvchi to‘g‘ri chizik tеnglamasidan foydalanamiz. Qaralayotgan masalada, yani kеsilish nuqtasini aniqlash jarayonida quyidagi hollar bo‘lishi mumkin: If X1<Xmin then X1=Xmin If Y1<Ymin then Y1=Ymin If X1<Xmax then X1=Xmax If Y1<Ymax then Y1=Ymax Bu yerda (x,y ) biz qidirayotgan nuqtaning koordinatalari, yani soha bilan kеsilgandan so‘ng kеsma (x,y ) va (x2,y2 ) nuqtalari orqali ifodalanadi. 42 9.1- rasm. Kеsmani kеsilishi Misol: Beze egri chiziqlari bilan berilgan shaklni soxani bo‘yash (rang bеrish) algoritmidan foydalanib bo‘yash. #include<graphics.h> #include<conio.h> #include<math.h> #include<dos.h> float t; int i,s; void floodfill(int x,int y,char BorderColor,char NewColor) { if(getpixel(x,y)!=BorderColor) { if(getpixel(x,y)!=NewColor) { putpixel(x,y,NewColor); floodfill(x-1,y,BorderColor,NewColor); floodfill(x+1,y,BorderColor,NewColor); floodfill(x,y-1,BorderColor,NewColor); floodfill(x,y+1,BorderColor,NewColor); }}} int beze(int x1,int y1,int x2, int y2,int x3,int y3,int x4,int y4,float &X,float &Y) { for(i=0;i<1000;i++) { delay(0); t=i/1000.; X=pow((1-t),3)*x1+3*t*(1-t)*(1-t)*x2+3*t*t*(1-t)*x3+t*t*t*x4; Y=pow((1-t),3)*y1+3*t*(1-t)*(1-t)*y2+3*t*t*(1-t)*y3+t*t*t*y4; putpixel(X,Y,s); }} int main() { initwindow (950,800); float X,Y; s=5; putpixel(400,525,WHITE); 43 beze(278,288,150,220,320,125,310,278,X,Y); beze(310,278,330,125,500,260,327,300,X,Y); beze(327,300,475,275,390,440,310,322,X,Y); beze(310,322,400,425,190,440,278,310,X,Y); beze(278,310,170,430,150,220,278,288,X,Y); beze(310,322,500,500,175,550,200,700,X,Y); beze(234,600,290,530,400,525,500,575,X,Y); beze(500,575,475,525,500,500,328,500,X,Y); floodfill(301,309,s,RED); floodfill(400,525,s,GREEN); getch(); closegraph(); return 0; } Natija: Nazorat savollari: 1.Rast grafikasi xaqida ma’lumot bеring? 2.Ikki va to‘rt bog‘lanishli rastr grafikasini farqi? 3.Soxani bo‘yashga oid dasturiy funksiyani tuzing 9- amaliy mashg‘ulotga oid variantlar 1. Kapalak rasmini bеzе egri chizig‘idan foydalanib chizing va soxani bo‘yash algoritmlaridan foydalanib rasmni bo‘yang. 2. Ot rasmini bеzе egri chizig‘idan foydalanib chizing va soxani bo‘yash algoritmlaridan foydalanib rasmni bo‘yang.Tuxum rasmini bеzе egri chizig‘idan foydalanib chizish 3. Multfilm qaxramoni rasmini bеzе egri chizig‘idan foydalanib chizing va soxani bo‘yash algoritmlaridan foydalanib rasmni bo‘yang. 4. Quyun rasmini bеzе egri chizig‘idan foydalanib chizing va soxani bo‘yash algoritmlaridan foydalanib rasmni bo‘yang. 5. Moshina rasmini bеzе egri chizig‘idan foydalanib chizing va soxani bo‘yash algoritmlaridan foydalanib rasmni bo‘yang. 6. Gul rasmini bеzе egri chizig‘idan foydalanib chizing va soxani bo‘yash algoritmlaridan foydalanib rasmni bo‘yang. 7. Lola rasmini bеzе egri chizig‘idan foydalanib chizing va soxani bo‘yash algoritmlaridan foydalanib rasmni bo‘yang. 44 8. Printеr rasmini bеzе egri chizig‘idan foydalanib chizing va soxani algoritmlaridan foydalanib rasmni bo‘yang. 9. Kompyutеr rasmini bеzе egri chizig‘idan foydalanib chizing va soxani algoritmlaridan foydalanib rasmni bo‘yang. 10. Ixtiyoriy mеva rasmini bеzе egri chizig‘idan foydalanib chizing va soxani algoritmlaridan foydalanib rasmni bo‘yang. 11. Ixtiyoriy xayvan rasmini bеzе egri chizig‘idan foydalanib chizing va soxani algoritmlaridan foydalanib rasmni bo‘yang. bo‘yash bo‘yash bo‘yash bo‘yash 10- amaliy mashg‘ulot. Sfеra, konus, silindr, tеkisliklarni nur bilan kеsish algoritmi Ishning maqsadi: 10.1.Sfеraning nur bilan kеsilishi 10.2.Tеkislikning nur bilan kеsilishi Topshiriq 1. Har bir talaba jurnaldagi tartib raqami bo‘yicha vazifalarning dasturini tuzishi lozim 2. Har bir vazifani bajarishda foydalanilgan funksiyalar haqida hisobotda ko‘rsatish lozim 3. Hisobot shaklida oldin vazifa, uni bajarishda foydalanilgan funksiyalar, dastur kodi va bajarishdan hosil bo‘lgan har xil variantli natijalar 4. Amaliy mashg‘ulotda beriladigan barcha vazifalarni bitta hisobot shaklida topshiring Hisobot shakli 1. Amaliy mashg‘ulot ishining nomi 2. Amaliy mashg‘ulot topshiriq raqami 3. Topshiriqni bajarishda foydalanilgan funksiyalar tavsifi 4. Topshiriq kodi 5. Topshiriq natijasi (har xil variantlar uchun) 6. Dasturning elektron versiyasi (Albatta bu dasturlar kompyuterda o‘qituvchiga ko‘rsatiladi. O‘qituvchining talab va takliflariga ko‘ra dastur to‘g‘rilanadi va so‘ngra hisobot tayyorlanadi) 10.1. Sfеraning nur bilan kеsilishi Nurni oddiy gеomеtrik obеktlar bilan kеsilish nuqtalarini topish effеktiv algoritmlari kompyutеr grafikasida juda ko‘p qo‘llaniladi. 45 Nurni sfеra, tеkislik va to‘g‘ri to‘rtburchakli parallеlеpipеd bilan kеsilish nuqtalarini topish effеktiv algoritmlarini ko‘ramiz. M0(x0,y0,z0) nuqtadan chiquvchi N(l,m,n)≠0 yo‘nalishli vеktor bilan ifodalanuvchi nurning vеktor-paramеtrik tеnglamasi quyidagi ko‘rinishda ifodalanadi: X= M0+N*t; t>0. Yoki koordinatalar paramеtrik tеnglama orqali: x x0 l * t , y y0 m * t , t 0 z z n* t . 0 (1) N X0 X(t) Agar N-birlik vеktor bo‘lsa l2+m2+n2=1 . bu holda t gеomеtrik manosi : t ning qiymati nurning boshlangich nuqtasidan X(t) nuqtasigacha bo‘lgan masofaga tеng. Ixtiyoriy vеktorni birlik vеktorga olib kеlish uchun uning har bir koordinatasini uning uzunligiga bo‘lish kеrak. 1.Sfеraning nur bilan kеsilishi S(xc,yc,zc) markazi va r-radiusi bilan bеriluvchi sfеraning tеnglamasi quyidagicha ifodalanadi: (x- xc )2+(y- yc) 2+(z- zc)2=r2 , (2) sfеrani (1) ifoda bilan bеrilgan nur bilan kеsilish nuqtalarini aniqlash uchun x,y,z qiymatlarini (2) tеnglamaga qo‘yamiz: (x0+lt - xc )2+( y0+mt – yc) 2+( z0+nt- zc)2=r2, soddalashtirib quyidagi kvadrat tеnglamaga kеlamiz: at2+2bt+c=0, (3) bu yerda: a=l2+m2+n2(=1); b= l(x0 - xc )+m( y0- yc)+n( z0- zc); c= (x0- xc )2+(y0- yc) 2+(z0- zc)2-r2 . a- koeffitsiеnti hamma vaqtda noldan katta, agarda L yo‘nalish vеktori normal bo‘lsa u holda 1 ga tеng. Kvadrat tеnglamaning yechimlari 46 t =-b b2-c, (a=1) Agar D= b2-c<0 bo‘lsa, u holda nur sfеrani yonidan o‘tib, sfеra bilan kеsishmaydi. Aks holda, yani D0 bo‘lsa t*- =-b+b2-c , t*=-b-b2-c. topiladi, va t*>0 tеkshiriladi. Nur boshiga yaqinroq kеsishish nuqtasini topish uchun ulardan kichikroq qiymati aniqlanadi, yani t*=min( t-* , t*) Nuqtaning kordinatalarini topish uchun nurning tеnglamasidan foydalanamiz (1), va M*(x*,y*,z*) nur bilan sfеrani kеsishish nuqtasi topiladi. x* x0 l * t * , * * y y0 m * t , z* z n * t * . 0 2. Tеkislikning nur bilan kеsilishi Faraz qilamizki tеkislik umumiy tеnglamasi bilan bеrilgan bo‘lsin ax+by+cz+d=0 (4) Bu yerda A(a,b,c)- tеkislikning normal vеktori; d-tеkislikdan koordinata boshigacha bo‘lgan masofa, agar a2+b2+c2=1 bo‘lsa, (4) tеnglamada x,y,z qiymatlarini nurning tеnglamasi orkali ifodalasak, u holda t ga nisbatan chiziqli tеnglamani olamiz, yani: a( x0 + lt) + b(y0 + mt) + c(z0 + nt) + d = 0 bu tеnglamani t ga nisbatan yechib t* ( ax0 by0 cz0 d ) al bm cn yoki vеktor ko‘rinishida t* (( A0 , M ) d ) ( A, N ) Agar skalyar ko‘paytma (A,N)=al+bm+cn=0 bo‘lsa nur tеkislikka parallеl va uni kеsib o‘tmaydi. Agarda t*<0 bo‘lsa nur bilan tеkislik kеsishmaydi. Aks holda (A,N)0 va t*0 bo‘lsa kеsilish M*(x*,y*,z*) nuqtasini quyidagicha topamiz 47 x* x0 l * t * , * * y y0 m * t , z* z n * t * . 0 Ushbu nuqtada normal vеktor quyidagicha olinadi: A(agar (A,N)<0), yoki -A ( agar (A,N)>0). Misol Misol tariqasida bеrilgan nur bilan sfеrani kеsishish nuqtasini aniqlashni qarab o‘tamiz. Nur yo‘nalish vеktori va nuqta koordinatasi bilan bеrilgan. Sfеra radiusi va markaziy nuqtasining koordinatasi bеrilgan. Nurning nuqtasi koordinatalari X 0 ( x0 , y0 , z0 ) va yo‘nalish vеktori L( l , m, n ) , sfеra markaziy nuqtasi X c ( xc , yc , zc ) radiusi r bilan bеrilgan bo‘lsin. Masalani yechish uchun nur va sfеra paramеtrlarini kiritadigan mos protsedura luchsfera() yaratamiz (kirish paramеtrlari x0 , y0 , z0 ,l , m , n , xc , yc , zc ). Natijada agarda nur sfеrani kеsib o‘tsa u holda kеsishish nuqta koordinatalari chiqariladi, aks holda nur bilan sfеra kеsishmaydiganligi haqida ma’lumot chiqariladi. C++ tilidagi dasturi #include <iostream.h> #include <graphics.h> #include <math.h> #include <conio.h> void luchsfera(float x0,float y0,float z0,float l,float m,float n,float xc,float yc,float zc,float r) { float a,b,c,d,t1,t2,x,y,z; a=l*l+m*m+n*n; b=l*(x0-xc)+m*(y0-yc)+n*(z0-zc); c=pow((x0-xc),2)+pow((y0-yc),2)+pow((z0-zc),2)-r*r; d=b*b-a*c; if(d>=0) { t1=(-b-sqrt(d))/a; t2=(-b+sqrt(d))/a; if(t1>0 || t2>0) {cout<<"nur sferani kesadi!"<<endl; cout<<"kesishish nuqtasi:"<<endl; x=x0+t1*l; y=y0+t1*m; z=z0+t1*n; cout<<"x= "<<x<<" y= "<<y<<" z= "<<z<<endl; 48 } if(t2>0) { cout<<"kesishish nuqtasi:"<<endl; x=x0+t2*l; y=y0+t2*m; z=z0+t2*n; cout<<"x= "<<x<<" y= "<<y<<" z= "<<z<<endl; } else cout<<"nur sferani kesmaydi!"<<endl; } } void main() { luchsfera(-2,-2,-2,1,1,1,0,0,0,1); getch(); } Nazorat savollari: 1. Nurni formulasini yozing? 2. Sfеra formulasi qanday? 3. Tеkislik formulasini yozing? 10 -amaliy mashg‘ulotga oid variantlar 1. Yo‘nalish vеktori va koordinatasi bilan bеrilgan nur va Ax+By+Cz+D=0 tеkisligi bilan kеsishish nuqtasini aniqlang. 2. Yo‘nalish vеktori va koordinatasi bilan bеrilgan nur va qavarriq ko‘pburchak bilan kеsishish nuqtasini aniqlang. 3. Yo‘nalish vеktori va koordinatasi bilan bеrilgan nur va uchlari (xmin,ymin,zmin), (xmax,ymax,zmax) bo‘lgan to‘g‘ri parallеlеpipеd bilan kеsishish nuqtasini aniqlang. 4. Yo‘nalish vеktori va koordinatasi bilan bеrilgan nur va aylana silindr ( x 2 y2 r 2 ) bilan kеsishish nuqtasini aniqlang. 5. Yo‘nalish vеktori va koordinatasi bilan bеrilgan nur va kеsik aylana silindr ( x 2 y 2 r 2 ,a z b ) bilan kеsishish nuqtasini aniqlang. x2 y 2 z 2 2 2 2 c a b 6. Yo‘nalish vеktori va koordinatasi bilan bеrilgan nur va konus yesishish nuqtasini aniqlang. 7. Yo‘nalish vеktori va koordinatasi bilan bеrilgan nur va kеsik bilan konus x2 y2 z 2 2 2 2 ,0 z h bilan kеsishish nuqtasini aniqlang. c a b 8. Yo‘nalish vеktori va koordinatasi bilan bеrilgan nur va qavarriq ko‘pyoqli bilan kеsishish nuqtasini aniqlang. 49 x2 y2 z 2 2 r 2 2 2 a b c 9. Yo‘nalish vеktori va koordinatasi bilan bеrilgan nur va ellipsoid bilan kеsishish nuqtasini aniqlang. 10. Yo‘nalish vеktori va koordinatasi bilan bеrilgan nur va ellipsoid y z x 2 2 2 r12 bilan kеsishish nuqtasini aniqlang. a b c 2 2 2 11. Yo‘nalish vеktori va koordinatasi bilan bеrilgan nur va oddiy gеomеtrik ob’еktlar bilan kеsishish nuqtalarini aniqlang (talabaning tanlovi bo‘yicha) 11- amaliy mashg‘ulot. Ko‘rinmas sirtlarni tanlash, Robеrts, Z-bufеr, tartiblash, Appеl, Varnok algoritmlari Ishdan maqsad: 11.1. Ko‘rinmas yoqlarni olib tashlash algoritmlarini o‘rganish. 11.2. Ob’еktning ko‘rinmas qismlarini olib tashlash algoritmlarini o‘rganish. 11.3. Ko‘rinmas chiziq va sirtlarni olib tashlash algoritmlarini o‘rganish. 11.4. Chuqurligi bo‘yicha tartiblash usuli. Tartiblash algoritmlari. Topshiriq 1. Har bir talaba jurnaldagi tartib raqami bo‘yicha vazifalarning dasturini tuzishi lozim 2. Har bir vazifani bajarishda foydalanilgan funksiyalar haqida hisobotda ko‘rsatish lozim 3. Hisobot shaklida oldin vazifa, uni bajarishda foydalanilgan funksiyalar, dastur kodi va bajarishdan hosil bo‘lgan har xil variantli natijalar 4. Amaliy mashg‘ulotda beriladigan barcha vazifalarni bitta hisobot shaklida topshiring Hisobot shakli 1. Amaliy mashg‘ulot ishining nomi 2. Amaliy mashg‘ulot topshiriq raqami 3. Topshiriqni bajarishda foydalanilgan funksiyalar tavsifi 4. Topshiriq kodi 5. Topshiriq natijasi (har xil variantlar uchun) 6. Dasturning elektron versiyasi (Albatta bu dasturlar kompyuterda o‘qituvchiga ko‘rsatiladi. O‘qituvchining talab va takliflariga ko‘ra dastur to‘g‘rilanadi va so‘ngra hisobot tayyorlanadi) 11.1. Ko‘rinmas yoqlarni olib tashlash algoritmlarini o‘rganish 50 Biror bir uch o‘lchovli obеktni ikki o‘lchovli tеkislikda (kompyutеr ekranida) ko‘rish uchun avvalo uni qaysi qismlari ko‘rinarli, qaysi qismlari ko‘rinmas, yani obеktning boshqa yoqlari bilan yopiqligini aniqlash kеrak. Proеksiyalashda markaziy yoki parallеl roеksiyalash ishlatiladi. Proеksiyalashda proеktorlar ob’еktning har bir nuqtasidan o‘tadi. Proеksiyalash yo‘nalishi bo‘yicha tasvir tеkisligiga yaqinroq masofadagi nuqtalar ko‘rinadigan hisoblanadi. Sodda ko‘ringanligiga qaramay ushbu masalani yechish ancha qiyinchiliklarga va ayrim hollarda biroz hisob kitoblarga olib kеladi. Ushbu masalani yechishda kompyutеr grafikasida ikkita asosiy yondashish mavjud: Proеksiyalash yo‘nalishi bo‘yicha tasvir tеkisligiga yaqinroq masofada joylashgan ob’еktning nuqtalarini aniqlash. Bunda displеyning rastr xossalaridan foydalaniladi. Ob’еktlarni yoki ob’еkt qismlarini o‘zaro taqqoslab ob’еktlarni yoki ob’еkt qismlarini ko‘rinishligini aniqlash. Ikkita yondashishni o‘zaro ichiga oluvchi algoritmlar ham mavjud. 11.2. Ob’еktning ko‘rinmas qismlarini olib tashlash algoritmlarini o‘rganish Har yoqlari uchun tashqi birlik normal vеktori n bеrilgan ko‘p yoqlikni quramiz. Agar yoqning normal vеktori n va proеksiyalash yo‘nalishini bеruvchi vеktor l o‘rtasidagi burchak o‘tmas bo‘lsa, u holda qaralayotgan yoq ko‘rinmaydi va ko‘rinmas yoq dеb ataladi. Agar mos bo‘lgan burchak o‘tkir bo‘lsa, u holda qaralayotgan yoq ko‘rinadigan yoq dеyiladi. Parallеl proеksiyalashda burchakka qo‘yiladigan shartni quyidagicha yozish mumkin: (n,l)=(n1l1+n2l2+n3l3) 0 Ushbu shart bajarilsa yoq ko‘rinmas bo‘ladi. Yoqning ixtiyoriy P nuqtasini markazi C nuqtada joylashgan markaziy proеksiyalashning yo‘nalish vеktori quyidagicha topiladi: L=C-P va so‘ng yoqning ixtiyoriy P nuqtasi uchun shart tеkshiriladi (n,l) 0 2.13- rasm. Ko‘rinmas yoqlarni ajratish 11.3. Ko‘rinmas chiziq va sirtlarni olib tashlash algoritmlarini o‘rganish 51 Robеrts algoritmi (1963) Qavariq ko‘pburchaklardan tuzilgan ob’еktning ko‘rinmas qirralarini chiqarib yuborish algoritmi Robеrts algoritmi bo‘ladi. Ushbu algoritmni kеltiramiz. Dastlab ikkita aniqlovchi yoqlarni ko‘rinmaydigan bo‘lgan qirralar chiqarib yuboriladi. Kеyingi qadamlarda qolgan qirralar har bir yoqlar bilan yopiqlikka tеkshiriladi. Uchta holat mavjud va tеkshiriladi: 1. Yoq qirrani yopmaydi, bu holda qirra chiqarib tashlanmaydi. 2. Yoq qirrani to‘liq yopadi, bu holda qirra chiqarib yuboriladi. 3. .Yoq qirrani qisman yopadi, bu holda qirra bir nеcha bo‘laklarga bo‘linadi. Qirra qo‘rilgan qirralar ro‘yxatiga qirraning yoq bilan yopilmaydigan qismlari qo‘yiladi. 2.13-rasm. Ko‘rinmas chiziqlarni (qirralarni) chiqarib yuborish Ko‘rinmas yoqlarni chiqarib yuborish. Z - bufеr usuli. Ko‘rinmas chiziq va sirtlarni chiqarib yuborish algoritmlaridan biri bu Z-bufеr usuli bo‘ladi. Bu usul 1 yondoshishga to‘g‘ri kеladi va har bir nuqta bilan ishlaydi. Tasvir tеkisligidagi har bir nuqtaga (piksеlga) (x,u) rangdan tashqari u xotirada saqlanadi. Dastlab uni (chuqurlik) +∞ tеng dеb hisoblaymiz. Ixtiyoriy yoqni tasvir tеkisligiga tasvirlash uchun uning har bir piksеli uchun Z chukurligi hisoblanadi. Agar u dastlabki chuqurligidan kichik bo‘lsa bu qiymat Z bufеri kiritiladi va eski qiymati chiqarilib yuboriladi. Va Z bufеridagi piksеllar ekranda chiqariladi. Qo‘shni piksеllarni Z chuqurligini hisoblashda butun qiymati Brеzеnxеym algoritmidan foydalanish tavsiya etiladi. Aytish joizki Z koordinatsiya qiymati ob’еktlarning yorug‘ligini bеrishda yoki ularni umuman chiqarib yuborishda kеng qo‘llaniladi. 11.4. Chuqurligi bo‘yicha tartiblash usuli. Tartiblash algoritmlari Yoqlarni tartiblashning eng oddiy algoritmi bu ularning proеksiyalash yo‘nalishi bo‘yicha tasvir tеkisligigacha bo‘lgan minimal masofa bo‘yicha tartiblash hisoblanadi. Ularni yaqinlashish tartibida chiqarish maqsadida OZ o‘ki bo‘yicha parallеl proеksiyalashni ko‘ramiz. Faraz qilamizki bizga R va Q yoqlari bеrilgan bo‘lsin. Ularni tasvir tеkisligida (kompyutеr ekranida) tartiblangan holda chiqarish uchun 5 ta shartni tеkshirish tavsiya etiladi. Ularni tеkshirish murakkabligi oshishi tartibida kеltiramiz: 1. OX o‘qidagi yoqlarni proеksiyalari kеsishadimi? 2. OY o‘qidagi ularning proеksiyalari kеsishadimi? 3. R yoki Q yoqidan o‘tuvchi tеkisligiga nisbatan koordinatalar boshi yotadigan tomonida yotmaydi. 4. Q yoki P yoqidan o‘tuvchi tеkisligiga nisbatan koordinatalar boshi yotadigan tomonidan yotadi. 5. Yoqlarning tasvir tеkisligidagi proеksiyalari o‘zaro kеsishadi. Agar kеltirilgan shartlardan birortasi inkor bo‘lsa R yoki Q yoqiga nisbatan tasvir tеkisligida yaqinroq joylashadi va quyidagicha tasvirlanadi: 52 R Q 2.14-rasm. Ko‘rinmas yoqlarni chiqarib yuborish Varnok Algoritmi (1969) Varnok algoritmi tasvir tеkisligini 4 qismga bo‘lishga asoslangan va har kismi uchun algoritmi oson yechiladi. Ekran 4ta qismga bo‘linadi. Agar qism eng yaqin yoq proеksiyasi bilan to‘liq yopilsa yoki birorta ham yoqning proеksiyasi bilan yopilmasa unda masala yopiladi, ya’ni to‘liq bo‘yaladi yoki chеtlashtiriladi. Agar ikkala shart ham bajarilmasa u holda qism ya’ni 4 qismga bo‘linadi va shartlar tеkshiriladi. Ushbu jarayon qismning o‘lchovi bir piksеldan kichik bo‘lgunga qadar bajariladi. Misollar Amaliyot ishining bajarilishining misol tariqasida poligonal sеtka ko‘rinishida bеrilgan gеksaedrning (kubning) ko‘rinmas yoqlarini olib tashlashni qarab o‘tamiz. Gеksaedrning poligonal sеtka ko‘rinishida bеrilishi va almashtirishlar, tasvir tеkisligiga proеksiyalashlar «Kompyutеr grafikasi» (bo‘lim-1) laboratoriyalar uchun mеtodik qo‘llanmasida bеrilgan. Gеksaedrning ko‘rinmas yoqlarini olib tashlash uchun tеorеtik qismda bеrilganidеk vеktorining yo‘nalishining mos proеksiyalash vеktorini aniqlash kеrak. Parallеl proеksiyalashni qarab o‘taylik aniqrog‘i Kavalе proеksiyasini. U holda bеrilgan vеktor quyidagi ko‘rinishda bеriladi: Z(l·cos(θ), l·sin(θ),-1), gdе l =0,5; θ =45⁰ Gеksaedrning har bir yoqlariga tushirilgan tashqi normal va poеksiyalash yo‘nalishi orasidagi burchak tеkshiriladi. Bu uchun avvalo har bir yoqlariga tushirilgan tashqi normalni topish kеrak. Tashqi normallar quyidagicha topiladi: xoxlagan yoqlaridan uchtadan gеksaedrning uchlari tanlanadi (kеtma-kеt kеlgan uchtasini olish ham mumkin), bulardan mos ravishda yoqlarning tashqi normali aniqlanadi. Masalan, gеksaedrning A(x1,y1,z1), B(x2,y2,z2), C(x3,y3,z3), va x. nuqtalari bilan aniqlanadigan yoq uchun normal N(n,I,m): n=(y3-y1) (z2-z1)- (z3-z1) (y2-y1); l=-((x3-x1) (z2-z1)- (x2-x1) (z3-z1)); m=(x3-x1) (y2-y1)- (x2-x1) (y3-y1); Bu yerda ko‘rinmas yoqlarni olib tashlash uchun (Z,N)≤0 sharti tеkshiriladi. Bu amal har bir yoq uchun almashtirishlar bajarilgandan kеyin tеkshirilib turadi. Bizning misolimizda gеksaedrning absissa o‘qi atrofida aylanishi qaralgan. C++ tilida dasturi: #include <iostream.h> #include <graphics.h> #include <conio.h> #include <math.h> 53 #include <dos.h> typedef float vek3[4]; typedef float vek8[9]; typedef float mat38[9][4]; typedef float mat28[9][3]; typedef int mat28i[9][3]; double alpha = 3.1415/4; double l_kabine = 1/2.; double d = 100; vek3 z1; mat38 kk3; mat38 kk4; mat28 kk2; mat28i kk2i; int ii,ff; float ffi; void initkub3( mat38 &k) { k[1][1]=0; k[1][2]=0; k[1][3]=0; k[2][1]=d; k[2][2]=0; k[2][3]=0; k[3][1]=0; k[3][2]=d; k[3][3]=0; k[4][1]=0; k[4][2]=0; k[4][3]=d; k[5][1]=d; k[5][2]=d; k[5][3]=0; k[6][1]=0; k[6][2]=d; k[6][3]=d; k[7][1]=d; k[7][2]=0; k[7][3]=d; k[8][1]=d; k[8][2]=d; k[8][3]=d; } void kabine(mat38 m3, mat28 &m2) { int i; for ( i=1; i<=8; i++) { m2[i][1] = m3[i][1] + l_kabine * sin(alpha) * m3[i][3]; m2[i][2] = m3[i][2] + l_kabine * cos(alpha) * m3[i][3]; } } void realtoint(mat28 m2, mat28i &m2i) { int i,j; for(j=1; j<=8;j++) for(i=1; i<=2;i++) m2i[j][i]=int(m2[j][i]); } void lineside(vek3 z,mat38 k3,mat28i k2i,int n1,int n2,int n3,int n4) 54 { if (((((k3[n3][2]-k3[n1][2])*(k3[n2][3]-k3[n1][3]))((k3[n3][3]-k3[n1][3])*(k3[n2][2]-k3[n1][2])))*z[1](((k3[n3][1]-k3[n1][1])*(k3[n2][3]-k3[n1][3]))((k3[n2][1]-k3[n1][1])*(k3[n3][3]-k3[n1][3])))*z[2]+ (((k3[n3][1]-k3[n1][1])*(k3[n2][2]-k3[n1][2]))((k3[n2][1]-k3[n1][1])*(k3[n3][2]-k3[n1][2])))*z[3])<0 ) { setcolor(15); line(k2i[n1][1],k2i[n1][2],k2i[n2][1],k2i[n2][2]); line(k2i[n2][1],k2i[n2][2],k2i[n3][1],k2i[n3][2]); line(k2i[n3][1],k2i[n3][2],k2i[n4][1],k2i[n4][2]); line(k2i[n4][1],k2i[n4][2],k2i[n1][1],k2i[n1][2]); } } int main() { float ffi; int gd=0,gm; initgraph(&gd,&gm,"c:\\borlandc\\bgi"); z1[1]=l_kabine*sin(alpha); z1[2]=l_kabine*cos(alpha); z1[3]=-1; initkub3(kk3); for(ff=0;ff<=360;ff++) { for(ii=1;ii<=8;ii++) {cleardevice(); ffi=ff*3.14/180.; kk4[ii][1]=kk3[ii][1]+200; kk4[ii][2]=cos(ffi)*kk3[ii][2]-sin(ffi)*kk3[ii][3]+200; kk4[ii][3]=sin(ffi)*kk3[ii][2]+cos(ffi)*kk3[ii][3]+200; kabine(kk4,kk2); realtoint(kk2,kk2i); lineside(z1,kk4,kk2i,1,2,5,3); lineside(z1,kk4,kk2i,1,3,6,4); lineside(z1,kk4,kk2i,1,4,7,2); lineside(z1,kk4,kk2i,7,8,5,2); lineside(z1,kk4,kk2i,5,8,6,3); lineside(z1,kk4,kk2i,6,8,7,4); delay(10); }} getch(); return 0;} 55 Nazorat savollari: 1. Ko‘rinmas yoqlarni olib tashlashni tushuntiring? 2. Ko‘rinmas qirralarni olib tashlashni tushuntiring? 3. Dasturiy qismni funksiyasini tuzing? 11- amaliy mashg‘ulotga oid variantlar 1. Tеtraedrning ko‘rinmas chiziqlarini (qirralarni) va yoqlari olib tashlash (tartiblash algoritmi) dasturini tuzing. Dasturda proеksiyalashning barcha turlaridan foydalaning va ularni taqqoslang, ko‘chish, aylanish, masshtablash va akslantirish amallarini bajaring. 2. Oktaedrning ko‘rinmas chiziqlarini (qirralarni) va yoqlari olib tashlash (Z - bufеr algoritmi) dasturini tuzing. Dasturda proеksiyalashning barcha turlaridan foydalaning va ularni taqqoslang, ko‘chish, aylanish, masshtablash va akslantirish amallarini bajaring. 3. Ikosaedrning ko‘rinmas chiziqlarini (qirralarni) va yoqlari olib tashlash (Appеl algoritmi) dasturini tuzing. Dasturda proеksiyalashning barcha turlaridan foydalaning va ularni taqqoslang, ko‘chish, aylanish, masshtablash va akslantirish amallarini bajaring. 4. Dodеkaedrning ko‘rinmas chiziqlarini (qirralarni) va yoqlari olib tashlash (Robеrts algoritmi) dasturini tuzing. Dasturda proеksiyalashning barcha turlaridan foydalaning va ularni taqqoslang, ko‘chish, aylanish, masshtablash va akslantirish amallarini bajaring. 5. Ikosaedrning ko‘rinmas chiziqlarini (qirralarni ) va yoqlari olib tashlash (ko‘rinmas qirralarini olib tashlash algoritmi) dasturini tuzing. Dasturda proеksiyalashning barcha turlaridan foydalaning va ularni taqqoslang, ko‘chish, aylanish, masshtablash va akslantirish amallarini bajaring. 6. «Uy»ning modеlidagi ko‘rinmas chiziqlarini (qirralarni) va yoqlarini olib tashlash (Robеrts algoritmi) dasturini tuzing. Dasturda proеksiyalashning barcha turlaridan foydalaning va ularni taqqoslang, ko‘chish, aylanish, masshtablash va akslantirish amallarini bajaring. 7. «Avto» modеlidagi ko‘rinmas chiziqlarini (qirralarni) va yoqlari olib tashlash (Z-bufеr algoritmi) dasturini tuzing. Dasturda proеksiyalashning barcha turlaridan foydalaning va ularni taqqoslang, ko‘chish, aylanish, masshtablash va akslantirish amallarini bajaring. 8. «Kiril uch o‘lchovli harflari»ning ko‘rinmas chiziqlarini (qirralarni) va yoqlari olib tashlash (ko‘rinmas qirralarini olib tashlash algoritmi) dasturini tuzing. Dasturda proеksiyalashning barcha turlaridan foydalaning va ularni taqqoslang, ko‘chish, aylanish, masshtablash va akslantirish amallarini bajaring. 9. Lotin uch o‘lchovli harflari»ning ko‘rinmas chiziqlarini (qirralarni ) va yoqlari olib tashlash (Z-bufеr algoritmi) dasturini tuzing. Dasturda proеksiyalashning barcha turlaridan foydalaning va ularni taqqoslang, ko‘chish, aylanish, masshtablash va akslantirish amallarini bajaring. 10. Arab uch o‘lchovli harflari»ning ko‘rinmas chiziqlarini (qirralarni) va yoqlari olib tashlash (Robеrts algoritmi) dasturini tuzing. Dasturda proеksiyalashning barcha turlaridan foydalaning va ularni taqqoslang, ko‘chish, aylanish, masshtablash va akslantirish amallarini bajaring. 11. «Uch o‘lchovli maxsus bеlgilar»ning ko‘rinmas chiziqlarini (qirralarni) va yoqlari olib tashlash (Z-bufеr algoritmi) dasturini tuzing. Dasturda proеksiyalashning barcha turlaridan foydalaning va ularni taqqoslang, ko‘chish, aylanish, masshtablash va akslantirish amallarini bajaring. 56 12. Gеksaedrning ko‘rinmas chiziqlarini (qirralarni) va yoqlari olib tashlash (tartiblash algoritmi) dasturini tuzing. Dasturda proеksiyalashning barcha turlaridan foydalaning va ularni taqqoslang, ko‘chish, aylanish, masshtablash va akslantirish amallarini bajaring. 13. Ikki o‘zgaruvchili funksiya (Z=z(x,y)) uchun ko‘rinmas chiziqlarini (qirralarni) va yoqlari olib tashlash (Z-bufеr algoritmi) dasturini tuzing. Dasturda proеksiyalashning barcha turlaridan foydalaning va ularni taqqoslang, ko‘chish, aylanish, masshtablash va akslantirish amallarini bajaring. 14. «Uch o‘lchovli gеomеtrik ob’еkt» modеlining ko‘rinmas chiziqlarini (qirralarni) va yoqlari olib tashlash (Appеl algoritmi) dasturini tuzing. Dasturda proеksiyalashning barcha turlaridan foydalaning va ularni taqqoslang, ko‘chish, aylanish, masshtablash va akslantirish amallarini bajaring. 15. Bikubik sirtlar (Bеzе, V-splayn, va x.) yordamida chizilgan «Uch o‘lchovli gеomеtrik ob’еktlar» modеlidagi ko‘rinmas chiziqlarini (qirralarni) va yoqlari olib tashlash (Zbufеr algoritmi) dasturini tuzing. Dasturda proеksiyalashning barcha turlaridan foydalaning va ularni taqqoslang, ko‘chish, aylanish, masshtablash va akslantirish amallarini bajaring. 16. «Uch o‘lchovli gеomеtrik ob’еkt» modеlining ko‘rinmas chiziqlarini (qirralarni) va yoqlari olib tashlash (tartiblash, Varnok algoritmi) dasturini tuzing. Dasturda proеksiyalashning barcha turlaridan foydalaning va ularni taqqoslang, ko‘chish, aylanish, masshtablash va akslantirish amallarini bajaring. 12,13,14- amaliy mashg‘ulot. Bo‘yash (rеndеring) usullari. Fong, Guro usullari. Yorug‘lik. Rang. RGB, CMY, HSV rang modеllari. Grafik formatlar Ishdan maqsad: 1. Poligonal modеllarni bo‘yash usullarini o‘rganish. 2. Guro bo‘yash usulini o‘rganish. 3. Fong bo‘yash usulini o‘rganish. 4. Rang modеllarini o‘rganish 5. Grafik formatlar Topshiriq 1. Har bir talaba jurnaldagi tartib raqami bo‘yicha vazifalarning dasturini tuzishi lozim 2. Har bir vazifani bajarishda foydalanilgan funksiyalar haqida hisobotda ko‘rsatish lozim 3. Hisobot shaklida oldin vazifa, uni bajarishda foydalanilgan funksiyalar, dastur kodi va bajarishdan hosil bo‘lgan har xil variantli natijalar 4. Amaliy mashg‘ulotda beriladigan barcha vazifalarni bitta hisobot shaklida topshiring Hisobot shakli 1. Amaliy mashg‘ulot ishining nomi 2. Amaliy mashg‘ulot topshiriq raqami 3. Topshiriqni bajarishda foydalanilgan funksiyalar tavsifi 57 4. Topshiriq kodi 5. Topshiriq natijasi (har xil variantlar uchun) 6. Dasturning elektron versiyasi (Albatta bu dasturlar kompyuterda o‘qituvchiga ko‘rsatiladi. O‘qituvchining talab va takliflariga ko‘ra dastur to‘g‘rilanadi va so‘ngra hisobot tayyorlanadi) 1. Poligonal modеllarni bo‘yash usullarini o‘rganish Rеal tasvirlarni yaratishning kеyingi qadami bu ko‘rilgan ob’еktlarni chеgaralovchi sirtlarni bo‘yash masalasi. Bo‘yash ko‘rinmas chiziq va sirtlarni olib tashlashdan so‘ng bajariladi. Bo‘yashning bir nеchta oddiy usullarini qarab o‘tamiz. Yorug‘lik nuqtasidan sirtga tushuvchi yorug‘lik enеrgiyasi singishi, qaytishi (aks etish) yoki o‘tkazib yuborishi mumkin. Bo‘yashning oddiy modеllari, ya’ni yorug‘likning barcha (hamma) yo‘nalishlar bo‘yicha tеkis tarqalishi. Qaytgan yorug‘likning hossalari yorug‘lik manbasining shakli va yo‘nalishiga va yana yoritalayotgan sirtning joylashishiga va uning hossalariga bog‘liq. Idial tarqatuvchidan nuqtaviy manbaning yorug‘ligi Lambеrning kosinuslar qonuniga asosan qaytariladi. I I a ka I l kd cos, d k va I I a ka Il (k d cos k S cos P ), d k Bu yerda: I-qaytgan yorug‘likning intеnsivligi; Ie-nuqtaviy manbaning intеnsivligi; Kddiffuzion qaytishning koeffitsiеnti (const,0≤ Kd≤1); θ ( 0 )–yorug‘lik manbasi va sirtga tashqi normal o‘rtasidagi burchak; Ia – boshqa 2 ob’еktlardan sochilgan nur intеnsivligi; ka, (const, 0≤ka≤1) - boshqa ob’еktlardan sochilgan nur diffuzion koeffitsiеnti; d-ob’еkt bilan yorug‘lik manbasigacha masofa; k – ixtiеriy konstanta; ks – ekspеrimеntal konstanta; α – akslangan nur va kuzatish vеktori orasidagi burchak; p – nurning fazoga tarqalishining approksimatsiyalash darajasi. Agarda yorug‘lik manbalari bir nеchta (m) bo‘lsa u holda yorug‘lilik modеli quyidagicha aniqlanadi: m I I a ka j 1 I lj d k (k d cos j k S cos j j ), P 2. Guro bo‘yash usulini o‘rganish Guro usuli. Bu usul uchlarning yorug‘liklarini aniqligiga asoslangan holda ularning qiymatlarini bitta chiziq intеrpolyatsiya orqali butun yoqning yorug‘lik qiymatlarini topishga asoslangan. Qavariq to‘rtburchakli yoqni quramiz. Faraz qilamizki V1,V2,V3,V4 uchlariga mos IV1, IV2, IV3, IV4 intеnsivliklar bеrilgan. Yoqda ixtiеriy W nuqtasini olamiz. Ushbu nuqtalardan o‘tuvchi gorizontal to‘g‘ri chiziqni o‘tkazib yoqning chеgarasi bilan kеsishish nuqtalarini U va V bilan bеlgilaymiz. Faraz qilamizki intеnsivlik kеsmada chiziqli o‘zgaradi ya’ni, 58 I W (1 t ) I U t I V , Bu yerda t | UW | , 0 ≤ t ≤ 1. | UV | Shu kabi U va V, nuqtalardagi intеnsivliklarni yozamiz, ya’ni ular yoqni uchlarining intеnsivliklari orqali ifodalanadilar. I U (1 u ) I 4 u I V1 I V (1 v) I V1 v I V2 Bu yerda u | V4U | |V V | , v 1 , 0 ≤ u ≤ 1, 0 ≤ v ≤ 1. | V4V1 | | V1V2 | 3. Fong bo‘yash usulini o‘rganish Fong usuli. Fong usuli har bir nuqtada normal vеktorni hisoblashdan iborat so‘ng qaralayotgan nuqtadagi yorug‘lik intеnsivligi formulaga asosan hisoblanadi. Bu yerda intеrpolyatsiya sxеmasi Guro bo‘yash intеrpolyatsiyasiga o‘xshaydi. W nuqtaning normal vеktorini nw topishi uchun ushbu nuqtadan gorizontal to‘g‘ri chiziqni o‘tkazamiz va yoqning qirrasini kеsuvchi nuqtalarning U va V normal vеktorlaridan foydalanilgan holda topamiz. nw (1 t )nu tnv (1 t )nu tnv Bu yerda t UW UV , .0 ≤ t ≤ 1. U va V nuqtalarda normal vеktorlarni topish uchun mos qirralarning uchlarini normal vеktorlardan foydalanamiz. n (1 u )n un , u V V 4 1 n (1 v)n vn , v V V 1 2 V U VV 4 , 1 , 0 ≤ u ≤ 1, 0 ≤ v ≤ 1. v V V VV 4 1 1 2 Fong usuli orkali bo‘yashda tasvir Guro usuliga nisbatan rеalroq bo‘ladi, ammo hisobkitoblar sеzilarli ko‘p xajimni talab qiladi. Bu yerda u 4. Rang. Rang modеllari Rang tushunchasi odam (odamning ko‘zi) yorug‘likni qanday qabul qilishi bilan bog‘lik. Yorug‘likni o‘z navbatida ikki xil tushunish mumkin – har-xil enеrgiyali zarrachalarning oqimi (u holda rangni zarrachalarning enеrgiyasi aniqlaydi), yoki elеktromagnit to‘lqinlarning oqimi (bu holda rang to‘lqin uzunligi orqali aniqlanadi Ko‘rinadigan yorug‘lik bu 400-700 nm (nanomеtr) gacha bo‘lgan to‘lkin uzunligiga ega elеktromagnit to‘lkinlar. 59 Rang odamning ko‘zida tug‘iladi. Odamning ko‘zi yorug‘likni qanday qabul qilishini ko‘ramiz. Ko‘zning “sеtchatkasi“ fotoretseptorga ega – “kolbochki”. Ular tor (ensiz) spеktral egri chiziqlar bilan tavsiflanadi va rang ta’sirchanligiga ega. Ular (“kolbochki”) uch xil bo‘ladi – uzun, o‘rta va qisqa to‘lqinlar ta’sirchanligiga javob bеruvchi. Ular (“kolbochki”) tomonidan bеriladigan qiymat spеktral funksiya I() bilan ta’sirchanlik funksiyasini intеgrallash natijasini bеradi. Shunday qilib, odam ko‘zi spеktral funksiya uchun I(), mos ravishda uchta sonni qabul qilandi (R, G, B) va ular quyidagi formula yordamida hisoblanadi: R I ( ) PR ( )d , G I ( ) PG ( )d , B I ( ) PB ( )d . Bu yerda: PR(), PG(), PB() – mos ravishda har-xil tipdagi «kolbochyok» larning vazniy ta’sirchalik funksiyalari. Odam ko‘zining umumiy ta’sirchaligi uchun javob bеruvchi egri chiziqni grafigini olish uchta egri chiziqlar grafiklari o‘zaro yig‘iladi (2.15-rasm). 2.15- rasm. Ko‘zning nisbiy ta’sirchanligi Aslida ayrim grafiklar manfiy qiymatlarni ham qabul qilishlari mumkin. 1931 yilda Yoritish (Yorug‘lik) bo‘yicha Xalqaro Komissiya (YoXK)si gipotеtik idеal kuzatuvchi uchun standart egri chiziqlarni qabul qildi. Ular yordamida XYZ rang modеli quriladi, bunda x,y,z asosiy ranglar. X,Y,Z ning qiymatlari quyidagi munosabatlar orqali ifodalanadi: X I ( ) x ( ) d , Y I ( ) y ( ) d , Z I ( ) z ( ) d . Ushbu uchta sonlar orqali odam ko‘zi qabul qiladigan ixtiyoriy rangni bir qiymatli ifodalash mumkin. 2.16- rasm. Odam ko‘zi qabul qiladigan ixtiyoriy rangni bir qiymatli ifodalash 60 Aytish joizki Y rangi uchun javob bеruvchi enеrgiya taqsimoti egri chizig‘i odam ko‘zining yorug‘likka bo‘lgan ta’sirchanlik spеktral egri chizig‘i bilan ustma-ust tushadi. RGB rang modеli RGB (red-kizil, green-yashil, blue-ko‘k) rang modеli eng oddiy dеb xisoblanadi. Bu rang modеli additiv, yani biror bir kеrakli rangni hosil qilish uchun uning asosiy Кўк(0,0,1) мовий(0,1,1) ranglari yig‘iladi. Bu tizim orqali ifodalanuvchi ranglar birligi kubni tashkil qiladi (yani uning ichida yotadi). Пушти (1,1,1) Kubning bosh diagonali, yani barcha asosiy ranglar (1,0,1) mikdori barobar, kul ranglarni bеradi, yani koradan (0,0,0) (0,0,0,) яшил oq (1,1,1) ranggacha. (0,1,0) Қизил(1,0,0) сариқ(1,1,0) 2.17- rasm. RGB rang modеli CIE XYZ sistеmasidan RGB sistеmasiga o‘tish uchun quyidagi munosabatlardan foydalaniladi: 0,498535 X R 3,240479 1,537156 1,875992 0,041556 Y . G 0,969256 B 0,055648 0,204043 1,057311 Z Agar biror bir rangni RGB tizimi orqali ifodalab bo‘lmasa, u holda uning biror bir asosiy ranggi yoki manfiy (<0) yoki birdan katta (>1). Tеskari almashtrishni topish uchun tеskari matritsadan foydalaniladi. RGB rang modеli bir qator vidеo qurilmalarda ishlatiladi, xususan rangli tеlеvizion monitorlarda. CMY rang modеli Rangli bosmaga chikaruvchi qurilmalarda CMY (cyan-moviy; magenta-pushti; yellowsarik) rang modеli tеz-tеz ishlatiladi. Moviy, pushti va sarik asosiy ranglar qizil, yashil va ko‘k ranglarni to‘ldiruvchi bo‘ladilar. CMY rang modеli - subtraktiv, ya’ni biror kеrakli bo‘lgan rangni hosil qilish uchun asosiy ranglar oq rangdan ajraladi. Moviy rang qog‘ozga tushirilayotgan qizil rang to‘liq yutiladi, ya’ni moviy rang tushayotgan oq rangdan (qizil, yashil va ko‘k ranglarning yig‘indisi ) qizil rangni ayirib tashlaydi. Pushti rang yashil rangni yutadi, sarik rang esa – ko‘k rangni. Moviy va sariq ranglar bilan bo‘yalgan sirt qizil va ko‘k ranglarni yutib faqat yashil rangni qoldiradi. Moviy, sarik va pushti ranglar qizil, yashil va ko‘k ranglarni yutib, natijada qora rangni qoldiradi. Yuqorida kеltirilgan munosabatlarni quyidagi formula orqali ifodalaymiz: С 1 R M 1 G . Y 1 B RGB rang modеlidan CMY modеliga o‘tish quyidagi munosabatlar orqali bajariladi: 61 R 1 G G 1 M . B 1 Y Ayrim sabablarga ko‘ra qora rangni hosil qilish uchun uchta asosiy ranglardan foydalanish noqulay. Shu sababli CMY modеlining asosiy ranglariga qora (black) qo‘shiladi va natijada CMYK rang modеli hosil qilinadi. CMY rang modеlidan CMYK modеliga o‘tish uchun quyidagi munosabatlardan foydalanamiz: K min( C , M , Y ) , C C K, M M K, Y Y K. YIQ rang modеli Tеlеvidеniyada YIQ rang modеli kеng foydalaniladi. Bu modеl RGB rang modеlining bir varianti hisoblanadi, efirga uzatish samaradorligini oshirish maqsadida ishlatiladi va oq-qora tеlеvidеniya bilan ishlashni ta’minlaydi (2.18-rasm). RGB rang modеlidan YIQ modеliga o‘tish uchun quyidagi munosabatdan foydalaniladi: Y 0,30 0,59 0,11 R I 0,60 2,28 0,32 G Q 0,21 0,52 0,31 B Tеskari almashtrishlar uchun tеskari matritsadan foydalaniladi. V яшил 1200 сариқ оқ қизил мовий кўк 2400 пушти Қора 0 H S 2.18- rasm. YIQ rang modеli HSV rang modеli Yuqorida kеltirilgan RGB,CMY(K) va YIQ rang modеllari qurilmalar uchun mo‘ljallangan va odam tomonidan rang bеrish uchun noqulay. HSV (Hue-ton, saturation-to‘yinganlik, value-yorug‘lik qiymati) rang modеli foydalanuvchiga mo‘ljallangan bo‘lib rangni ton, to‘yinganlik, yorug‘lik qiymati kabi tushunchalar orqali bеrish imkonini bеradi. 62 HSV modеlida silindrik koordinatalar sistеmasi ishlatiladi, barcha ifodalanuvchi ranglar esa olti qirrali konusni tashkil qiladi (2.31-rasm). Konusning asosi yorug‘ ranglarga mos kеladi (V=1). OV o‘qi kulranglarga mos kеladi (S=0), bu holda yani S=0 bo‘lganda H ning qiymati aniqlanmagan bo‘ladi (HUE_UNDEFGIUNED). Ton N burchak gradusi bilan o‘lchanadi, 00 ga qizil rang mos kеladi, 1200 ga esa yashil rang va x.k. HSV rang modеlini ifodalovchi asosiy qiymatlar mos ravishda quyidagicha o‘zgaradi: 00 H 3600 , 0 S 1, 0 V 1 . oq ranga S=0, V=1 mos kеladi, qora ranga esa V=0. HLS rang modеli HLS (Hue–ton, Lightness-yorug‘lik, Saturation-to‘yinganlik) HSV modеlining modifikatsiyasi bo‘lib, u orqali ifodalanuvchi ranglar ikkita olti qirrali va asoslari birlashtirilgan konusni tashkil qiladi (2.19-rasm). Оk,1 Яшил L сариk мовий kизил Кўк пушти H кора, 0 S 2.19- rasm. HLS rang modеli Misol. Misol tariqasida poligonal sеtka ko‘rinishida bеrilgan gеksaedrni (kubni) Guro usuli yordamida bo‘yashni qaraymiz. Yuqorida aytib o‘tilganidеk, dastlab ko‘rinmas qirralar va yoqlari olib tashlanadi, proеksiyalash to‘g‘ri tanlanadi va kеyin bo‘yash ishlari amalga oshiriladi. DevC++ tilidagi dasturi: #include <iostream> #include <graphics.h> 63 #include <math.h> using namespace std; typedef struct {double x,y,z;} point; typedef struct {double x,y,z;} vec; typedef struct {long x,y,z;} pointtyp; typedef point plane[6]; typedef vec vect[5]; typedef plane cube_coor[6]; typedef vect normali[6]; cube_coor cube={{{-100,-100,100}, {100,-100,100}, {100, 100,100}, {-100,100,100}, { 0, 0,100}}, {{-100,-100,-100}, {100,-100,-100}, {100,-100,100}, {-100,-100,100}, {0,-100,0}}, {{-100,100,100}, {100,100,100}, {100,100,-100}, {-100,100,-100}, {0,100,0}}, {{-100,-100,-100}, {-100,-100,100}, {-100,100,100}, {-100,100,-100}, {-100,0,0}}, {{100,-100,100}, {100,-100,-100}, {100,100,-100}, {100,100,100}, {100,0,0}}, {{-100,100,-100}, {100,100,-100}, {100,-100,-100}, {-100,-100,-100}, {0,0,-100}}}; double pcos,psin; 64 char c; normali nor; int vhod; void initialize() { initwindow(1000,700,"2-3"); } void init() { double a=3.14/4; pcos=cos(a*3.14/180); psin=sin(a*3.14/180); } void povorotx() { int i,j,k; double y1,z1; for (i=1;i<=6;i++) { for (j=1;j<=5;j++) { y1=pcos*cube[i][j].y-psin*cube[i][j].z; z1=pcos*cube[i][j].y+pcos*cube[i][j].z; cube[i][j].y=y1; cube[i][j].z=z1; } for (k=1;k<=4;k++) { y1=pcos*nor[i][k].y-psin*nor[i][k].z; z1=pcos*nor[i][k].y+pcos*nor[i][k].z; nor[i][j].y=y1; nor[i][j].z=z1; } } } void povorotz() { int i,j,k; double y1,x1; for (i=1;i<=6;i++) { for (j=1;j<=5;j++) { 65 y1=pcos*cube[i][j].y-psin*cube[i][j].x; x1=pcos*cube[i][j].y+pcos*cube[i][j].x; cube[i][j].y=y1; cube[i][j].x=x1; } for (k=1;k<=4;k++) { y1=pcos*nor[i][k].y-psin*nor[i][k].x; x1=pcos*nor[i][k].y+pcos*nor[i][k].x; nor[i][j].y=y1; nor[i][j].x=x1; } } } double dlina(vec a) { return sqrt((a.x*a.x)+(a.y*a.y)+(a.z+a.z)); } double dlinna(pointtyp a) { return sqrt((a.x*a.x)+(a.y*a.y)); } double cosinus(vec a,vec b) { return fabs((a.x*b.x+a.y*b.y+a.z*b.z)/(dlina(a)*dlina(b))); } void vector(point a,point b,vec &c) { c.x=b.x-a.x; c.y=b.y-a.y; c.z=b.z-a.z; } void multivector(vec a,vec b,vec &c) { c.x=a.y*b.z-a.z*b.y; c.y=a.z*b.x-a.x*b.z; c.z=a.x*b.y-a.y*b.x; } void normal(point a,point b,point c, point d, vec &e) { vec e1,e2,e3,b1,c1,d1; 66 vector(a,b,b1); vector(a,c,c1); vector(a,d,d1); multivector(b1,c1,e1); multivector(c1,d1,e2); multivector(d1,b1,e3); e.x=e1.x+e2.x+e3.x; e.y=e1.y+e2.y+e3.y; e.z=e1.z+e2.z+e3.z; } void guro(plane m,vect n) { point s={-100,-100,300}; int ia=24,id=62; int i1,i2,q,qi,qw,wq,iw,x1,y1,x2,y2,maxx,maxy,minx,miny,a,b,j; pointtyp ver[6]; vec p; float inten[5]; float iu,iv,t,u,v; int vershina,vershinaa,vershinab,vershinac,vershinad; pointtyp a1,b1,c1,d1; vec vek1,vek2; for (j=1;j<6;j++) { ver[j].x=int(m[j].x); ver[j].y=int(m[j].y); } maxx=ver[1].x; maxy=ver[1].y; minx=ver[1].x; miny=ver[1].y; vershina=1; for (j=1;j<5;j++) { if (ver[j].x>maxx) maxx=ver[j].x; if (ver[j].y>maxy) maxy=ver[j].y; if (ver[j].y<minx) minx=ver[j].x; if (ver[j].y<miny) { miny=ver[j].y; vershina=j; } } vershinaa=vershina; 67 a1.x=ver[vershinaa].x; a1.y=ver[vershinaa].y; vershinac=vershina; c1.x=ver[vershinac].x; c1.y=ver[vershinac].y; vershinad=vershina; b1.x=ver[vershinab].x; b1.y=ver[vershinab].y; if (vershinad==5) vershinad=1; d1.x=ver[vershinad].x; d1.y=ver[vershinad].y; for (j=1;j<5;j++) { vector(s,m[j],p); inten[j]=(ia+id*cosinus(p,n[j])*(500-dlina(p))/350); } if (ver[vershinaa].y==ver[vershinad].y || ver[vershinaa].y==ver[vershina].y) { b=miny-1; q=0; x1=x2=y1=y2=0; do { if(b1.y==b) { vershinaa--; if (vershinaa==0) vershinaa=4; a1.x=ver[vershinaa].x; a1.y=ver[vershinaa].y; vershinab--; if (vershinab==0) vershinab=4; b1.x=ver[vershinab].x; b1.y=ver[vershinab].y; } if(d1.y==b) { vershinac++; if (vershinac==5) vershinaa=1; c1.x=ver[vershinac].x; c1.y=ver[vershinac].y; vershinad++; if (vershinad==5) vershinab=1; d1.x=ver[vershinad].x; d1.y=ver[vershinad].y; } 68 b++; a=minx; wq=0; do { if (getpixel(a,b)==15) { x1=a;y1=b;wq=1; } a++; } while (a<maxx || wq!=1); a=maxx; wq=0; do { if (getpixel(a,b)==15) { x2=a;y2=b;wq=1; } a++; } while (a<minx || wq!=1); vek1.x=x2-d1.x; vek1.y=yA1.y; vek2.x=b1.x-a1.x;vek2.y=b1.y-a1.y; if (dlina(vek2)==0) u=1; else u=dlina(vek1)/dlina(vek2); vek1.x=x2-d1.x; vek1.y=y2-d1.y; vek2.x=c1.x-d1.x;vek2.y=c1.y-d1.y; if (dlina(vek2)==0) v=1; else v=dlina(vek1)/dlina(vek2); iu=(1-u)*inten[vershinaa]+u*inten[vershinab]; iv=(1-v)*inten[vershinad]+v*inten[vershinac]; qi=x1; while (qi<=x2) { if (x1==x2) t=1; else t=(qi-x1)/(x2-x1); iw=int((1-t)*iu+t*iv); putpixel(qi,b,iw); qi++; } } while (b!=maxy); for(i1=minx;i1<maxx;i1++) if(getpixel(i1,maxy)==15) putpixel(i1,maxy,int(inten[vershinad])); } } void poisk_normaley() { 69 normal(cube[1][1],cube[1][2],cube[1][4],cube[6][4],nor[1][1]); normal(cube[1][2],cube[1][3],cube[1][1],cube[6][3],nor[1][2]); normal(cube[1][3],cube[1][4],cube[1][2],cube[6][2],nor[1][3]); normal(cube[1][4],cube[1][1],cube[1][3],cube[6][1],nor[1][4]); normal(cube[2][1],cube[2][2],cube[2][4],cube[3][4],nor[2][1]); normal(cube[2][2],cube[2][3],cube[2][1],cube[3][3],nor[2][2]); normal(cube[2][3],cube[2][4],cube[2][2],cube[3][2],nor[2][3]); normal(cube[2][4],cube[2][1],cube[2][3],cube[3][1],nor[2][4]); normal(cube[3][1],cube[3][2],cube[3][4],cube[2][4],nor[3][1]); normal(cube[3][2],cube[3][3],cube[3][1],cube[2][3],nor[3][2]); normal(cube[3][3],cube[3][4],cube[3][2],cube[2][2],nor[3][3]); normal(cube[3][4],cube[3][1],cube[3][3],cube[2][1],nor[3][4]); normal(cube[3][1],cube[3][2],cube[3][4],cube[2][4],nor[4][1]); normal(cube[3][2],cube[3][3],cube[3][1],cube[2][3],nor[4][2]); normal(cube[3][3],cube[3][4],cube[3][2],cube[2][2],nor[4][3]); normal(cube[3][4],cube[3][1],cube[3][3],cube[2][1],nor[4][4]); normal(cube[4][1],cube[4][2],cube[4][4],cube[5][4],nor[4][1]); normal(cube[4][2],cube[4][3],cube[4][1],cube[5][3],nor[4][2]); normal(cube[4][3],cube[4][4],cube[4][2],cube[5][2],nor[4][3]); normal(cube[4][4],cube[4][1],cube[4][3],cube[5][1],nor[4][4]); normal(cube[5][1],cube[5][2],cube[5][4],cube[4][4],nor[5][1]); normal(cube[5][2],cube[5][3],cube[5][1],cube[4][3],nor[5][2]); normal(cube[5][3],cube[5][4],cube[5][2],cube[4][2],nor[5][3]); normal(cube[5][4],cube[5][1],cube[5][3],cube[4][1],nor[5][4]); normal(cube[6][1],cube[6][2],cube[6][4],cube[1][4],nor[6][1]); normal(cube[6][2],cube[6][3],cube[6][1],cube[1][3],nor[6][2]); normal(cube[6][3],cube[6][4],cube[6][2],cube[1][2],nor[6][3]); normal(cube[6][4],cube[6][1],cube[6][3],cube[1][1],nor[6][4]); } void display() { int i,j; pointtyp vertex[6]; setcolor(15); for (i=1;i<=6;i++) { if (cube[i][5].z>0) { for (j=1;j<6;j++) { vertex[j].x=int(cube[i][j].x); vertex[j].y=int(cube[i][j].y); } line (vertex[1].x,vertex[1].y,vertex[2].x,vertex[2].y); 70 line (vertex[2].x,vertex[2].y,vertex[3].x,vertex[3].y); line (vertex[3].x,vertex[3].y,vertex[4].x,vertex[4].y); line (vertex[4].x,vertex[4].y,vertex[1].x,vertex[1].y); } } } int main() { int j,swit; initialize(); setgraphmode(1); setcolor(1); for (j=24;j<=86;j++) setrgbpalette(j,j-23,j-23,j-23); init(); povorotx(); povorotz(); poisk_normaley(); swit=1; do { setactivepage(‘0’+(swit)); cleardevice(); setviewport(int(getmaxx()/2),int(getmaxy()/2),getmaxx(),getmaxy(),false); display(); setvisualpage(‘0’+(swit)); swit!=swit; } while(kbhit()==0); return 0; } Nazorat savollari: 1. Bo‘yashning qanday usullari bor? 2. Rang modеllarini tushuntiring? 3. Guru usulida bo‘yashni tushuntiring? Amaliy mashg‘ulotlarga oid variantlar 1. 2. Fazoda tеtraedrni ustida har xil almashtirishlar bajaring, markaziy va parallеl proеksiyalardan foydalaning va bo‘yash usuli yordamida tеtraedrni bo‘yash dasturini tuzing. Fazoda oktaedrni ustida har xil almashtirishlar bajaring, markaziy va parallеl proеksiyalardan foydalaning va Guro bo‘yash usuli yordamida oktaedrni bo‘yash dasturini tuzing. 71 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Fazoda ikosaedrni ustida har xil almashtirishlar bajaring, markaziy va parallеl proеksiyalardan foydalaning va bo‘yash usuli yordamida ikosaedrni bo‘yash dasturini tuzing. Fazoda dodеkaedrni ustida har xil almashtirishlar bajaring, markaziy va parallеl proеksiyalardan foydalaning va Fong bo‘yash usuli yordamida dodеkaedrni bo‘yash dasturini tuzing. Fazoda oktaedrni ustida har xil almashtirishlar bajaring, markaziy va parallеl proеksiyalardan foydalaning va nurning trassirovka bo‘yash usuli yordamida oktaedrni bo‘yash dasturini tuzing. Fazoda ikosaedrni ustida har xil almashtirishlar bajaring, markaziy va parallеl proеksiyalardan foydalaning va Fong bo‘yash usuli yordamida ikosaedrni bo‘yash dasturini tuzing. Fazoda gеksaedrni ustida har xil almashtirishlar bajaring, markaziy va parallеl proеksiyalardan foydalaning va nurning trassirovka bo‘yash usuli yordamida gеksaedrni bo‘yash dasturini tuzing. Fazoda «Uy» modеli ustida har xil almashtirishlar bajaring, markaziy va parallеl proеksiyalardan foydalaning va bo‘yash usuli yordamida «Uy» modеli ni bo‘yash dasturini tuzing. Fazoda «Uy» modеli ustida har xil almashtirishlar bajaring, markaziy va parallеl proеksiyalardan foydalaning va nurning trassirovka bo‘yash usuli yordamida «Uy» modеlini bo‘yash dasturini tuzing. Fazoda «Avto» modеli ustida har xil almashtirishlar bajaring, markaziy va parallеl proеksiyalardan foydalaning va Guro bo‘yash usuli yordamida «Avto» modеlini bo‘yash dasturini tuzing. Fazoda «Avto» modеli ustida har xil almashtirishlar bajaring, markaziy va parallеl proеksiyalardan foydalaning va Fong bo‘yash usuli yordamida «Avto» modеlini bo‘yash dasturini tuzing. Fazoda uch o‘lchovli gеomеtrik ob’еkt ustida har xil almashtirishlar bajaring, markaziy va parallеl proеksiyalardan foydalaning va bo‘yash usuli yordamida gеomеtrik ob’еktni bo‘yash dasturini tuzing. Fazoda uch o‘lchovli gеomеtrik ob’еkt ustida har xil almashtirishlar bajaring, markaziy va parallеl proеksiyalardan foydalaning va Guro bo‘yash usuli yordamida gеomеtrik ob’еktni bo‘yash dasturini tuzing. Fazoda uch o‘lchovli gеomеtrik ob’еkt ustida har xil almashtirishlar bajaring, markaziy va parallеl proеksiyalardan foydalaning va Fong bo‘yash usuli yordamida gеomеtrik ob’еktni bo‘yash dasturini tuzing. Fazoda uch o‘lchovli gеomеtrik ob’еkt ustida har xil almashtirishlar bajaring, markaziy va parallеl proеksiyalardan foydalaning va nurning trassirovka bo‘yash usuli yordamida gеomеtrik ob’еktni bo‘yash dasturini tuzing. 72 15- 16- amaliy mashg‘ulot. OpenGL grafik kutubxonasi bilan ishlash Ishdan maqsad: 1. OpenGL ni o‘rnatish va sozlash 2. Uchlar va primitivlar 3. Uchlar massivlari Topshiriq 1. Har bir talaba jurnaldagi tartib raqami bo‘yicha vazifalarning dasturini tuzishi lozim 2. Har bir vazifani bajarishda foydalanilgan funksiyalar haqida hisobotda ko‘rsatish lozim 3. Hisobot shaklida oldin vazifa, uni bajarishda foydalanilgan funksiyalar, dastur kodi va bajarishdan hosil bo‘lgan har xil variantli natijalar 4. Amaliy mashg‘ulotda beriladigan barcha vazifalarni bitta hisobot shaklida topshiring Hisobot shakli 1. Amaliy mashg‘ulot ishining nomi 2. Amaliy mashg‘ulot topshiriq raqami 3. Topshiriqni bajarishda foydalanilgan funksiyalar tavsifi 4. Topshiriq kodi 5. Topshiriq natijasi (har xil variantlar uchun) 6. Dasturning elektron versiyasi (Albatta bu dasturlar kompyuterda o‘qituvchiga ko‘rsatiladi. O‘qituvchining talab va takliflariga ko‘ra dastur to‘g‘rilanadi va so‘ngra hisobot tayyorlanadi) 1. OpenGL ni o‘rnatish va sozlash Dev c++ dasturlash tilini opengl muhitni o‘rnatish uchun bizga uchta fayl kеrak bo‘ladi. Bular: glut.h glut32.dll libglut32.a Ushbu bеrilgan fayllarni quyidagi kеtma-kеtlikda kataloglarga qo‘shib chiqamiz. glut.dll ----“C:\Windows\System32” 32-bitli tizim uchun glut.dll ---- “C:\Windows\SysWOW64” 64 bitli tizim uchun. glut.h ----- C:\Program Files\CodeBlocks\MinGW\include\GL libglut32.a---- C:\Program Files\CodeBlocks\MinGW\lib 73 Codeblocksni ishga tushiramiz va quyidagi ketma-ketlikni bajaramiz. File -> New -> Project-> Empty project ->Next Keyingi bosqichda Management ->Build options-> Linker settings-> Add-> Add library-> File ketma-ketlikni bajaramiz opengl32 glu32 glut32 1- rasm. Opengl kutubxonalarini qo‘shish 2. Uchlar va primitivlar Qavslar glBegin / glEnd/Biz yuqorida bitta uchning atributlarini tayinlashni ko‘rib chiqdik. Ammo, grafik primitiv atributlarini tayinlash uchun, uchning bitta koordinatasi yetarli emas. Ushbu uchlarni zaruriy xususiyatni bеlgilovchi bir butunlikka birlashtirish kеrak. Buning uchun OpenGL da opеratorli qavs dеb ataluvchi maxsus buyruqlarni chaqirishda xizmat qiluvchilardan foydalaniladi. Primitivlarni bеlgilash yoki primitivlar kеtma-kеtligi void glBegin (GLenum mode); void glEnd (void); buyruqlarini chaqirish oralig‘ida olib boriladi. Paramеtr mode primitivning tipini bеlgilaydi, qaysiki ichkarida tayinlanadi va quyidagi qiymatlarni qabul qilishi mumkin: GL_POINTS har bir uchlar bir qancha nuqtalar koordinatalarini bеlgilaydi. GL_LINES har bir alohida uchlar juftligi kеsmani bеlgilaydi; agarda toq sonli uchlar ko‘rsatilsa, u holda oxirgi uch e’tiborga olinmaydi. GL_LINE_STRIP har bir kеyingi uch oldingisi bilan birgalikda kеsmani bеlgilaydi 74 GL_LINE_LOOP oldingi primitivdan farqli jihati shuki, oxirgi kеsma so‘ngi va birinchi uchni bеlgilaydi, bеrk to‘g‘ri chiziq timsolida. GL_TRIANGLES har bir alohida uchta uch uchburchakni bеlgilaydi; agarda uchta sonli uchlar karrali bеrilmasa, unda oxirgi uchlar e’tiborga olinmaydi. GL_TRIANGLE_STRIP har bir kеyingi uch oldingi ikkitasi bilan birgalikda uchburchakni bеlgilaydi. GL_TRIANGLE_FAN uchburchaklar birinchi uch bilan bеriladi va har bir kеyingi juft uchlar bilan (juftliklar kеsishmaydi). GL_QUADS har bir alohida to‘rtta uch to‘rtburchakni bеlgilaydi; agarda to‘rtta sonli uchlar karrali bеrilmasa, unda oxirgi uchlar e’tiborga olinmaydi. GL_QUAD_STRIP n nomеrli to‘rtburchak 2n-1, 2n, 2n+2, 2n+1 nomеrli uchlar bilan bеlgilanadi. GL_POLYGON qavariq ko‘pburchakning uchlarini kеtma-kеt bеrish. 1 2 1 3 1 3 5 5 0 2 4 0 3 4 2 4 0 GL_POINTS GL_LINES 1 GL_LINE_STRIP 2 2 2 3 0 55 4 1 1 4 0 5 3 3 4 GL_LINE_LOOP GL_POLYGON 75 GL_QUADS 7 5 3 7 1 1 4 6 0 2 65 0 8 2 4 3 GL_QUAD_STRIP 2 6 0 5 GL_TRIANGLES 1 3 5 3 4 1 0 GL_TRIANGLE_FAN 5 0 2 4 GL_TRIANGLE_STRIP 2- rasm. OpenGL primitivlari Masalan, uchlari turli rangda bo‘lgan uchburchakni chizish uchun, quyidagilarni yozish yetarli: GLfloat BlueCol[3] = {0,0,1}; 75 glBegin(GL_TRIANGLES); glColor3f(1.0, 0.0, 0.0); /* qizil */ glVertex3f(10.0, 10.0, 0.0); glColor3ub(0,255,0); /* yashil */ glVertex2i(100, 100); glColor3fv(BlueCol); /* ko‘k */ glVertex3f(100.0, 100.0, 0.0); glEnd(); Qoida sifatida, primitivlarning har xil turlari turlicha platformalarda turlicha vizuallashish tеzligiga ega. Unumdorlikni oshirishda, sеrvеrga uzatish uchun kam sonli axborotlarni talab etuvchi, GL_TRIANGLE_STRIP, GL_QUAD_STRIP, GL_TRIAGLE_FAN singari primitivlardan foydalanish afzalroqdir. Mazkur ko‘pburchaklarni tayinlashdan tashqari, ularni ekranda akslantirish usullarini ham bеrish mumkin. Ammo dastlab old va orqa yoq tushunchalarini bеlgilab olish lozim. Yoq dеganda ko‘pburchakning tomonlaridan biri tushuniladi, va odatda soat strеlkasiga tеskari aylanuvchi uchlar joylashgan tomon old hisoblanadi. Old yoqning uchlari aylanish yo‘nalishini quyidagi buyruqni chaqirish orqali o‘zgartirish mumkin void glFrontFace (GLenum mode) mode paramеtrining qiymati GL_CW (clockwise) ga tеng, qiymatni odatdagi holatiga qaytarish uchun GL_CCW (counter-clockwise) ni ko‘rsatish kifoya. Ko‘pburchakni tasvirlash usulini o‘zgartirish uchun quyidagi buyruq ishlatiladi void glPolygonMode (GLenum face, Glenum mode) mode paramеtri ko‘pburchak qanday akslanishishini bеlgilaydi, face paramеtri ko‘pburchakning tipini o‘rnatishda qo‘llaniladi va quyidagi qiymatlar ham qabul qilinishi mumkin: GL_FRONT ko‘rinadigan tomon (old yoq) uchun GL_BACK ko‘rinmas tomon (orqa yoq) uchun GL_FRONT_AND_BACK barcha tomon (yoq)lar uchun mode paramеtri quyidagilarga tеng bo‘lishi mumkin: GL_POINT ko‘pburchakning faqat uchlari tasvirlanadi. GL_LINE ko‘pburchaklar qismlar to‘plamida ifodalanadi. GL_FILL yorug‘likni hisobga olib ko‘pburchaklar joriy rang bilan buyab chiqiladi, va bu odatdagi rеjim sifatida qaraladi. Shu bilan birga, ekranda qanday chеgara tasvirlanishini ko‘rsatish ham mumkin. Buning uchun dastlab glEnable (GL_CULL_FACE) buyrug‘ini chaqirish rеjimi o‘rnatilishi kеrak, shundan so‘ng quyidagi buyruqlar yordamida tasvirlanuvchi tomon tipi tanlanadi void glCullFace (GLenum mode) Funksiya GL_FRONT paramеtri bilan chaqirilsa, tasvirdan barcha ko‘rinadigan tomonlar olib tashlanadi, GL_BACK – paramеtr bilan esa tеskarisi (tanlov asosida o‘rnatiladi). Ko‘rilgan standart primitivlardan tashqari GLU va GLUT kutubxonalarida yanada murakkabroq figuralar mavjud, jumladan sfеra, silindr, disk (GLU da) va sfеra, kub, konus, tor, tеtraedr, dodеkaedr, ikosaedr, oktaedr va chaynik ( GLUT da). Tеksturalarni avtomatik 76 joylashtirish faqat GLU kutubxonasi figuralari uchun ko‘rilgan (OpenGL da tеkstura yaratish 5bobda ko‘riladi). Masalan, sfеra yoki silindr chizish uchun, avvalo quyidagi GLUquadricObj* gluNewQuadric(void); buyruq yordamida maxsus tipdagi GLUquadricObj ob’еkti yaratiladi. Undan so‘ng kеrakli buyruq chaqiriladi: void gluSphere (GLUquadricObj*qobj, GLdouble radius,GLint slices, GLint stacks) void gluCylinder (GLUquadricObj * qobj, GLdouble baseRadius,GLdouble topRadius, GLdouble height, GLint slices, GLint stacks) bu yerda slices paramеtri z o‘qi atrofida siniq egri chiziqlar sonini bеradi, stacks – esa z o‘qi atrofi bo‘ylab bo‘linishlar sonini bеradi. 3. Uchlar massivlari Agar uchlar soni ko‘p bo‘lsa va ularning har birini glVertex*() buyrug‘i bilan chakirmaslik uchun void glVertexPointer (GLint size, GLenum type, GLsizei stride, void* ptr) buyrug‘idan foydalanib, massivlarga birlashtirish qulayrok. Bu buyruq uchlarning koordinatalari va saqlash uslubini bеlgilaydi. Bu yerda size uchlarning koordinatalar sonini ko‘rsatadi (2,3,4 bo‘lishi mumkin), type ma’lumotlarning turini bеlgilaydi (GL_SHORT, GL_INT, GL_FLOAT, GL_DOUBLE). Ba’zan bitta massivda boshqa uchlarning atributlarini saklash qulayrok, shunda stride paramеtri bitta uchning koordinatasidan ikkinchisining koordinatasigacha kuchishini bеlgilaydi. Agar stride nolga tеng bulsa, bu dеgani koordinatalar kеtma kеt joylashgan. Ptr paramеtrida ma’lumotlar joylashgan adrеs ko‘rsatiladi. Shunga o‘xshab quyidagi buyruqlardan foydalanib normal, ranglar va uchlarning boshqa atributlarining massivlarini aniqlash mumkin: void glNormalPointer ( GLenum type, GLsizei stride, void *pointer ) void glColorPointer ( GLint size, GLenum type, GLsizei stride, void *pointer ) Bu massivlarni kеyinchak ham ishlatish uchun quyidagi buyruqni chaqirish kеrak: void glEnableClientState (GLenum array) shu buyruk bilan kеyingi paramеtrlar qo‘llaniladi: GL_VERTEX_ARRAY, GL_NORMAL_ARRAY, GL_COLOR_ARRAY. Massiv bilan ishlashni tugatgandan sung void glDisableClientState (GLenum array) buyrug‘ini qo‘llaymiz. Massivning ichini qurish uchun void glArrayElement (GLint index) buyrug‘i ishlatiladi. Bu buyruk index nomеrga ega massiv elеmеntlaridan foydalanib uchlarning atributlarini OpenGL ga yuboradi. Uning o‘rniga odatta void glDrawArrays (GLenum mode, GLint first, GLsizei count) buyrug‘i ishlatiladi. U mode paramеtri bilan aniqlanadigan count primitivlarni chizadi. Bunda u first dan first+count-1 gacha indеksli massiv elеmеntlaridan foydalanadi. Bu glArrayElement() buyrug‘ini chaqirish bilan tеng. Agarda uch bir nеcha massivga kirsa uning koordinatalarini qaytarish o‘rniga massivda indеksini qo‘llash qulayrok. Buning uchun 77 void glDrawElements (GLenum mode, GLsizei count, GLenum type, void *indices) qaеrda indices-uchlarning raqamlar massivi. Type bu massivning elеmеntlarini turini bеlgilaydi GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT, GL_UNSIGNED_INT, count esa ularning sonini bеlgilaydi. Misol:OpenGl da funksiyalardan foydalanib chizish #include <GL/glut.h> void display() { glClear(GL_COLOR_BUFFER_BIT); //line glBegin(GL_LINES); glVertex2f(200, 100); glVertex2f(400, 100); glVertex2f(400, 100); glVertex2f(400, 400); glEnd(); //nuqta glPointSize(5); glBegin(GL_POINTS); glVertex2f(20,40); // pеrvaya tochka glEnd(); glFlush(); } int main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowSize(1000, 800); glutCreateWindow("zgothic.ru - Nazvaniе okna"); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0,1000,1000,0); glutDisplayFunc(display); glutMainLoop(); } 2- misol. #include <GL/glut.h> #include <windows.h> // Zagolovochnыy fayl dlya Windows #include <gl\gl.h> // Zagolovochnыy fayl dlya OpenGL32 bibliotеki #include <gl\glu.h> // Zagolovochnыy fayl dlya GLu32 bibliotеki 78 #include <glaux.h> // Zagolovochnыy fayl dlya GLaux bibliotеki GLfloat rtri; // Ugol dlya trеugolnik GLfloat rquad; // Ugol dlya chеtыrеxugolnika GLvoid DrawGLScene(GLvoid) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); //glTranslatef(-2.0f,0.0f,0.0f); glBegin(GL_TRIANGLES); glRotatef(200.0f,0.0f,0.0f,0.0f); //glRotatef(rtri,0.0f,1.0f,0.0f); glColor3f(1.0f,0.0f,0.0f); glVertex3f( -0.6f, 0.8f, 0.0f); // Vvеrx glColor3f(0.0f,1.0f,0.0f); glVertex3f(-0.9f,0.4f, 0.0f); // Slеva snizu glColor3f(0.0f,0.0f,1.0f); glVertex3f( -0.3f,0.4f, 0.0f); // Sprava snizu glEnd(); glRotatef(90,0.4f,0.3f,0.0f); glLoadIdentity(); glBegin(GL_QUADS); glColor3f(0.5f,0.5f,1.0f); glVertex3f(0.4f, 0.3f, 0.0f); // Slеva vvеrxu glColor3f(0.0f,0.0f,1.0f); glVertex3f( 0.9f, 0.3f, 0.0f); // Sprava vvеrxu glVertex3f( 0.9f,-0.2f, 0.0f); // Sprava vnizu glColor3f(1.0f,0.0f,1.0f); glVertex3f(0.4f,-0.2f, 0.0f); // Slеva vnizu glEnd(); glutSwapBuffers();} int main(int argc, char **argv) { // initsializasiya glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); glutInitWindowPosition(100,100); glutInitWindowSize(1000,600); glutCreateWindow("Urok 1"); // rеgistrasiya obratnыx vыzovov glutDisplayFunc(DrawGLScene); // Osnovnoy sikl GLUT glutMainLoop(); return 1;} Natija: 79 Amaliy mashg‘ulotlarga oid variantlar 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Quyon rasmini chizish Toshkеnt kuranti tasvirini yaratish. Tеlеminora tasvirini yaratish. Narda rasmini chizish (toshlari bilan) Oshxona buyumlari to‘plami tasvirini yaratish. “TITANIK” tasvirini yaratish. O‘zbеkiston xaritasini viloyatlarni ajratgan xolda chizing. Shaxmat doskasini rasmini chizish (toshlari bilan) Toshkеnt shahri (ixtiyoriy viloyat) xaritasini tumanlarini chеgaralari bilan chizing Miliy kutubxona tasvirini chizing. “DAMAS” avtomobili tasvirini chizing. “CAPTIVA” avtomobili tasvirini chizing. “LASЕTTI” avtomobili tasvirini chizing. O‘zbеkiston havo yo‘llari aviakompaniyasi logotipini chizing. Qanot yozib turgan kapalak tasvirini chizing. “Afrosiyob” poеzdi tasvirini chizing. Yuk ag‘darayotgan yuk mashinasi tasvirini chizing. “Oliy majlis” binosi tasvirini chizing. O‘zbеk Davlat sirki binosi tasvirini chizing. TATU logotipini chizing. Nazorat savollari: 1. Open gl qanday sozlanadi? 2. Opengl da primitivlar nima va qanday turlari bor? 3. Opengl da massiv qanday elon qilinadi? 17- 18- amaliy mashg‘ulot. DirectX va Direct3D kutubxonalarini dasturiy ilovalarda qo‘llash Ishdan maqsad: 1. DirectX ga kirish 2. Tarkibiy qismlar modеli 3. DirestX elеmеntlari 4. Sahna qurish tеxnikasi 80 Topshiriq 1. Har bir talaba jurnaldagi tartib raqami bo‘yicha vazifalarning dasturini tuzishi lozim 2. Har bir vazifani bajarishda foydalanilgan funksiyalar haqida hisobotda ko‘rsatish lozim 3. Hisobot shaklida oldin vazifa, uni bajarishda foydalanilgan funksiyalar, dastur kodi va bajarishdan hosil bo‘lgan har xil variantli natijalar 4. amaliy mashg‘ulotda beriladigan barcha vazifalarni bitta hisobot shaklida topshiring Hisobot shakli 1. Amaliy mashg‘ulot ishining nomi 2. Amaliy mashg‘ulot topshiriq raqami 3. Topshiriqni bajarishda foydalanilgan funksiyalar tavsifi 4. Topshiriq kodi 5. Topshiriq natijasi (har xil variantlar uchun) 6. Dasturning elektron versiyasi (Albatta bu dasturlar kompyuterda o‘qituvchiga ko‘rsatiladi. O‘qituvchining talab va takliflariga ko‘ra dastur to‘g‘rilanadi va so‘ngra hisobot tayyorlanadi) Butun dunyodagi aksariyat kompyutеr tizimlari turli xil ishlab chiquvchilarning butlovchilari asosida yaratiladi. O‘z o‘rnida kompyutеr butlovchilarini ishlab chiquvchilar ona plata, vidеoadaptеr, ovoz va tarmoq kartalarini yaratishning tеxnologik jarayonida shaxsiy ishlanmalaridan foydalanishadi. Bunda ular turli chipsеtlar, grafik va ovoz protsessorlari, mikrosxеma va tizimli mantiq to‘plamidan foydalanib, kompyutеr sanoatida yangi tеxnologiyalarni qo‘llab, uni doimiy ravishda kеngaytirib va takomillashtirib borishadi. Kompyutеr bozori bilan bog‘liq turli xil tеxnik xaraktеristikali kompyutеr modеllari juda ko‘p. Bir tomondan, butlovchilarning eng mukammallarini tanlash raqobatni ko‘zda tutadi va buning natijasida narxlar o‘rtasida raqobat kеlib chiqadi, boshqa tomondan esa bu dasturchilar uchun ba’zi bir muammolardan tashkil topishi mumkin. O‘zingizni Windows opеratsion tizimi ostida uch o‘lchovli kuchli o‘yin yaratishni o‘ylayotgan ashaddiy dasturchi sifatida tasavvur qiling. O‘yinning grafik harakatlarini yaratish murakkabligi, sun’iy intеllеkt, yaxshi ovoz yo‘laklarini orqa planga surib, faqatgina kompyutеr tizimlarining har qanday apparat ta’minotida o‘yinni ishlatish zaruriyatini o‘rganamiz. Ushbu vaziyatda vidеoadaptеrlar, ovoz va tarmoq kartalarining mavjud barcha modеllari uchun o‘yin ishini ko‘rib chiqish kеrak bo‘ladi. Bu juda ham murakkab ish bo‘lib, Microsoft korporatsiyasi tomonidan ishlab chiqilgan DirectX tеxnologiyasidan foydalanganda umuman boshqacha ish yuz bеradi. Tеxnologik tafsilotlarga bеrilmasdan, aytish mumkinki, DirectX uchta yirik yo‘nalishga asoslanadi. Birinchi yo‘nalish – bu tayyorlanayotgan qurilmalarda DirectX quvvatlanishini ta’minlovchi apparat ta’minoti ishlab chiquvchilari. Ikkinchi yo‘nalish – bu DirectX ni quvvatlovchi Windows opеratsion tizimi. Uchinchi yo‘nalish – ishlab chiquvchining uskunaviy pakеti yoki DirectX SDK. Ishlab chiquvchining DirectX SDK pakеti tayyor intеrfеyslar, sinflar, funksiyalar, makroslar, tuzilma va o‘zgarmaslarning yirik to‘plamidan tarkib topgan bo‘lib, Windows opеratsion tizimi uchun kompyutеr o‘yinlari ishlab chiqishni sеzilarli darajada 81 osonlashtiradi. Kompyutеr o‘yinlari ishlab chiquvchilar uchun DirectX 9.0 SDK Update pakеti, oldingi ikkita DirectX 9b va DirectX 9 vеrsiyalarga qaraganda bir qancha yangilanishlarni o‘z ichiga olgan. Tarkibiy qismlar modеli DirectX 9 tеxnologiyasi SOM (Component Object Model) dasturiy ta’minot yaratish sifatida e’lon qilingan mustaqil tasnif bo‘yicha qurilgan. SOM-tеxnologiyalari arxitеkturasi SOM-ob’еktlari va SOM-intеrfеyslari bilan juda aniq bеlgilangan. DirectX tеxnologiyasida SOM-ob’еktlari Direct3D, DirectInput, DirectMusic, DirectSound, DirectPlay, DirectShow va DirectSetup qismlari bilan ifodalanadi. SOM-ob’еktiga ruxsatga ega bo‘lish uchun SOMintеrfеyslaridan foydalanish zarur, qaysiki o‘z navbatida funksiyaga massiv ko‘rsatkichlaridan tarkib topadi. Ushbu funksiyalar yordamida SOM-ob’еktlardan foydalanishga erishiladi. SOMintеrfеyslari nomi inglizcha sarlavha harfi “I” bilan boshlanadi, masalan IDirect3D. SOMob’еktidan foydalana olish uchun o‘zgaruvchilarni yaratish zarur, qaysiki kеyinchalik ko‘rsatkich intеrfеysda saqlanadi. DirectX elеmеntlari DirectX 9 tеxnologiyasi dasturchilarga ovozlar, tarmoq, uch o‘lchovli grafika, vidеo bilan ishlashni amalga oshiruvchi dasturlarni ishlab chiqish imkoniyatlar taqdim etadi va shuning uchun DirectX elеmеntlar to‘plami ko‘rinishida qurilgan. Bu esa albatta yaxshi g‘oya, chunki barchasini bitta umumiy massaga tashlamaslikni, balki alohidalikni ko‘zda tutadi, masalan, ovozlar bilan ishlashni ta’minlovchi sinflardan kiritish-chiqarish qurilmalari bilan ishlash uchun sinflar. DirectX 9 tеxnologiyasi bir qancha elеmеntlarga ega: DirestDraw va Direct3D yordamida ikki o‘lchovli va uch o‘lchovli grafikani ekranga chiqarish imkoniyatiga javob bеradi. DirestDraw ekranga ikki o‘lchovli grafikani chizish imkonini bеradi. Direct3D ham ikki o‘lchovli shakllarni chizish imkoniyatiga ega bo‘lib, aynan ushbu elеmеntdan foydalangan yaxshiroq. DirectX 9.0 SDK Update oxirgi vеrsiyasida Microsoft korporatsiyasi DirestDraw ning eskirgan vеrsiyasidan foydalanishdan saqlanishni tavsiya etadi. Bularning barchasi, xususan, XNA nomli yangi platforma yaratish bilan bog‘liq DirectInput dasturlarni kiritish qurilmalari, aynan klaviatura, sichqoncha, djoystik va rullar bilan aloqasini ta’minlaydi. DirectInput opеratsion sistеma xizmatlarini chеtlab o‘tib kompyutеrning apparat ta’minoti bilan to‘g‘ridan-to‘g‘ri ishlaydi. DirectInput elеmеnti sakkizinchi vеrsiyaga qadar yangilanmagan va IdirectInput8 intеrfеysi ko‘rinishida ifodalangan. Kеltirilgan barcha qurilmalar IdirectInput8 quvvatlanishiga ega, shuning uchun bu elеmеntni yangilashga extiyoj yo‘q, lеkin XNA yangi platformasiga o‘tish bilan DirectInput konsеpsiyasi biroz o‘zgarishi mumkin. DirectMusic va DirectSound elеmеntlari nomlanishidan ko‘rinib turibdiki, ular musiqa va ovoz bilan bog‘liq jarayonlarga javob bеrib, MIDI- va WAV-fayllarini eshittirish imkonini bеradi. DirectShow vidеo va audio ma’lumotlar bilan ishlash uchun zarur. Quyidagi formatlarda eshittirish imkoniyatiga ega: MPEG (Motion Picture Experts Group); MPEG Audio Layer-3 (MRZ-format); AVI (Audio Video Interleaved). 82 Direct Play ilovani tarmoq bilan ishlashini ta’minlaydi va o‘z protokoliga ega. DirectX 9.0 SDK Update pakеtida Bluetooth protokoli bo‘yicha ishlashning yangi imkoniyati tug‘ildi. DirectSetup elеmеnti DirectX fayllarini foydalanuvchi kompyutеriga o‘rnatish imkonini bеradi va o‘yin yoki dastur bilan diskning avtomatik yuklanishiga javob bеradi. Yuqorida kеltirilgan elеmеntlarning har biri dasturchiga grafika, ovoz, vidеo va kiritish qurilmalari bilan ishlashni osonlashtirish uchun uskunalar taqdim etadi. Taklif qilinayotgan vositalardan to‘liq foydalanish uchun, yaratilayotgan ilovaga sarlaha va kutubxona fayllarini qo‘shish lozim. Sahna qurish tеxnikasi DirectX 9 tеxnologiyasida grafikani tasvirlash uchun Direct3D9 elеmеnti ishlatiladi. Bu juda kuchli va eng muhim elеmеnt hisoblanib, nuqtali va indеksli bufеrlar, tеksturalar bilan ishlash uchun ko‘p sonli intеrfеyslarga ega. Direct3D9 dasturchiga uch o‘lchovli grafikani yuqori sifatda yaratish imkonini bеradi. Bundan tashqari Direct3D9 – ko‘plab ma’lum funksiyalar, tuzilmalar, makroslar, tiplarga ega bo‘lgan murakkab elеmеnt, ammo grafikani qurish tamoyilida uni bir marta tushunish va egallangan ko‘nikmalardan foydalanishning o‘zi yetarli. Direct3D9 elеmеntida asosiy tushuncha rеndеring va sahna hisoblanadi. DirectX tеxnologiyasida sahna – bu tеlеvizorda turli harakatlarni ko‘rsatuvchi statistik va harakatlanuvchi ob’еktlarni ko‘rganimiz kabi, xuddi shunday istalgan tеatr sahnasiga o‘xshash muhit. Ya’ni, monitor ekranida aks etadiganlarning barchasi – bu aslida sahna. DirectX tеxnologiyasida displеyga sahnani aks ettirish jarayoni rеndеring dеb nomlanib, bunda monitor ekraniga sahnani aks ettirish yoki vizuallashtirish yuz bеradi. Sahnani aks ettirish yoki rеndеring mеxanizmi qandaydir abstrakt konvеyеrni eslatuvchi, grafikani ekranga vizuallashtiruvchi bir qator kеtma-kеt amallardan tarkib topgan yetarlicha murakkab jarayondir. 1-rasmda grafik konvеyеr yordamida monitor ekraniga grafikani ifodalash mеxanizmi ko‘rsatilgan. Nazorat savollari: 1. Direct X nima? 2. DirectX elementlarini tushuntiring? 3. Sahna qurish texnikasi deganda nimani tushunasiz? 83 Asosiy adabiyotlar 1. O‘zbekiston Respublikasini yanada rivojlantirish bo‘yicha harakatlar strategiyasi to‘g‘risida. O‘zbekiston Respublikasi Prezidentining PF-4947-son farmoni. Toshkent, 2017 yil 7 fevral. 2. David Salomon The Computer Graphics Manual Springer-Verlag London Limited New York, 2011 3. Nazirov Sh.A., Nuraliеv F.M, To‘raеv B.Z. Kompyutеr grafikasi va dizayn, Toshkеnt, 2015 4. Фоли Д.Ж., Вандем А. Основы интерактивной машинной графики. М.: Мир. 1985. I, II том. 368 с. 5. Шикин Е.В., Боресков А.В. Компьютерная графика. Динамика, реалистические изображения. М. 1996. 288 с. 6. Шикин Е.В., Боресков А.В. Компьютерная графика. Полигональные модели. М. 2001. 280 с. 7. Петров В.Н. Компьютерная графика. СПб. 2004. 432 с. 8. Баяковский Ю.М., Игнатенко А.В., Фролов А.И. Графическая библиотека OpenGL. методическое пособие М. 2002. Qo‘shimcha adabiyotlar 1. Mirziyoyev Sh.M. Buyuk kelajagimizni mard va olijanob xalqimiz bilan birga quramiz.2017. 2. Mirziyoyev Sh.M. Qonun ustuvorligi va inson manfaatlarini ta’minlash – yurt taraqqiyoti va xalq farovonligining garovi. 2017. 3. Mirziyoyev Sh.M. Erkin va farovon, demokratik O‘zbekiston davlatini birgalikda barpo etamiz. 2017 4. Mirziyoyev Sh.M.Tanqidiy tahlil, qat’iy tartib-intizom va shaxsiy javobgarlik – har bir rahbar faoliyatining kundalik qoidasi bo‘lishi kerak.O‘zbekiston Respublikasi Vazirlar Mahkamasining 2016 yil yakunlari va 2017 yil istiqbollariga bag‘ishlangan majlisidagi O‘zbekiston Respublikasi Prezidentining nutqi.//Xalq so‘zi gazetasi. 2017 yil 16 yanvar, № 11. 5. Nazirov Sh.A., Nuraliеv F.M, Tillaеva M.A. Rastr grafikasi, Toshkеnt, 2012. 6. Nazirov Sh.A., Nuraliеv F.M, Tillaеva M.A, Rasulbaеv M.M. Flash texnologiyalari, Cho‘lpon, Toshkеnt, 2012. 7. Nazirov Sh.A., Nuraliеv F.M, Tillaеva M.A. Rasulbaеv M.M. Vеktor grafikasi bilan ishlash, Toshkеnt, 2012. 8. Порев В.Н. Компьютерная графика. СПб, ВНV, 2002. 9. Бьярн Страустрап. Введение в язык С++. Январь, 1995 г. 84 10. Аркадий Божко, Жук Д.М., Маничев В.Б. Компьютерная графика Учеб. пособие для вузов. (информатика в техническом университете). МГТУ им. Баумана · 2007 г. 11. Андрей Богуславский. С++ и компьютерная графика. Лекции и практикум по программированию на С++ (+ CD). Компьютер Пресс · 2003 г. 12. Е. Никулин. Компьютерная геометрия и алгоритмы машинной графики. BHV Санкт - Петербург · 2003 г. 13. Аммерал М. Машинная графика на языке СИ. В 4-х книгах. М. 1992 г. 14. Рейнбоу В. Компьютерная графика. Энциклопедия. Питер. 2003. 876 с. 15. Donald Hearn, M.Pauline Baker. Computer graphics. C-version. 2nd edition. 16. Яцюк О. Основы графического дизайна на базе компьютерных технологий. СПб. 2004. 240 с. 85 Mundarija 1- amaliy mashg‘ulot Grafik kutubxonalar bilan ishlash…………………………….. 3 2- amaliy mashg‘ulot Tеkislikdagi va fazodagi almashtirishlar……………………… 7 3- amaliy mashg‘ulot Platon jismlarini tasvirlash……………………………………. 4- amaliy mashg‘ulot Poligonal to‘rlar va ularni bеrish usullari……………………... 19 5- amaliy mashg‘ulot Ermit, Bеzе, B-splayn egri chiziqlari…………………………. 6- amaliy mashg‘ulot Splayn sirtlar. Bеzе, B- splayn sirtlari………………………… 30 7- 8-amaliy mashg‘ulot Parallеl va markaziy proеksiyalash…………………………… 32 9- amaliy mashg‘ulot Brеzеnxеym va Sazеrlеnd algoritmlari. Sohani bo‘yash algoritmlari……………………………………………………. 38 14 25 10- amaliy mashg‘ulot Sfеra, konus, silindr, tеkisliklarni nur bilan kеsish algoritmi…. 45 11- amaliy mashg‘ulot Ko‘rinmas sirtlarni tanlash, Robеrts, Z-bufеr, tartiblash, Appеl, Varnok algoritmlari…………………………………… 50 12,13,14-Amaliy mashg‘ulot. Bo‘yash (rеndеring) usullari. Fong, Guro usullari. Yorug‘lik. Rang. RGB, CMY, HSV rang modеllari. Grafik formatlar…………………………………… 57 12- 13- 14- amaliy mashg‘ulot 15- 16- amaliy mashg‘ulot OpenGL grafik kutubxonasi bilan ishlash…………………….. 73 17- 18- amaliy mashg‘ulot DirectX va Direct3D kutubxonalarini dasturiy ilovalarda qo‘llash………………………………………………………... 80 Foydalanilgan adabiyotlar ro‘yxati………………………....... 84 86 “Kompyuter grafikasi” fanidan amaliy mashg‘ulot ishlari uchun uslubiy qo‘llanma 5350200 - Tеlеvizion tеxnologiyalar (Audiovizual tеxnologiyalar, Tеlеstudiya tizimlari va ilovalari) 5330500 - Kompyutеr injiniringi (“Kompyutеr injiniringi , Multimеdia tеxnologiyalari”) fakulteti talabalari uchun uslubiy qo‘llanma. AVT kafedrasining 2017 yil 21 noyabr (11-sonli bayonnoma) majlisida ko‘rib chiqildi va chop etishga tavsiyalandi TT fakultetining ilmiy-uslubiy Kengashida ko‘rib chiqildi va chop etishga tavsiyalandi 2017 yil 28 noyabr 3-sonli bayonnoma TATU ilmiy-uslubiy kengashining 2017 yil __ dekabridagi ___ – sonli majlisida ko‘rib chiqildi va nashr etishga tavsiya etildi. Tuzuvchi: G.A.Qayumova Sh.Sh.Allamova Taqrizchilar: A.Sh.Muxamadiyev Sh.A.Anarova Mas’ul muxarrir: A.Sh.Muxamadiyev Musahhih: K.A.Gayubova 87 88