Суз боши Borland С++ графикасига кириш


Download 299 Kb.
bet5/7
Sana22.02.2023
Hajmi299 Kb.
#1222106
1   2   3   4   5   6   7
Bog'liq
Borland C графикаси

Код Макрос Хатолик хакида маълумот
___________________________________________________________________________
0 grOK No error
1 grNoInitGraph BGI graphics not installed (use initgraph use )
5 grNoLoadMem Not enoph memory to load driver
___________________________________________________________________________
Лабаротория ишларини бажариш учун куйида келтирилган материални пухта урганиш талаб килинади.
Чизикли объектларни чизиш

Ишнинг максади: Турбо СИ график тахрири билан ишлашни урганиш.


Бошда Турбо Си да мавжуд булган график функцияларни кулланилишига доир бир нечта оддий дастурларни тузамиз.
График режимда дисплей экрани боши чап юкори бурчакда жойлашган Х, У координаталар системасида жойлашган чизиш майдони туртбурчак сифатида каралади.
Координаталар 0 дан бошлаб график график адаптерга боглик равишда максимал кийматгача узлаштирилиши мумкин. Бу максимал кийматларни X_max ва Y_max каби белгилаймиз, бу ерда x_max ва y_max нуктанинг Х ва У бош харфларда олиниши турли максадларда кулланилади. Экран координаталари 1-расмда курсатилган.
0 X_max






















Y_max

1-расм
Тугри бурчакли учбурчак чизиш учун оддийрок дастур элементларни курамиз.

TRIA
# include


# include < conio.h>
main ( )
 int gdriver = DETECT, gмode, X_max , Y _max ;
initgraph(&gdriver, &gmode “\\tc”);
X_max = getmaxx( ); Y _max = getmaxy( );
moveto(0, Y _max); /Курсорни пастки чап бурчакка кучириш/
lineto (X_max, Y _max); /Пастки катетни чизиш/
lineto (0,0); /Гипотенузани чизиш/
lineto (0, Y _max); /Катетни чизиш/
getch();
closegraph( );

Дастурда Турбо Си нинг айрим график функцияларига мурожат килинган. Сарловха файл GRAPHICS.H бунга ухшаш бир нечта файлларга эга булиб, биз улардан айримларини куриб утамиз.
void far initgraph ( int far  graphdriver,
int far  graphmode,
char far  pathdriver );
int far getmaxx(void);
int far getmaxy(void);
void far moveto (int x, int y);
void far lineto (int x, int y);
void far line (int x1, int y1, int x2, int y2);
void far closegraph(void);

far калит сузининг пайдо булиши компиляторга “узун” курсаткичларни куллашга буйрук беради. Агар улар тушириб колдирилса хотиранинг кичик ммоделида курсаткичларнинг турли куринишлари пайдо булади.


Биринчи санаб утилган initgraph( ) функцияси компьютерни матний режимдан график режимга утказади. У куйида курсатилаган учта параметрга эга.
Параметр Аргумент
graphdriver &gdriver
graphmode &gmode
pathdriver “\\tc”
Агар graphdriver параметрига DETECT узгарувчиси узлаштирилган булса (GRAPHICS.H файлида уз-узидан 0 киймат узлаштирилгани), у холда адаптер куриниши автоматик урнатилади. Бундан ташкари, иккинчи параметр сифатида курсатилган gmode узгарувчисига юкори даражадаги код узлаштирилади. Ва нихоят, учинчи аргументга график адастер жойлашган каталог узлаштирилади, масалан HERC.RGI матн курнишдаги сатр.
сlosegraph функцияси график режимдаги ишни тугаллайди.
getmaxx ва getmaxy функциялари график режимда ишлатилиши мумкин булган х в ва у укларидаги максимал координата кийматларини кайтаради. Бу кийматлар кулланилаётган график адаптер типига боглик. Бизнинг дастурда бу кийматлар сакланади, шундай экан уларни getmaxx ва getmaxy функцияларга мурожаат килиб бир неча маротаба ишлатишимиз мумкин.
Хакикатан учбурчакни moveto() ва lineto() функцияларига мурожаат килиб чизиш мумкин. Координаталар бу ерда нукталар номерини билдирадиган бутун сонлар сифатида аниклаш мумкин. moveto(x,y) функциясига мурожаат курсорни берилган нуктадан х ва у координатали нуктага чизик чизмасдан кучиради, lineto(x,y) функцияси эса шунга ухшаш кучиш, аммо чизик чизиш билан.
(x1,y1); lineto(x2,y2) ; lineto (x3,y3); функцияларга кетма-кет мурожжат килиш урнига
куйидагини ёзиш мумкин.
line (x1,y1,x2,y2);
line (x2,y2,x3,y3);
Чизик чизиш функциясига шунингдек берилган нуктадан нуктагача курсатилан ораликни чизик билан бирлаштирадиган linerei функциясини хам киритиш мумкин.
Чизикни чизиш учун шунингдек setlinestyle( ) функциясидан хам фойдаланиш хам мумкин. У чизик кенглиги ва стилини урнатади:
setlinestyle(SOLID_LINE, 0, NORM_WIDTH) чизик стилини , фон рангини, уртача калинликни урнатади.

