Presentation is loading. Please wait.

Presentation is loading. Please wait.

13-14 лекция Графикалық режим.

Similar presentations


Presentation on theme: "13-14 лекция Графикалық режим."— Presentation transcript:

1 лекция Графикалық режим

2 Сұрақтар: Графикалық режимді орнату 2. Сызықтар түсін тағайындау
3. Түрлі сызықтар салу 4. Сызық стильдері 5. Штрихтау сызықтары

3 1. Графикалық режимді орнату
Си тілінде растрлық графика жұмыс істейді, оның тақырыптық файлы graph.h. График нүктелерден-пиксельдерден тұрады. Пиксель – экранның адресте-летін ең кіші элементі. Алдымен графика шығара алатын бейнережимді іске қосу керек. Мұнда экран-ның пиксельмен берілген мөлшері және түстер саны беріледі. Графикада үш координаттық жүйе қолданылады: абсолюттік, салыстырмалы және масштабталған жүйе. Вертикаль және горизонталь өстер бойынша пиксельдер саны экран типіне байланысты болады.

4 Абсолюттік координатада координаттар басы – (0;0) нүктесі сол жақ жоғарғы бұрышта болып сан-алады, х координатасы солдан оңға қарай, у коор-динатасы жоғарыдан төмен қарай өседі. Салыстырмалы режимде координаталар басы экранның кез келген нүктесіне ауыстырыла алады. Масштабталатын режимде экран бетінде мас-штабталған координаталар беруге болады, онда х пен у өстері бойынша минимум және максимум мәндер енгізіп, жұмыс істеуе мүмкіндік бар.

5 пиксель берілген 16 түстің біріне боялады;
Жалпы абсолюттік графикалық режимде әрбір  пиксель берілген 16 түстің біріне боялады; (0,0) -  экранның сол жақ жоғарғы бұрышы координатасы , (639,479) -  оң жақ төменгі бұрышы координаталары болады; -  әр түрлі фигураларды экранға шығару үшін алдын ала графикалық режимді іске қосып алу керек. Жалпы дисплей адаптерлері графикалық режимде 200, 350 тіпті 600 нүктелерден тұратын экран жолдарының әрқайсысы- нда 640, 720, 800 нүктелер тіз- бегін бейнелей алады. Мұнда- ғы нүкте деп отырғанымыз – өлшемі 0,8х1 мм2 шамасында болып келген (CGA) кішкен- тай тіктөрбұрыш, яғни пиксель. * x y (0,0) ( 0,479) (639, 0) (639,479) Ýêðàíäà¹û í¾êòåëåð координаталары (320,240)

6 Әрбір нүктенің координаталары екі бүтін санмен (Х, У) анықталады
Әрбір нүктенің координаталары екі бүтін санмен (Х, У) анықталады. Дисплей экранына график салу үшін оның нүктелерінің координаталарын көрсету қажет. Координаталар басы (0,0) болып экранның сол жақ жоғарғы бұрышы есептеледі. Х координаталары (бағаналар немесе позициялар нөмірлері) солдан оңға қарай, ал У мәндері (жолдар немесе қатарлар) жоғары-дан төмен қарай өсіп отырады. Мысалы, VGA адапте-рінің экран бұрыштарының координаталарын Х=0..799, Y= аралығында көрсету қажет. Экранда Х өсі сол-дан оңға қарай, Y өсі жоғарыдан төмен қарай бағыт-талған, ал оның шеткі нүктелерінің координаталары суретте көрсетілген.

7 Олардың ең жоғарғы мәндері пайдаланылған экран адаптеріне тәуелді болады, яғни (0,0)..(320х200), (0,0)..(640х480), (0,0)..(800х600) аралықтарында және т.б. болуы мүмкін. Сонымен, графикалық режимде экрандағы кез келген объект көрініп тұрған нүктелер тобынан тұрады. Мәтіндік режимнен графикалық ре-жимге көшкенде экран тазартылады. Графикалық ре-жимде экраннан курсор көрінбейді. Дисплей экраны-ның бетіне (кейін қағазға) нүкте, түзу немесе қи-сық сызық, шеңбер, эллипс және кез келген тұйық сызық сызып шығаруға болады. Сонымен қатар тұ-йық сызықтардың ішін әр түрлі түске бояп қою мүм кіндіктері де бар. Сызықтарды жылжыту, айналдыру және басқа орынға көшіру арқылы көрнекі бейнелер мен мультфильмдер жасауға болады.

