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


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

cos -cos sin -sin cos 0
V = 0 sin -cos 0 (3)
0 0  1
Демак, агар кузатиш нукталари учун сферик координаталар , ,  берилган булса, тасвир координаталарини (2) ва (3) формулаларга асосланиб хисоблашимиз мумкин.

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


Кейинги кадам куринарли координаталарни экранга чикаришдан иборат. Бу ерда уч улчамли координаталар деб эмас балки, (x,y,z) индекс каби белгилаймиз.


Куриниб тургшан координаталар билан экран координаталарри уртасидаги алока 7-расмда келтирилган. 7 –расмда d бутун мусбат сон учун (0,0,d) куринарли координата нуктаси сифатида Q нукта олинган. z=d майдонни экранни аниклаб – Q нуктадан утиб z укига перпендикуляр майдонни билдиради. Экран координаталари Q нуктанинг бошлангич нуктаси эканлигини биладиради, Х ва У лар хам шу йуналишга эга булиб, куринарли координаталарни билдиради.


Z
экран R P(x,0,z)

Y


y Q X
d P’(x,0)
E x
Рис.7
Объектнинг хар бир Р нуктаси учун тасвирдаги Р’ нукта РЕ экран билан кесишиш нуктасини биладиради. Ишни осонлаштириш учун Р нуктанинг координаталарни у укининг 0 нуктасида деб фараз киламиз. 7-расмда келтирилган ЕРR ва EP’Q учбурчаклар ухшаш. Мос равишда
P’Q /EQ = PR/ER.
Бундан:
X/d =x/z, X=d*(x/z) , (4)
Y/d= y/z, Y=d*(y/z) . (5)
Бошда айтиб утганимиздек объект маркази О нукта билан мос тушади(5-расм). Z ук экраннинг куринарли системаси ЕQ чизик экраннинг Q нуктаси билан кесишади ва Q экран координатаси системаси тасвирнинг марказида жойлашади. Агар биз координата боши пастки чап бурчакда жойлашишини хохласак , экран улчамлари эса 2*с1 булсагоризонтал ва вертикал 2*с2 улчамни ташкил килса, у холда (4) ва (5) тенгламалар куйидагига алмаштириш мумкин.

X=d*(x/z)+c1,


Y=d*(y/z)+c2 .

Бажариш учун курсатма


О нукта уч улчамли координаталр системасида куб маркази булсин. Хар бир кирра узунлиги 2h га тенг.


У холда куб учлари координаталари куйидаги булажи:


A(h,-h,-h) B(h,h,-h) C(-h,h,-h) D(-h,-h,-h)
E(h,-h,h) F(h,h,h) G(-h,h,h) H(-h,-h,h).
Курсорни берилган нуктага жойлаштирш учун mv(x,y,z) функцияси ишлатилади, киррани чизишщ учун эса dw(x,y,z), moveto(x,y) ва lineto(x,y) ларга ухшаб.
рerspective функцияси куринарлди ва кесишган алмаштиршларни амалга оширади.
сoeff функцияси эса V матрица таркибини хисоблаш ва координата нукталарига боглик булмаган ёрдамчи коэффициентлрни хисоблайди.

Хисобот мандарижаси


1. Дастурни учун керакли изохларни териш.


2. Олинган модуллар куриниши.

Майдонларни куришда координаталарни афин алмаштиришлари ёрдамида амалга ошириш


Ишнинг максади: fillpoly ва drawpoly функцияларнинг амалий кулланилиши, шунингдек мураккаб шакллар учун майдонларни куришда координаталарни алмаштириш системаси. Майдонларни ёки купбурчакларни турли куринишларда чизиш мумкин, масалан line() ва lineto() функциялари ёрдамида. Турбо Си майдонларни куриш учун иккита функцияга drawpoly() ва fillpoly га эга. Drawpoly() берилган координаталар туплами ёрдамида майдонни чизади. Бу мураккаб геометрик фигура хам ва жадвал куринишда берилган математик функция графиги хам булиши мумкин.
Fillpoly() шу билан фарк киладики у чизилган майдонни ичини тулдиради. fillpoly() функциясининг GRAPHICS.H файлида эълон килиниши куйидагича:
void far fillpoly(int numpoints, int far*polypoints);
numpoints параметри координатар жуфтлиги сонини англатади.
Агар майдон n та учга эга булса, у холда numpoints узгарувчиси киймати n+1 га тенг булади.
X0,Y0,X1,Y1,.....Xn-1,Yn-1 X0 ,Y0.

