logo

C++ tilining grafik imkoniyatlari. Inisializasiyallash. Ekrandan foydalanish. Grafik holat. Funksiya grafiklarini qurish

Yuklangan vaqt:

28.07.2023

Ko'chirishlar soni:

0

Hajmi:

1185 KB
C++ tilining grafik imkoniyatlari. Inisializasiyallash. Ekrandan foydalanish. Grafik holat. Funksiya grafiklarini qurish Koordinatalar sistemasi (0,0) ( x , y ) X( 640) Y (480) x y “ Sendvich” prinsipi Grafik rejimida ishlashGrafik rejimida ishlashGrafika uchun oyna ochishGrafika uchun oyna ochish Grafika oynasini yopishGrafika oynasini yopish C/C++ tilining grafik imkoniyatlarini ishga tushirish uchun quyidagi direktiva ulanishi kerak: ## include <graphics.h>include <graphics.h> Matn rejimidan grafik rejimiga o’tish uchun maxsus proseduradan foydalaniladi: initgraph (&gd, &gm, “ path “);initgraph (&gd, &gm, “ path “); bu erda:bu erda: gd – drayver nomigd – drayver nomi gm – rejim nomigm – rejim nomi path – yo’lpath – yo’l Borland C++ da grafika #include <graphics.h> #include <conio.h> void main( ) { int gd=0, gm ; int gd=0, gm ; ... // dastur getch( ); }#include <graphics.h> #include <conio.h> void main( ) { int gd=0, gm ; int gd=0, gm ; ... // dastur getch( ); } initgraph (&gd, &gm, “ c:\bc\bin “);initgraph (&gd, &gm, “ c:\bc\bin “); closegraph();closegraph(); Grafik dasturning strukturasi (Borland C++) Grafik rejimni yopish funksiyasiGrafik rejimni yopish funksiyasi Kerakli fayllarni ulash Kerakli fayllarni ulash Grafik rejimni o’rnatish funksiyasiGrafik rejimni o’rnatish funksiyasi #include <graphics.h> int main( ) { initwindow(640, 480);initwindow(640, 480); ... // dastur getch( ); closegraph(); return 0; }#include <graphics.h> int main( ) { initwindow(640, 480);initwindow(640, 480); ... // dastur getch( ); closegraph(); return 0; } Grafik dasturning strukturasi (Dev-C++) Kerakli fayllarni ulash Kerakli fayllarni ulash Dev-C++ da grafika bilan ishlash uchun quyidagi sozlashlarni bajarish lozim : graphics.h va libbgi.a ( biblioteka ) fayllarni yuklab oling . 1. graphics.h faylni C:\Dev-Cpp\include papkaga nusxa ko’chiring . 2. libbgi.a faylni C:\Dev-Cpp\lib papkaga nusxa ko’chiring . Dev-C++ ni ishga tushiring va Tools  Compiler options menyusiga kiring . Compiler bo’limiga o’ting va Add these commands to the linker command line ga ptichka qo’ying va uning oynasiga satrni qo’shing -lbgi -lgdi32 -lcomdlg32 -luuid -loleaut32 -lole32 Quyida rasmda ko’rsatilgan : Dev-C++ da grafika bilan ishlash uchun quyidagi sozlashlarni bajarish lozim : graphics.h va libbgi.a ( biblioteka ) fayllarni yuklab oling . 1. graphics.h faylni C:\Dev-Cpp\include papkaga nusxa ko’chiring . 2. libbgi.a faylni C:\Dev-Cpp\lib papkaga nusxa ko’chiring . Dev-C++ ni ishga tushiring va Tools  Compiler options menyusiga kiring . Compiler bo’limiga o’ting va Add these commands to the linker command line ga ptichka qo’ying va uning oynasiga satrni qo’shing -lbgi -lgdi32 -lcomdlg32 -luuid -loleaut32 -lole32 Quyida rasmda ko’rsatilgan : Dev-C++ da grafika va uni sozlash Dev-C++ da grafika va uni sozlash Ranglar kodi Kod Nomi 0 BLACK 1 BLUE 2 GREEN 3 CYAN 4 RED 5 MAGENTA 6 BROWN 7 LIGHTGRAY Ко d Nomi 8 DARKGRAY 9 LIGHTBLUE 10 LIGHTGREEN 11 LIGHTCYAN 12 LIGHTRED 13 LIGHTMAGENTA 14 YELLOW 15 WHITE Ranglar politrasi rang = R + G + B Red qizil 0..255 Blue Ko’k 0..255Green yashil 0..255 R = 218 G = 164 B = 32 R = 135 G = 206 B = 250 Ranglar soni qancha ? ? 256 · 256 · 256 = 16 777 216 ( True Color ) Ranglarni boshqarish Chiziq va matn rangi : set color = rangini o’rnat setcolor ( 12 ); setcolor ( COLOR(255,255,0) ); Rang to’kish usuli: set fill style = rang to’kish usulini o’rnat setfillstyle ( usul , rang ); 0 – usulsiz; 1 – uzluksiz; 2 – gorizontal chiziq; 3..6 – turli og’ma chiziqlar; 7..8 – setkali chiziqlar; 9..11 – nuqtali;0 – usulsiz; 1 – uzluksiz; 2 – gorizontal chiziq; 3..6 – turli og’ma chiziqlar; 7..8 – setkali chiziqlar; 9..11 – nuqtali;Rang №Rang № RR GG BB Nuqta, kesma, siniq chiziq ( x 1 , y 1 ) ( x 2 , y 2 ) setcolor ( 10 ) ; line(x1, y1, x2, y2) ;setcolor ( 10 ) ; line(x1, y1, x2, y2) ;( x , y ) putpixel (x, y, 9 );putpixel (x, y, 9 ); ( x 1 , y 1 ) ( x 2 , y 2 ) ( x 3 , y 3 ) ( x 4 , y 4 )( x 5 , y 5 ) setcolor ( 12 ) ; moveto (x1, y1) ; lineto (x2, y2) ; lineto (x3, y3) ; lineto (x4, y4) ; lineto (x5, y5) ;setcolor ( 12 ) ; moveto (x1, y1) ; lineto (x2, y2) ; lineto (x3, y3) ; lineto (x4, y4) ; lineto (x5, y5) ;RangiRangi To’g’ri to’rtburchaklar ( x 1 , y 1 ) ( x 2 , y 2 ) setcolor ( 9 ) ; rectangle (x1, y1, x2, y2) ;setcolor ( 9 ) ; rectangle (x1, y1, x2, y2) ; ( x 1 , y 1 ) ( x 2 , y 2 ) setfillstyle ( 1, 12 ) ; bar (x1, y1, x2, y2) ;setfillstyle ( 1, 12 ) ; bar (x1, y1, x2, y2) ; ( x 1 , y 1 ) ( x 2 , y 2 ) setfillstyle ( 1, 12 ); bar (x1, y1, x2, y2); setcolor ( 9 ) ; rectangle (x1, y1, x2, y2) ;setfillstyle ( 1, 12 ); bar (x1, y1, x2, y2); setcolor ( 9 ) ; rectangle (x1, y1, x2, y2) ;12-rang12-rang uzluksizuzluksiz Aylana, rang to’kish, matn yozish setcolor (4) ; circle ( x, y, R ) ;setcolor (4) ; circle ( x, y, R ) ; setfillstyle ( 1, 11 ) ; floodfill ( x, y, 0) ;setfillstyle ( 1, 11 ) ; floodfill ( x, y, 0) ;( x , y )( x , y ) R Chegara rangi nomeriChegara rangi nomeri ( x , y ) Eng zo’r dastur setcolor ( 9 ) ; outtextxy( 10 , 10 ,“Eng zo’r dastur”) ;setcolor ( 9 ) ; outtextxy( 10 , 10 ,“Eng zo’r dastur”) ; Masalan: (200, 50) (100, 100) (300, 200) setfillstyle (1, 9); bar (100,100,300,200); setcolor (13); rectangle (100,100,300,200); moveto (100,100); lineto (200, 50); lineto (300,100); setfillstyle (1, 14); floodfill (200, 75, 13); setcolor (15); circle (200, 150,50); setfillstyle (1, 10); floodfill (200,150, 15); setcolor (12); outtextxy (100, 2 3 0, &#34;Sharik&#39;s house.&#34;);setfillstyle (1, 9); bar (100,100,300,200); setcolor (13); rectangle (100,100,300,200); moveto (100,100); lineto (200, 50); lineto (300,100); setfillstyle (1, 14); floodfill (200, 75, 13); setcolor (15); circle (200, 150,50); setfillstyle (1, 10); floodfill (200,150, 15); setcolor (12); outtextxy (100, 2 3 0, &#34;Sharik&#39;s house.&#34;);Sharik&#39;s house ( 3 00, 100) Topshiriq 1 : “Qurbaqa&#34; 2 : “Toj&#34; 18 Штри хлаш ( x 1 , y 1 ) ( x 2 , y 2 )N та чизиқ ( N=5)N та чизиқ ( N=5) h 1 12   N xx h rectangle (x1, y1, x2, y2) ; line( x1+h, y1, x1+h, y2) ; line( x1+2*h, y1, x1+2*h, y2) ; line( x1+3*h, y1, x1+3*h, y2) ; ... h = (x2 – x1) / (N + 1.); rectangle (x1, y1, x2, y2) ; for (x = x1+h; x < x2; x += h) line(x, y1, x, y2) ;h = (x2 – x1) / (N + 1.); rectangle (x1, y1, x2, y2) ; for (x = x1+h; x < x2; x += h) line(x, y1, x, y2) ; xx x нинг каср қисми ташланиб юборилади x нинг каср қисми ташланиб юборилади xx float x, h; ! Каср қисмидаги натижаКаср қисмидаги натижа 19 Ранг қандай ўзгартирилади ? ( x 1 , y 1 ) ( x 2 , y 2 ) setfillstyle ( 1, c ); floodfill( ??? , ??? , 15 );setfillstyle ( 1, c ); floodfill( ??? , ??? , 15 );заливк а рангизаливк а ранги с ни ўзгартириш : 1, 2, 3, ...x ( x-1 , y 1 +1 )( x-1 , y 1 +1 ) for (x = x1+h; x <= x2; x += h) { line (x, y1, x, y2) ; setfillstyle ( 1, ); floodfill ( x-1 , y1+1 , 15); }for (x = x1+h; x <= x2; x += h) { line (x, y1, x, y2) ; setfillstyle ( 1, ); floodfill ( x-1 , y1+1 , 15); }c = 1 ;c = 1 ; cc c ++ ;c ++ ; чегара рангичегара ранги <=<= Нимада муаммо бўлиши мумкин?? 20 Штрих лаш ( x 1 , y 1 ) ( x 2 , y 2 ) ( x 3 , y 2 )a h 1 23   N xx h2 1 x x a   ( x 3 + a , y 1 ) line( x1+h, y1, x1+h-a, y2) ; line( x1+2*h, y1, x1+2*h-a, y2) ; line( x1+3*h, y1, x1+3*h-a, y2) ; ... h = (x3 – x2) / (N + 1.); a = x2 – x1; x = x1 + h; for (i = 1; i <= N; i ++, x += h ) line(x, y1, x-a, y2) ;h = (x3 – x2) / (N + 1.); a = x2 – x1; x = x1 + h; for (i = 1; i <= N; i ++, x += h ) line(x, y1, x-a, y2) ; xx x-ax-a i ++, x += h Ҳар бир қадамдан сўнг иккита бўйруқ бажарилади Ҳар бир қадамдан сўнг иккита бўйруқ бажарилади Плюс ва минус лар? ? 21 Штрих лаш ( x 1 , y 1 ) ( x 2 , y 2 )h x h y yy xx yyline( x1, y1+hy, x1+hx, y1+hy) ; line( x1, y1+2*hy, x1+2*hx, y1+2*hy) ; line( x1, y1+3*hy, x1+3*hx, y1+3*hy) ; ... 1 12   N xx h x 1 12   N yy h y hx = (x2 – x1) / (N + 1.); hy = (y2 – y1) / (N + 1.); x = x1 + hx; y = y1 + hy; for (i=1; i<=N; i++) { line ( x1, y, x, y ) ; x += hx; y += hy; }hx = (x2 – x1) / (N + 1.); hy = (y2 – y1) / (N + 1.); x = x1 + hx; y = y1 + hy; for (i=1; i<=N; i++) { line ( x1, y, x, y ) ; x += hx; y += hy; } 22 Топшириқ 3. К лавиатур адан чизиқлар сонини киритиш ва фигурани ясаш : 4. К лавиатур адан чизиқлар сонини киритиш ва фигурани ясаш : 23 Топшириқ 5. К лавиатур адан штрихлаш чизиқлари сонини киритиш ва барча соҳаларини турли ранглар билан бўяб фигурани ясаш . 6. К лавиатур адан айланалар сонини киритиш ва сохаларни турли ранглар билан бўяб фигурани ясаш . 24 Процедур алар Ишлаб чиқиш тартиби : • Бир хил ёки ўхшаш харакатларни ажратиш ( учта фигур а ) • Уларда умумийлик ( ўлчови , форма, бурилиш бурчаги ) ва фарқ ни (координат алар , ранг ) топиш • Фарқни номаълум ўзгарувчи кўринишида ёзиб олиш , улар процедура параметр лари бўлади ( x , y ) 10060 ( x +100, y )( x , y -60) int Tr( int x, int y, int c ) { moveto ( x, y ); lineto ( x, y-60 ); lineto ( x+100, y ); lineto ( x, y ); setfillstyle ( 1, c ); floodf ill ( x+20, y-20, 15); }процедур а номипроцедур а номи процедур а танасипроцедур а танаси координат аларкоординат аларрангрангформаль параметр ларформаль параметр лар 25 Дастур int main() { ... Tr(100, 100, LIGHTBLUE); Tr(200, 100, LIGHTGREEN); Tr(200, 160, LIGHTRED); ... }int main() { ... Tr(100, 100, LIGHTBLUE); Tr(200, 100, LIGHTGREEN); Tr(200, 160, LIGHTRED); ... }( 100 , 100 ) 10060 маълум параметр лармаълум параметр ларпроцедур ани чақиришпроцедур ани чақириш int Tr( int x, int y, int c) { ... } формаль параметр ларформаль параметр лар процедурапроцедура 26 Процедур алар Хусусияти : • Одатда процедуралар асосий дастурдан юқорида жойлашади • Процедура номида формаль параметрлар санаб ўтилади, уларнинг номлари кўрсатилади, чунки ўзгариши мумкин • Процедурани чақирганда қавс ичида маълум параметрлар кўрсатилади ( сон ёки арифметик ифода ) худди шу тартибдаint Tr( int x, int y, int c )int Tr( int x, int y, int c ) Tr ( 200, 100, LIGHTGREEN );Tr ( 200, 100, LIGHTGREEN ); xx yy cc 27 Процедуралар Хусусияти : • Процедура номида хар бир формаль параметрларнинг типи кўрсатилади • Процедура ичида параметрлар ўзгарувчи сифатида фойдаланилади • П роцедур ада қўшимча локал ўзгарувчиларни о эълон қилиш мумкин, лекин уларга бошқа процедуралар мурожат эта олмайди int A ( int x, float y, char z ) { ... }int A ( int x, float y, char z ) { ... } int A ( int x, float y, char z ) { int a2, bbc = 345; ... }int A ( int x, float y, char z ) { int a2, bbc = 345; ... } Локал ўзгарувчилар Локал ўзгарувчиларint a2, bbc = 345; Grafik funksiyalar getmaxx - жорий режим ва драйверлар учун горизонтал нуқталар сонини аниқлаш; getmaxy - жорий режим ва драйверлар учун вертикал нуқталар сонини аниқлаш. bar 3 D ( x 1, y 1, x 2, y 2, h , top ) - параллелопипед чизади. Бу ерда h - параллелопипеднинг узунлиги; top - ю қ ори қисмини чизиш учун керак. Агар top о n - бўлса томи бор, агар topoff - бўлса томи йўк. setbkcolor (R); - Орқа фонга ранг беришgetmaxx - жорий режим ва драйверлар учун горизонтал нуқталар сонини аниқлаш; getmaxy - жорий режим ва драйверлар учун вертикал нуқталар сонини аниқлаш. bar 3 D ( x 1, y 1, x 2, y 2, h , top ) - параллелопипед чизади. Бу ерда h - параллелопипеднинг узунлиги; top - ю қ ори қисмини чизиш учун керак. Агар top о n - бўлса томи бор, агар topoff - бўлса томи йўк. setbkcolor (R); - Орқа фонга ранг бериш Grafik funksiyalar arc (x, y, a, b, r) - ёй чизиш учун. Бу ерда x ва y - марказнинг координаталари, a - бош бурчак, b - охириги бурчак, r - ёй радиуси. Бурчаклар градусда кабул килинади. ellipse (x, y, a, b, xr, yr) - худди шу тартибда эллипс ёйини чизади. drawpoly (n, p) - купбурчак чизиш учун. Бу ерда n - купбурчакнинг учлари сони; p - Купбурчак учларининг координаталари. floodfill (x, y, color) - жорий ранг ва усулдан фойдаланган холда чегараланган сохани буяш. Бу ерда x ва y - шу сохага тегишли булган нукта координатасиarc (x, y, a, b, r) - ёй чизиш учун. Бу ерда x ва y - марказнинг координаталари, a - бош бурчак, b - охириги бурчак, r - ёй радиуси. Бурчаклар градусда кабул килинади. ellipse (x, y, a, b, xr, yr) - худди шу тартибда эллипс ёйини чизади. drawpoly (n, p) - купбурчак чизиш учун. Бу ерда n - купбурчакнинг учлари сони; p - Купбурчак учларининг координаталари. floodfill (x, y, color) - жорий ранг ва усулдан фойдаланган холда чегараланган сохани буяш. Бу ерда x ва y - шу сохага тегишли булган нукта координатаси Grafik funksiyalar Аввал ранг , стили кейин чизмалар курсатилади. Масалан: setcolor (4); // чегара ранги setfillstyle (1, 2); // 1-стиль ва яшил ранг circle (50, 50, 35); floodfill (50, 50, 4); /* айлана ичига ранг т ў киш, бўяладиган чегара ранги рангли қалам билан бир хил бўлиши керак */Аввал ранг , стили кейин чизмалар курсатилади. Масалан: setcolor (4); // чегара ранги setfillstyle (1, 2); // 1-стиль ва яшил ранг circle (50, 50, 35); floodfill (50, 50, 4); /* айлана ичига ранг т ў киш, бўяладиган чегара ранги рангли қалам билан бир хил бўлиши керак */ Grafik funksiyalar setlinestyle ( s , a , b ) – турли стилдаги чизиқларни чизиш учун; Бу ерда s - style номери; a –фойдаланувчи стилини яратиши мумкин бўлган параметр, одатда а=1 деб олинади; b - чизиқнинг қалинлигини кўрсатадиган параметр 0 – оддий чизиқ; 1,2 , 3 - турли пунктир чизиқлар 4 – сийрак нуктали чизиқ.setlinestyle ( s , a , b ) – турли стилдаги чизиқларни чизиш учун; Бу ерда s - style номери; a –фойдаланувчи стилини яратиши мумкин бўлган параметр, одатда а=1 деб олинади; b - чизиқнинг қалинлигини кўрсатадиган параметр 0 – оддий чизиқ; 1,2 , 3 - турли пунктир чизиқлар 4 – сийрак нуктали чизиқ. Функция графикларини қуриш Топшириқ : y = 3 sin(x ) функция графи г ини 0 ва 2 π интервалида қуриш . Таҳлил : Максимал қиймат x = π /2 да y max = 3 Минимал қиймат x = 3 π /2 да y min = -3 Муаммо : функция математик систем а координат аларида берилган , лекин координаталарни пикселларда кўрсатган холда экранда қуриш керак . К оординат аларни алмаштириш ( x , y ) XY x yК оординат аларни м атематик система си К оординат аларни (пиксел ларда ) э кран система си ( x э , y э )x э y э( 0 , 0 ) ( 0 , 0 ) a b k – масштаб ( тасвирнинг экрандаги бирлик қисмининг узунлиги ) x э = a + kx y э = b - kyx э = a + kx y э = b - ky Дастур const a = 50, b = 200, k = 50; const float xmin = 0, xmax =2*M_PI; float x, y, h = 0.01; int xe, ye, w; w = (xmax - xmin)*k; line(a-10, b, a+w, b); line(a, 0, a, 2*b); for (x = xmin; x < xmax; x += h) { y = 3*sin(x); xe = a + k*x; ye = b - k*y; putpixel (xe, ye, 12); } 2 π2 π h – x қадамнинг ўзгаришиh – x қадамнинг ўзгариши w – ОХ ўқининг пикселдаги узунлигиw – ОХ ўқининг пикселдаги узунлиги Нуқтанинг экрандаги координат алариНуқтанинг экрандаги координат алариўқларнинг координат алариўқларнинг координат алари Графикни қуриш цикл иГрафикни қуриш цикл иалбатта #include <math.h>албатта #include <math.h> Дастур #include <graphics.h> #include <math.h> int main() { initwindow(640,480); const int a = 50, b = 200, k = 50; const float xmin = 0, xmax =4*M_PI; float x, y, h = 0.01; float xe, ye, w; w = (xmax - xmin)*k; line(a-10, b, a+w, b); line(a, 0, a, 2*b); for (x = xmin; x < xmax; x += h) { y = 3*sin(x); xe = a + k*x; ye = b - k*y; putpixel (xe, ye, 12); } getch(); return 0; } Нуқталар қандай бирлаштирилади ? Алгоритм: Агар биринчи нуқта ( x э , y э ) нуқтага ўтиш акс ҳолда ( x э , y э ) нуқтада қисмАгар биринчи нуқта ( x э , y э ) нуқтага ўтиш акс ҳолда ( x э , y э ) нуқтада қисм Программа: Харакат вариант ини танлашХаракат вариант ини танлаш ўзгарувчи -флаг ( фақат 1 ёки 0)ўзгарувчи -флаг ( фақат 1 ёки 0) int first; ... first = 1 ; for (x = xmin; x < xmax; x += h) { ... if ( first ) { moveto(xe, ye); first = 0; } else lineto(xe, ye); ... } Бошланғич қийматБошланғич қиймат