8 График тұрғызу үшін оны шығару немесе бастау нүктесін көрсету қажет
График тұрғызу үшін оны шығару немесе бастау нүктесін көрсету қажет. Мәтіндік режимде ол курсор позициясы болып саналады, ал графикалық режимде көрініп тұратын курсор жоқ, бірақ экранда көрінбейтін курсор тәрізді сілтеме белгі CP (current poіnter) бар. Негізінде оны да курсор деп қабылдауға болады. Графикалық режимдегі жұмыстарды атқаратын Турбо Си нұсқасында графикалық функциялар өте көп, енді біз солардың негізгілеріне тоқталып өтеміз.

9 Графикалық режимде жұмыс істеу былай басталады:
#include <graphics.h> #include <conio.h> #include <stdio.h> #define PATHTODRIVER “C:\\TC\\bgi\\” main () { int gdriver = DETECT; //драйвер int gmode; //режим аты int errorcode; // қате коды   initgraph (&gdriver,&mode, PATHTODRIVER); errorcode = graphresult(); if errorcode != grOk) //іске қосу қатесі { printf(“Қате: %d\n”, errorcode); puts(“Аяқтау үшін ENTER басыңыз”); getch (); return; } ... Ары қарай программа мәтіні...

10 initgraph(Driver,Mode,Path);
Көбінесе Driver параметрі мәні ретінде detect болатын бүтін константа қолданылады. Мұндайда initgraph функциясының өзі графикалық драйвер типін анықтап, ең дұрыс режимді таңдап алады. Тақырыптық файлы: <graph.h>

11 Графикалық режимде сызық түстерін, тұйық сызықтар ішін түрлі түске бояуға болады. Ол үшін мәтіндік режимдегідей түстер кодтары және олардың ағылшынша атаулары қолданылады (кестесі келесі бетте). 2. Сызықтар түсін тағайындау setcolor(col); Мұндағы сol – түс атауы немесе түс коды. Сызық түсі осы функциямен беріледі. Ал сызық типі setlinestyle() функциясы арқылы беріледі.

12 Көмескі түстер Ағыл-шынша Ашық түстер Ағыл- шынша Қара - Черный BLACK Сұр - Серый 8 DARKGRAY Көк - Синий 1 BLUE Көкшіл – Св.синий 9 LIGHTBLUE Жасыл - Зелёный 2 GREEN Ақжасыл - Св.зелёный 10 LIGHT-GREEN Көгілдір-Голубой 3 CYAN Ақшылкөк-Св.голубой 11 LIGHTCYAN Красный - Қызыл 4 RED Қызғылт -Св.красный 12 LIGHTRED Фиолетовый-Күлгін 5 MAGEN-TA Қызғыш -Св.фиолетовый 13 LIGHTMA-GENTA Коричневый-Қоңыр 6 BROWN Жёлтый - Сары 14 YELLOW Ақшылсұр – Св.серый 7 LIGHT-GRAY Белый - Ақ 15 WHITE

13 3. Түрлі сызықтар салу line (x1,y1,x2,y2);
 Тақырыптық файл: <graph.h> lineto (x,y); Курсор тұрған нүктеден х,у нүктесіне дейін сызық салады. linerel (dx,dy); Курсор тұрған х,у нүктесінен х+dx,у+dy нүктесіне дейін сызық салады, яғни сызық координаталары салыстырмалы түрде беріледі.

14 moveto(х,у ) Курсорды х,у нүктесіне жылжытады. moverel(dx,dy) Курсорды оның тұрған х,у нүктесінен х+dx,у+dy нүктесіне жылжытады. Егер олардың dx (dy) таңбалары оң болса, курсор төмен (солға), ал теріс болса, онда жоғары (оңға) жылжытылады.

15 arc(x,у,БұрышБасы,БұрышСоңы,Радиус);
circle(x,y,r) Радиусы r (бүтін сан) центрінің координаталары (х, у) болатын шеңбер сызады. Сызық түсі setcolor (col) функциясымен беріледі. Мысалы, қызыл түсті 5 шеңбер сызайық: ... setcolor(RED); for (r=5;r<=25; r+=5) circle(320,240,r); ... arc(x,у,БұрышБасы,БұрышСоңы,Радиус); центрінің координатасы (х, у), радиусы берілген доға сызады. БұрышБасы,БұрышСоңы параметрлері бұрышты градуспен сағат тіліне қарсы береді. Радиус параметрі доға радиусын бүтін санмен береді.

16 rectangle(xl,yl,x2,y2); bar(xl,yl, x2,y2);
Сызық типі setlinestyle функциясымен, ал түсі — setcolor функциясымен анықталады. Тақырыптық файлы: <graph.h> bar(xl,yl, x2,y2); Сызық түсімен іші боялған төртбұрыш сызылады. x1, y1 сол жақ жоғарғы бұрыштың, ал х2 , у2 — оң жақ төменгі бұрыштың координаталары.

