Uploaded by И м и л ь

Kompyuter Grafikasi: Amaliy Mashg'ulotlar Uslubiy Qo'llanma

advertisement
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 ) 4i 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 di0 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 D0 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
Download