Икки улчовли график объектларни чизиш


Ишнинг максади: ёйни чизиш, айлана, эллипс ва бошка график шаклларни чизиувчи функциялар билан ишлашни ургатишдан иборат.
Расм чизиш учун компьютерда аввламбор ишнинг график режимини урнатиш керак. У initgraph( ) график функцияси ёрдамида урнатилади, куйида тулик матни келтирилган:
{
void initgraph (void)
int driver, mode, errorcode, X_max, Y_max ;
register int i;
driver = DETECT;
initgraph (&driver, &mode, “ “);
X_max = getmaxx( ); Y_max = getmaxy( );
errorcode = graphresult( );
if (errorcode!=grOk) /агар хатолик юз берган булса/
 printf (“Ошибка:% s\n” grapherrormsg (errorcode));
printf (“Ишни тухтатиш учун ихтиёрий тугмани босинг \n”);
getch();
exit (1); /Ишни тугаллаш/

Ишни осонлаштириш учун (хар доим шу сатрни ёзмаслик учун) INCLUDE.
Директориясида жойлашган < zaggraf.c> деб номланувчи файл яратилган. Шунинг учун гарфик режиш утиш учун :
1) Даструр сарлавхасида : # include жойлаштириш керак
2) intgraph( ) ёзуви урнида - int zaggraf( ) ёзиш керак;
Турбо Си функциялари айлана, ёй, сектор, эллипсларни эффектив чизишга имкон беради. Бу функциялар кенгайтмалари куйидагича ёзилади:
void far circle (int x, int y, int radius);
void far arc (int x, int y, int stangle, int endangle, int xradius, int yradius);
void far getarccoords(srtuct arccoordstype far  arccoords);
arccoordstype структураси GRAPHICS.H файлида куйидагича ёзилган:
sruct arccoordstype
 int x, y;
int xstart, ystart, xend, yend; }

График видеоадаптер типи ранглар сонини ва график режимда кандай ранглар ишлатилишини аниклайди. Энг катта фарк EGA ва CGA адаптерлари орасида мавжуд. СGA видеоадптери палитраларда 4 та рангга эга ва 4 та палитрага эга. Бу шуни билдираки, экранда бир вактнинг узида 4 та хар хил ранг тасвирланиши мумкин. Ранглар 0 да 3 гача номерланади. 0 номер хар доим фон ранги билан мос тушади. VGA драйвери хам ранглар билан CGA драйверига ухшаб ишлай, бирок юкори кенгайтмага эга.