17 bar3d(xl, yl, x2, y2, Глубина, В_Грань);
сызуды көрсетеді. Егер ол нөл болса, сызықтар сызылмайды.

18 ellipse(x,y,УголНачала,УголКонца, РадиусХ,РадиусУ );
центрінің координаталары (х, у) эллипс немесе эллипс доғасын сызады. УголНачала, УголКонца параметр-лері доғаның басы мен соңын градуспен сағат тіліне қарсы береді. РадиусХ, РадиусУ параметрлері эллипстің көлденең және тік радиустарын береді.  

19 pieslice(x,y,УголНачала,Уголконца, Радиус);

20 putpixel(x, y, Түсі); координатасы (х, у) пиксел-нүктені Түсі санына байланысты бояп шығады. Түсі ағылшынша сөзбен немесе кодпен беріледі. Бұл функцияны цикл ішіне орнатып, сызықтар сызуға болады. Мысалы: setcolor(BLUE); for (x=20; x<=200; x++) putpixel(x,100, BLUE); for (y=100; y<=280;y++) putpixel(200,y, BLUE); line(200,280,20,100); A(20,100) B(200,100) C(200,280)

21 4. Сызық стильдері setlinestyle (tip,obr,tol);
сызықтар стилін береді, мұндағы tip – ал-дын ала анықталған константа, ол сызық ти-пін береді. tol – сызық қалыңдығын анықтайтын константа (NORM_WIDTH - қалыпты, THICK_WIDTH - қалыңырақ). Егер программалаушы анықтаған сызық типі қолданылатын болса, онда obr мәні төрт таңбалы оналтылық константа болып, ол ұзындығы 16 пиксел сызық кесіндісін кодтау үлгісі болуы тиіс.

22 tip константасы мәндері
Сызық типі SOLID_LINE жай сызық DOTTER_LINE пунктир сызық CENTER_LINE штрих-пунктир сызық DASHED_LINE Штрихтары DOTTED_LINE сызығынан ұзыншалау келген пунктир сызық USERBIT_LINE программалаушы анықтаған сызық

23 5. Штрихтау сызықтары setfillstyle (stil,col);
аймақты бояу, толтыру стилін береді, мұндағы stil – алдын ала мәні анықталған константа, стильді береді, оның мәндері келесі бетте көрсетілген. col – түс кодына сәйкес бүтін сан немесе ағылшынша түс аты. Ол setcolor функциясын анықтауда көрсетілген. Сызық стилі мен түсі көптеген функцияларда (bar, bar3d, sector, т.б.) қолданылады.

24 аймақты фон түсімен толтыру ағымдағы түспен толтыру көлденең штрих
Константа Аймақты толтыру стилі EMPTY_FILL аймақты фон түсімен толтыру SOLID_FILL ағымдағы түспен толтыру LINE_FILL көлденең штрих LTSLASH_FILL 45 градус солдан оңға қиғаш жіңішке штрих сызықтар SLASH_FILL 45 градус солдан оңға қиғаш штрих сызықтар BKSLASH_FILL 45 градус оңнан солға қиғаш жіңішке штрих сызықтар LTBKSLASH_FILL 45 градус оңнан солға қиғаш штрих сызықтар HATCH_FILL торсызықтармен штрихтау XHATCH_FILL 45 градус солдан оңға сирек қиғаш штрих сызықтар INTERLEAVE_FILL 45 градус қиғаш жиі торсызықтармен штрихтау WIDEDOT_FILL сирек нүктелермен толтыру CLOSEDOT_FILL жиі нүктелермен толтыру USER_FILL программалаушы өзі анықтайтын сызық типі

25 // Әр түрлі сызықтар салу мысалы
#include <graphics.h> #include <conio.h> #include <stdio.h> main () { int gdriver=DETECT; int gmode; int x,y,xk=500; initgraph (&gdriver,&gmode,"C:\\TC\\bgi");   setcolor(RED); x=80; y=30;   moveto(x,y); outtext("жай сызық - SOLID_LINE"); setlinestyle (SOLID_LINE,0,NORM_WIDTH); y+=20; line(x,y,xk,y);

26 y+=40; moveto(x,y); outtext("пунктир сызық – DOTTED_LINE"); setlinestyle (DOTTED_LINE,0,NORM_WIDTH); y+=20; line(x,y,xk,y);   y+=40; moveto(x,y); outtext("штрих-пунктир сызық – CENTER_LINE"); setlinestyle (CENTER_LINE,0,NORM_WIDTH); moveto(x,y); outtext("штрихі ұзынша пунктир сызық"); setlinestyle (DASHED_LINE,0,NORM_WIDTH);

27 y+=40; moveto(x,y); outtext(“қалың сызық"); setlinestyle (SOLID_LINE,0,THICK_WIDTH); y+=20; line(x,y,xk,y); getch(); closegraph(); }

28 // дөңгелеген шеңбер #include <graphics.h> #include <conio.h> #include <stdio.h> #include <dos.h> #define dt 20 // аялдату #define dx 5 // х қадамы void okr(int x, int y, int r, int color) {setcolor(color); circle(x,y,r); } main () { int gdriver=DETECT; int gmode; int x,y,r=50,i; int maxx; //ең оң жақ шеткі нүкте коорд-сы initgraph (&gdriver,&gmode,"C:\\TC\\bgi");

29 setcolor (4); outtextxy(250,2, "бегущая окружность"); maxx=getmaxx(); for (y=60;y<=400; y+=100) { x=0; while(x<maxx) { okr(x,y,r,RED); //шеңбер сызу delay(dt); okr(x,y,r,BLACK); // шеңберді өшіру x+=dx; }   getch(); closegraph();

30 // Ашушаң мен күлімкөз ves_lico.cpp
#include <graphics.h> #include <conio.h> #include <stdio.h> void face(int x, int y, int k) {setfillstyle(SOLID_FILL,YELLOW); setcolor(YELLOW); pieslice(x,y,0,360,50); setcolor(BLACK); if(k==1) arc(x,y+5,210,330,25); //k=1 күлкі ауыз else if (k==-1) arc(x,y+45,30,150,22); //k=-1 ашулы ауыз else line(x-16,y+25,x+16,y+25);//k=0 жай ауыз line(x,y-5,x,y+15); circle (x-15,y-12,4); //көздері circle (x+15,y-12,4); }

31 main () { int gdriver=DETECT; int gmode; initgraph (&gdriver,&gmode,"C:\\TC\\bgi"); face(150,200,0); //қарапайым ауыз face(320,200,-1); //ашулы ауыз face(490,200,1); //күлкілі ауыз getch(); closegraph(); }

32 // зеленый круг 1-вариант zel_krug.cpp
#include <graphics.h> #include <conio.h> #include <stdio.h> main () { int gdriver=DETECT; int gmode; initgraph(&gdriver,&gmode,"C:\\TC\\bgi"); setcolor(GREEN); outtextxy(250,2, "Закрашенный круг"); //setlinestyle(SOLID_LINE,0,THICK_WIDTH); setfillstyle(SOLID_FILL,GREEN); pieslice (320,240,0,360,200); getch(); closegraph(); }

33 // зеленый круг 2 вариант zel_kr2.cpp
#include <graphics.h> #include <conio.h> #include <stdio.h> main () { int gdriver=DETECT; int gmode; initgraph (&gdriver,&gmode,"C:\\TC\\bgi");   setcolor(GREEN); outtextxy(250,2, "закрашенный круг"); //setlinestyle(SOLID_LINE,0,THICK_WIDTH); //setfillstyle(SOLID_FILL,GREEN); for (int r=1;r<=200;r++) circle(320,240,r); getch(); closegraph(); }

34 // зеленый круг 2-вариант zel_kr2.cpp
#include <graphics.h> #include <conio.h> #include <stdio.h> main () { int gdriver=DETECT; int gmode; initgraph(&gdriver,&gmode,"C:\\TC\\bgi"); setcolor(GREEN); outtextxy(250,2, "Закрашенный круг"); //setlinestyle(SOLID_LINE,0,THICK_WIDTH); setfillstyle(SOLID_FILL,GREEN); pieslice (320,240,0,360,200); getch(); closegraph(); }

35 6. Көпбұрыш салу drawpoly (НүктелерСаны, Координаталары);
Түзу сызықтардан тұратын тұйық сызық-тардан құралған көпбұрыш сызады. НүктеСаны параметрі көпбұрыш төбелері санын, Координаталар параметрі сол төбелер координаталарын жиым элементтері ретінде береді. Жиымның 0-ші және 1-ші элементтері алғашқы нүкте координаталары, 2-ші, 3-ші элементтері – екінші нүкте координаталары, т.с.с.

36 Енді осы функцияны пайдаланып,алты бұрыш салайық
// көпбұрыш салу #include <graphics.h> #include <conio.h> #include <stdio.h> main () {int gdriver=DETECT; int gmode; initgraph (&gdriver,&gmode,"C:\\TC\\bgi");

37 int x,y,t[14]={450,150, 500,350, 400,400, 150,400, 50,150, 250,80,450,150}; setcolor(WHITE); drawpoly(7, t); settextstyle(3,HORIZ_DIR,1); outtextxy(458,135,"C(450,150)"); outtextxy(508,335,"D(500,350)"); outtextxy(400,400,"E(400,400)"); outtextxy(150,400,"F(150,400)"); outtextxy(38,138,"A (50,150)"); outtextxy(243,55,"B(250,80)"); getch(); closegraph(); }

38 // шеңбер ішінде жасыл квадрат
#include <graphics.h> #include <conio.h> #include <stdio.h> main () {int gdriver=DETECT; int gmode; initgraph(&gdriver,&gmode,"C:\\TC\\bgi"); setcolor(RED); setlinestyle(SOLID_LINE,0,THICK_WIDTH); //қалың сызық setfillstyle(SOLID_FILL,GREEN); // іші жасыл circle (320,240, 200); bar(171,108,468,373); getch(); closegraph(); }

39 7. Курсор орнын анықтау функциялары
getx(); gety(); Функциялары курсор тұрған орын координаталарын х (у) береді. getmaxx(); getmaxy(); getmaxx() функциясы экранның оң жақтағы ең шеткі нүктесінің x координатасын анықтайды, ал getmaxy() функциясы — экранның ең төменгі у нүктесі координатасын анықтайды.

40 8. Мәтін шығару функциялары
outtext (Мәтін); Қостырнақшаға алынған мәтінді курсор тұрған орыннан бастап экранға шығарады. Мәтін ішінде басқару символдары болмауы тиіс, мысалы, \n. Шығарылатын символдар түсі setcolor, шрифт типі — settextstyle функцияларымен беріледі. Мысалы: setcolor (4); moveto(250,10); outtext (“Омаров Марат”);

41 outtextxy(x,y, Мәтін); Курсорды алдымен х, у нүктесіне қойып алып барып, мәтінді экранға шығарады. Мәтін шығарылған соң, курсор бұрынғы орнында (х, у) қалады. Шығарылатын символдар түсін – setcolor, қаріп типін — settextstyle функциясымен беруге болады. setcolor (4); outtextxy(250,2,“Омарова Айман");

42 Settextstyle(Шрифт,Бағыты,Көлемі);
outtextxy және outtext функциялары арқылы шығарылатын мәтіндердің қаріп түрін, көлемін және бағытын тағайын-дайды. Шрифт параметрі ретінде төмендегі константалардың бірін пайдалануға болады.  Константа Мәні Қаріп типі DEFAULT_FONT 0 Стандартты. Әрбір символ 8 х 8 пиксел көлемдегі квадрат ішіне шығарылады. TRIPLEX_FONT 1 Triplex шрифті SMALL_FONT 2 Майда шрифт SANSSERIF_FONT 3 SansSerif шрифті GOTHIC_FONT 4 Готикалық шрифт Орыс шрифтері тек стандартты түрде ғана (default_font) шығарылады. Бағыты параметрі outtext және outtextxy функцияларымен берілген мәтінді тіке немесе көлденең беруді тағайындайды. (көлденең – horiz_dir, тіке – vert_dir ).

43 // Горизонталь мәтін шығару font3.cpp
#include <graphics.h> #include <conio.h> #include <stdio.h> main () { int gdriver=DETECT; int gmode,i,j,k=5; initgraph (&gdriver,&gmode,"C:\\TC\\bgi"); setcolor(RED); for(i=0; i<=4; i++) // i- qarip typi for(j=1; j<=3; j++) // j- qarip kolemi { moveto(100,k); settextstyle(i,0,j); outtext("Qaripter ar turli"); k+=30; } getch(); closegraph();

44 //Вертикаль мәтін жазу font4.cpp
#include <graphics.h> #include <conio.h> #include <stdio.h> main () { int gdriver=DETECT; int gmode,i,j,k=5; initgraph (&gdriver,&gmode,"C:\\TC\\bgi"); setcolor(RED); for(i=0; i<=4; i++) // i-qarip typi,5 tip for(j=1; j<=3; j++) // j-qarip kolemi { moveto(k, 15); settextstyle(i,1,j); outtext("Qaripter ar turli"); k+=40; }   getch(); closegraph();

45 Тыңдағандарыңызға рахмет!


Download ppt "13-14 лекция Графикалық режим."

Similar presentations


Ads by Google