Бизга купбурчак контурини ёпишимиз учун битта координатани икки марта (X0,Y0 нукта) ёзишимиз керак. Натижада бир аргумент numpoints каби координата жуфтликлари сони n+1 га тенг булади. Эътибор беринг бу ерда нукта координаталарини бутун сорнда бериш керак.


fillpoly() функциясини “сехрли учбурчак ” деб аталувчи майдонни чизиш учун куллаймиз(8-расм) . Берилган майдон Эшер томонидан таклиф этилганидек учбурчаклар билвн тулдирилади.
Майдонни буяшни ташкиллаштириш учун GRAPHICS.H файлида ёзилган функциядан фойдалоаниш керак.

void setfillstyle(int pattern,int color);


Бу функция майдонни тулдириш учун шаблон типи ва ранги танлашда ёрдам беради. Ун икки турдаги шгаблон куринишлари мавжуд(3-жадв). Бу шаблонларда етарли эмас, аммо узингизни шахсий шаблонингизги setfillpattern( ) функцияси ёрдамида амалга оширишимиз мумкин.
Y y



X3


X4
x
O Xc,Yc
X0 b w
X5

X1 X2


X

8-расм
“Сехрли учбурчакни ” куриш учун тригонометрик функциялар ва тенг томонли учбурчак хоссаларидан фойдаланамиз. Координата уклари учбурчак ичига чизилган айлана маркази (xc yc ) оркали утган булсин.


Чизилган айлана радиуси r=4*R*sin(A/2)*sin(B/2)*sin(C/2),

Бу ерда R- чизилган айлана радиуси


А,В,С- учбурчак учлари.
Тенг томонли учбурчак учун  А=В=С=60 0,мос равишда r=R/2.
а ни ички айлана узунлиги килиб белгилавймиз. У холда
R=a/2*sin(A)=a* 3 , r=0.5*a*3 /3.
sin(1200)= sin(600), cos(1200) = -cos(600) га тенг.
Бу бизга учбурчаклардан бирини бурчагини чизишимиз, кейин эса икки томон уртаси 120 градусбурчакни хосил киламиз. 8-расмда келтирилган мисолда X0 нуктани айлантиршда у X2 нуктага келиб колади, X1 нукта эса Z нуктага(хисобланмайди) келиб колади.
Дастурни тузишда кетима –кет cos(1200) ва sin(1200) ва sin(1200) кийматларини хисоблаш керак, шунингдек учбурчакнинг кушимса параметри
b= w/ sin(1200).
Бу ерда b- учта кичик учбурчакларни энг каттарок учбурчак билан кенсишган томони узунлиги(8-расмга каранг).
w-хар бир буяладиган учбурчак томонлари калинлиги,

Дастурни тузиш учун маслахат


1. Барча узгарувчилар ёзилиши келтирилсин,(foregcolor=getcolor() узгарувчиси).


2. Ёродамчи узгарувчиларни хисоблаш:
sq3=sqr(3.0); ha=0.5*a; c=-0.5; s=0.5*sq3; b=w/s; hb=0.5*b/
3. Графикни юклаш.
4. Xc, Yc координаталар маркази аниклананг ва учбурчак учларини
Xc = 0.5*X_max; Yc=0.5(Y_max-r);
X[0]= -ha-2*b-hb; Y[0]= -r-w;
X[1]= X[0]+hb; Y[1]=-r-2*w;
X[2[=-X[1]; Y[2]=Y[1];
X[3]= hb; Y[3]= 2*r+w;
X[4]=0.0; Y[4]= 2*r;
X[5]=ha+hb; Y[5]= y[0].
4. Иккита циклни амалга оширамиз: буяш усун учта рангни танлашда ташки (I буйича) цикл ва ткоординаталарни нукталарга алмаштирш учун (J буйича) ички цикл.
points[2*j]=(xc+xj),
points[2*j+1]=(yc+yj).
xj=x[j],yj=y[j] координаталар буриш формуласига асосан хисобланади
x[j]=c*xj-s*yj;
y[j[=ss*xj+c*yj.
5. Контурларни бирлаштириш учун points[12]=points[0]; points[13]=points[1].
6. fillpattern=INTERLEAVE_FILL урнатиш;
setfillstyle(fillpattern,foregroundcolor );
fillpoly(7,points).
7.Графикни ёпиш.
График объектларни куришда рекурсиянинг кулланилиши
Ишнинг максади: оддий геометрик оъектларни: учбурчак, айланаларни чизишда рекурсив дастурларни тузишнинг асосий методларни ургатишдане иборат.
Агар функция узига бир неча марта ёки уз танасида бошка функцияларга мурожаат булса функция рекурсив(ёки рекурсияга асосланган) экан дейишади. Одий функцияга киришда чикиш унда рекурсив функцияга нисбатан тезрок юз берали.
Рекурсияни куллашга мисол ички жойлашагн учбурчакни чизиш мисол булад олади. Бу максадда биз 1-ишда ёзилаган TRIA учбурчагини курамиз. Битта учбурчакни учининг А, В, С, координаталрини куйидагича белгилаймиз: xA, yA, xB, yB, xC, yC, кейин эса яна TRIA функциясини чакириб томонларининг урта координаталари:
xP=(xB+xC)/2, yP=(yB+yC)/2; xQ=(xC+xA)/2; yQ=(yC+yA)/2; xR=(xA+xB)/2; yR=(yA+yB)/2.
Демак, учбурчак ичига туртта кичик учбурчак хосил булади.(9-расм). Кейин функция узини аргумент сифатида кичик учбурчак учлари билан чакиради. Берилган жараён n марта такрорланиши мумкин.

n сони рекурсия ичи хисобланагни учун функция аргументи сифатида кушилади. Масалан фойдаланувчи n=7 ни берса у холда функция аргументига n-1 киймат урнатилади, шунингдек n киймати “рекурсиянинг энг чукур нуктаси” 0 гатенг булади.


9-расм
Кейинга мисол сифатида Гильберт кияликлари номи билан машхур расмларни рекурсия усули билан ечамиз.Бу кияликлар П харфига асосланган, бу тасвир 10 расмда курсатилганидек квадратнинг учта томони курсатилаган. Гилберт кияликларининг 1, 2 .. тартиблари мавжуд булиб Н1, Н2, … ларни билдиради. Н2 шакли чизиклар(калин чизиклар) билан бирлаштирилган туртта Н1 шаклидан хосил килинади. Хакикатан бу чизиклар бир хил калинлинликда. Н2 ни биз катта П харфининг кичикрок п харфига алмаштирилган туррта кисм куринишда карашимиз мумкин. Бу кичи п харфлари учта чизик билан богланган. Улар квадрат томонидан уч марта кичик.




H1 H2

10-расм
Уша процедурани узини Н2 ни ташкил килган туртта П харфига, шуинингдек хар П харфини Н2ни кичик Н2 га алмаштирамиз, бир вактда уларнинг богловчи чизикни кичиклаштирамиз учта кичик Н2 шаклидан иборат Н3 шаклини хосил киламиз. (.11расм).


Энди хар бир кесим узунлиги Н3 шаклида ёзилган квадрат томонидант 7 марта кичик. Бундан кичиклаштириш коэфициентлари Н1, Н2 , Н3 …, шакларида 1,3,7 , …. Ларни ангалатиб Hn фигура учун формула ёрдамида хисобланиши мумкин.

Hilbert функцияси ва куйидаги аргументлар билан шакллантирамиз:


- А,В,С нукталар координаталари(12 расмга каранг);
- иккита йуналишдаги кесимлар горизонтал ва вертикал компонентлар, булардан бири АВ кесимда , бошкаси АС кесимда .


J
C
H K
G L
F
D B

A
12расм
Улар (dx,dy) сонлар жуфтлиги вектор куринишида берилиб мусбат, манфий ва
нол киймаьларни кабул килиши мумкин. Бу иккита векторни dAB ва dAC каби
белгилаймиз, рекурсия чукурлигини – n. N=0 да функция хеч кандай иш бажармайди.
12 расмни П харфининг 30 градус соат стрелкасига карши харакатлантирамиз,
жойлашиш холати эса учта нукта ёрдамида А,В и С бероилади. А нукта бошлангич В
нукта эса охирги нукта сиыфатида караймиз. С нуктани беришнинг асоссий сабаби киялик
АВ кесимнинг кайси томонидан буриш кераклигини билдиради.
Иккала dAB ва dAC курсатилган векторлар хам 12 расмда учта жойидан DF, GH ва IK кесимлар куринишда бирлаштирилаган. Учта берилган А,В,С нукталар ва иккита вектотр dAB ваdAС берилиши 12 расмдаги D, E, F, G, H, I, J, K нукталарнинг холатини аниклайди. Бунинг урнига туртта П харфнинг хар бирига Hilbert функцияси ёрдамида рекурсив мурожаат киламиз. Учта кесим DF, GH, IK бирлаштириш учун Draw ёки lineto функциясига мурожаат киламиз.
Hilbert функцияси ва у фойдаоанадиган sguare функцияси дастурда келтирилган.
Иккита масалани: биринчидан у лар айрим шаклларни чизади, айтайлик аргуметн сифатида радиус ва марказ берилган айланани чизиш, иккинчидан айнан ушу шаклни факат ундан кичикрок шаклни чизиш учун узига –узи рекурсив бир неча маротавба мурожаат килади. Кичик шакллар биринчи айланага нисбатан каттарок радиусда жойлашади(орбитадаги спутникка ухшаш) (13расм)
А йтайлик, энг катта айлана радиуси r га тенг булсин. У холда колган учта айлана радиуси га тенг булади. Катта орбита радиуси R=cr формула ёрдамида аникланади.
Энг катта айлана маркази ва ундан кейин бир-биридан R ораликда жойлашади. У холда бошка орбита радиуслари хисобланади. Бу шуни билдирадики энг ички(энг катта ) ва знг ташки (энг кичик ) айланалар оралиги куйидагига тенг:
: .

13 расм
Умуман олганда R радиус кийматини хисоблаш учун экраннин рухсат этилган майдонида энг кичик айлана улчамини хам хисобга олишимиз керак. У кичик булишига карамай аник улчамларга эга ва уни юкорида курсатилганлар каторига кушиш керак. Бу масалани енчишнинг энг оддий йули каторнинг кейинги хадини кушишдир, бу шуни билдирадики, биттага ортик булганда хам кейинги орбита учун жой ажратишни билдиради. Мос равишда , агар n=4 булса , у холда куйидаги катордан фойдаланамиз: .


Умумий холда бу оралик куйидагига тенг:

Умуман га караганда кичик булиб, йигинди S дан катта булмаслиги керак. R ва r радиуслар энг катта орбита ва энг катта айлана учун мос равишда куйидагича хисобланади:

бу ерда .
Scircle ( ) ва circles дастурлари куйида келтирилган.
Юкорида курсатилган рекурсив тасвирларни яратиш мисоллари бошка шаклларга хам куллаш мумкин, масалан квадратга, юлдузга ва бошк.
Адабиётлар
1.Шикин Е.В.,Боресков А.В. Компьютерная графика.Полигональные модели.-М.: ДИАЛОГ-МИФИ, 2000.-464 с.
2. Березин Б.И.,Березин С.Б. Начальный курс Си и С++.- М.: ДИАЛОГ-МИФИ, 1999.-288 с.
3. Боресков А.В.,Шикин Е.В.,Шикина Г.Е.Компьютерная графика:первое знакомство/Под ред,Шикина Е.В.-М.: Финансы и статистика,1996.-176 с.
4. Аммерал Л.Принципы программирования в машинной графике/Пер.с англ.-М.:”Сол Систем”,1992.-224 с.
5. Аммерал Л. Программирование графики на Турбо Си/Пер.с англ.-М.:
”Сол Систем”,1992.-221 с.

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