Фон рангини урнатиш учун куйидаги
void far setbkcolor(int color);
функция кулланилади палитраларни узгартириш учун эса
void far setpalette( int index,int color);
бу функция CGA видеоадаптерига куллаб булмайди, фон рангини мавжуд булмаганлиги учун index хар доим 0 га тенг.
circle() функцияси экранда берилган ранг билан марказий нукта (x,y) координатаси ва radius радиусли (кучиш оралиги - нукта) айлана чизади. Уз-узидан мавжуд ранг сифатида WHITE урнатилади. (Эътибор беринг барча макрослар бош харфларда ёзиляпти). Чизилаётган чизикнинг рангини узгартириш учун setcolor() функцичсидан фойдаланилади унинг кенгайтмаси
void far setcolor(int color);
Бошка чизувчи функцияларга куйидагилар:
arc() - айлана ёйини чизади;
drawpoly() -купбурчак контурини чизади;
rectangle() - туртбурчак чизади;
Бу функциялар прототиплари 2 булимда келтирлган эди.
Контурлар оралигини курсатилган шаблон ва берилган ранг тулдириш учун floodfill() функцияси хизмат килади. Унинг кенгайтмаси
void far floodfill(int x,int y,int bordecolor);
бу ерда х ва у – контур ички нукталари координаталари, bordecolor- контур ранги. Ранг ва шаблон тулдириш куйидаги функция
voi far setfillstyle (int pattern,int color);
ёрдамида тулдирилади.
Буяш шаблони ва унга мос МАКРОС ва кийматлар(pattern) 2-жадвалда келтирилган.
Эътибор беринг барча макрослар бош харфда ёзилган.
Чизувчи функцияларга мисол.
Мисол 1
/*Экран марказига квадрат чизиш*/
.....................................................................................
main()
{
left=getmaxx()/2-50; /* юкори чегерани беради*/
top=getmaxy()/2-50; /*чап бурчак */
right=getmaxx()/2+50 ; /* куйи чегара */
bottom=getmaxy()/2+50; /*унг бурчак*/
/*Квадрат чизиш*/
rectangle(left,top,right,bottom);
getch();
}
Мисол 2
/*Дастур чап юкори бурчакка диоганал буйича кучган айлана чизади. */
main()
{
clrscr(); /*экранни тозалаш*/
ym=480; xm=640;
dx=((xm-2*r)/150); dy=((ym-2*r)/150);
x=r; y=r;
clrscr(); /*экранни тозалаш */
setviewport(1,1,640,480,0); / * чикариш ойнаси*/
setbkcolor(BLACK); /*фон рангини бериш */
setcolor(WHITE); /* шакл рангини бериш*/
clearviewport(); /* чикариш ойнасини бериш */
setwritemode(1); /* нашр типини бериш */
circle(r,r,r); /* айлана чизиш */
getch(); /* тугма босилишини кутиш*/
/* айланани диоганал буйича кучириш */
while((y{
setcolor(WHITE);
circle(x,y,r);
setcolor(BLACK);
circle(x,y,r);
x=dx+x;
y=dy+y;
}
circle(xm-r,ym-r,r);
getch();
return 0
}

  1. Графикни яратишда 1 мисол учун дастурнинг тулик матнинин ёзиш, компиляция килинг ва тугри бурчакнинг турли параметрларида синаб куринг

  2. Графикни яратишда 2 мисолда модули учун дастурнинг тулик матнинин ёзиш, дастурни ишга тушириш.

3-расмда келтирилган график объектни чизиш дастури тузилсин.
ИККИ УЛЧОВЛИ ШАКЛНИ ЧИЗИШ
ойна
буялган турбурчак


калин турбурчак


3-расм
Куриш хакида курсатма :


Туртбурчак координаталари (rectangle):0,0,639,349,ихтиёрий ранг.
Буялган туртбурчак координаталари (bar):50.50.300.300.
Ойна координаталари(setvievport()):100,100,200,200.
Ойнада уни тулик тутган бир нечта ички жойлашган айланаларни чизинг
Расм уртасига TRIPLEX_FONT шрифтидаги ёзув ёзиш
Кесишган тасвирларни чизиш
Ишнинг максади: уч улчамли майдонда оддий каркас моделларни чизишни урганиш
Ишнинг мундарижаси
Компьютер графикасида бошка модуллар билан биргаликда каркас ёки учли модуллар хам кенг ишлатилади. Каркас модулларнинг куллаш асоссини биринчи тартибли геометрик объектлар чизизлар ёки кирралар ташкил килади. Улар узида полиэдраларни , ёпик купёкларни юзалар билан чегараланган обектларни турли жойлашишларни кучириш каби объектларни моделлаштиришда кулланилади. 3D модели бу холатда полиэдрнинг богланувчи координталари руйхатини саклайди, шунингдек кирраларни(4-расм)

G



H
C F

E B
D
A
4-расм
4-расмда икки улчамли куб тасвирида кушимча чизиклар курсатилган. Бу тасвирда
АВ ва АD кесимлар когознинг пастки ва юкори чегераларига паралел эмас, шунинг учун уларни горизонтал деб булимайди. Шу сабабли АВ ва СD кесимлар параллел дейиш мумкин. Бу атамалардан горизонтал паралел чизиклар кесишиш нуктасига эга эмас.
Барча чизик нукталари битта чизикда ётади. Горизонтал чизиклар ва нукталар уч улчамли майдонда реал мавжуд эмас, аммо улар реал объектларни олишда ёрдам беради. Бундай оъектлар кесишган дейилади.
Шуни кизикки, расмлар кузнинг жойлашишига боглик, шунга ухшаб “кесишиш эффекти” куз ва объект орасидаги масофага боглик. Объект куздан канча олисда жойлашган булса, кирралар шунча паралел булиб туюлади ва объет шунча реал булиб куринади.
Икки ва уч улчовли майдонда объектлар мос равишда (X,Y) ва (x,y,z) координаталар билан берилади. P’(X,Y) расмлардан иборат кесишган проекцияларни олиш учун объектга тегишли жуда куп нукталар туплами P(x,y,z), берилади.
Бунинг учун Р нукта (x,y,z) координаталарни (X,Y) куринишдаги текисликларга проекциясини олиш керак. Шуни такидлаймизки экран куз ва обект орасида жойлашган (5-расмнинг Е нуктаси). Хар бир Р нукта учун РЕ чизик экранинг Р’ нуктасига кучади. Бу тасвирни икки боскичда бажариш кулай:
экран
1.Куриниб турган тасвир - Р нукта узининг жойида колади
Е аммо уч улчамли координаталар
куринувчи тасвирга утади.
2. Кесишган тасвир –P нуктани P’ нуктага алмаштириш ,
P’ уч улчамли тасвир билан икки улчамли тасвирга утказиш оркали уларни бирлаштириш
P

5-расм
Уч улчамли координаталар (xw,yw,zw)



Куринарли тасвирга алмаштириш


Куриниб турувчи координаталар(xe,ye,ze)

Кесишган тасвирлар


Экран алмаштиришлари(Х,У)

Куринарли тасвирга алмаштириш


Куринарли тасвирга алмаштириш учун куз билан мос тушадиган (E) кузатиш нуктаси берилган булиши. Шунингдек уч улчамли координаталр тугри берилган булиши керак. Объект Е нуктадан кузатилади.


Ze zw

Е


o 



xw
ye
xw yw

6-расм

Е нукта сферик координаталарда берилган булиб ,шунга ухшаб уч улчамли координаталр куйидагича хисобланинши керак
xe = sincos ; ye= sinsin ; ze= cos. (1)
Е нуктадан кузатганда кандайдир конуснинг уки ОЕ еукта билан мос тушади, унинг учу эса Е нуктага тушади.
Агар ортогонал координаталар xе,yе ,zе берилган булса, Е нукта методикага биноан унинг сферик координаталарни хисоблаш мумкин.
Охирги вазифа Х ва У нукталарни ЕО нуктадан перпендикуляр кузатиш натижасида оралигида О ва Е нукта жойлашган Х,У текисликда жойлаштиришдан иборат. Куринарли тасвирларни боши Е нуктада жойлашади. Е нуктадан О га караганда х укнинг йуналиши унгга тугрига йуналган булади, у ук эса юкорига йуналган булади. z укининг йуналиши эса координата киймати кузатиш нуктасидан усиб боради.

Куринарли тасвирга алмаштириш учун уни куйидаги шаклда ёзиш мумкин.


I xe ,ye , ze I =I xw ,yw ,zw I I V I , (2)


Бу ерда V- куриниб турган тасвир 4х4 улчамдаги матрицаси. V матрица туртта матрица бирлашмаси сифатида ташкил топади.


1. T матрицаси -О нукта координаталарни Е нуктага утказиш.
2. Rz матрицаси- координаталарни z уки атрофида айлантирш .
3. Rx-матрицаси- координаталарни х уки атрофида айлантирш .
4. Myz матрицаси - x уки йуналишини узгартириш. (Охирги матрица уч улчамли координаталар системасидан унг томонда, тасвир эса чап томонда жойлашган булади).
Математик тушунчаларга асослани V матрицани куйидаги куринишда ёза оламиз


sin -cos cos -sin cos 0

Download 299 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling