Автор работы: Пользователь скрыл имя, 28 Апреля 2014 в 01:25, курсовая работа
Берілген курстық жұмыста Паскаль программалау тілінде түрлі
графикалық обьектілерді құру мүмкіндіктері қарастырылған. Graph модулін
пайдалана отырып оның түрлі сипаттағы функциялары мен процедуралары
программалау кезінде қолданылды. Паскаль программалау тілінде графикалық
жұмыстар екі режимде іске асады
Кіріспе....................................................................................................................
1. 1. Паскаль программалау тіліндегі фрактальді графика........................
1. 1 Базалық процедуралар мен функциялар.......................................................
1. 2 Фрактальді графикалық режимдегі экран мен терезелер...........................
1. 3 Фрактальді графикада қарапайым фигураларды шығару...........................
1. 4 Графикалық процедуралар………………………………………………….
1. 5 Graph модулі…………………………………………………………………
1. 6 Мәтінмен жұмыс………………………………………………………….....
2. Фрактальді графика мүмкіндіктерін программалауда жүзеге асыру.
2. 1 Функцияның графигін тұрғызу……….........................................................
2. 2 Графикадағы циклдер. Кездейсоқ процесстердiң құрастыру….................
2. 3 Жұлдызды аспан программасы......................................................................
Қорытынды...........................................................................................................
Қолданылған әдебиеттер....................................................................................
Қаріптер.
Графикалық режимде мәтін шығару түрлі стандартты (кесте 8) және қолданушының қаріптерімен берілуі мүмкін. Қаріп екі түрге ажыратылады: векторлық және растрлық. Растрлық қаріп – нүкте матрицаларымен беріледі, ал векторлық – символды құрайтын векторлар қатарымен беріледі.
Графикалық режимнің инициализациясынан кейін ереже бойынша клавиатура драйвері қолданатын DefaultFont растрлық қаріпі орнатылады.
Кесте 8.
Стандартты қаріптер
Қаріп |
Файл |
TriplexFont |
Trip.chr |
SmallFont |
Litt.chr |
SansSerifFont |
Sans.chr |
GothicFont |
Goth.chr |
Стандартты қаріптерің көпшілігі орысша символдардан құралмайды. Өзіндік қаріптерді өңдеу – жеткілікті қиын және бейнетті процесс. Егер арнайы TurboFont, BgiToolKit пакеттерін пайдаланса, ол үдемелі болуы мүмкін.
Қажетті қаріпті SetTextStyle(Font,d,c:word) процедурасымен орнатуға болады, мұндағы Font – таңдалған қаріп, d – бағыт (көлденең немесе тігінен) с – шығарылатын символарың өлшемі. Алғашқы екі параметрдің мүмкін мәндері 8-кестеде көрсетілген.
Тік шығаруды ұйымдастыру кезінде MoveTo көмегімен бастапқы шығару нүктесін орнатпаса, мәтін экранның астыңғы жолынан басталып жоғары қарай жалғасатынын ескеру қажет. Символдардың биіктігі с коэффициентімен белгіленеді.Егер с=1, онда символ матрицада ұрылады 8´8, егер с= 2, онда матрица 16´16 және тағы басқалары 10-есе үлкейткенге дейін.
Мысалы әр түрлі биіктіктегі DefaultFont қаріпімен екі жол (көлденеі және тік) жазу керек.
SetTextStyle(0,11); {стандартты биіктіктегі әріптер}
OutTextXY(200,200, ‘тік жол);
SetTextStyle(0,0,2); {ірңп өлшемі үлкейтілген}
OutTextXY(200,220, ‘көлденең жол);
Мәтіннің туралануы.
Кейбір жағдайда бір жолға бір-бірінен төмен және жоғары орналасқан символдарды шығаруға тура келеді. Мәтінді туралау SetTextJustify(Horiz, Vert : word) процедурасы арқылы тігінен де, көлденең де Horiz және Vert (мүмкін мәндер 9 кестеде) параметрлерінің жағдайына байланысты жүзеге асады.
Кесте 9.
Туралану параметрі
Параметр |
Мәндері |
Комментарий |
Көлденең туралану | ||
LeftText |
0 |
Сол жаққа туралау |
CenterText |
1 |
Ортаға келтiру |
RightText |
2 |
Оң жаққа туралау |
Тігінен туралану | ||
BottomText |
0 |
Төменге орналастыру |
CenterText |
1 |
Ортаға келтiру |
TopText |
2 |
Жоғарға орналастыру |
Мысал ретінде x2 алынады:
SetTextJustify(1, 1);
OutTextXY(100,100, ‘X’);
SetTextJustify(1, 0);
OutTextXY(108,100, ‘2’);
2. Фрактальді графика мүмкіндіктерін программалауда жүзеге асыру
Графикалық режимнің көмегімен Функцияның графигін тұрғызу – функцияның графикалық және аналогиялық ұғымын игеруді талап етеді. Сонымен қатар цикл операторын қолдану керек, ол әрбір нүктенің ординатасын есептеуде біртекті күш кетірмес үшін қолданылады.
Суреттерді шығару үшін тек қана бірінші квадрантты координаталар үйесін пайдаланған. Көптеген функцияларды тұрғызу кезінде берілген интервалда ең болмағанда екі квадрант жұмыс жасауы тиіс. Жалпы жағдайда координата жүйесін жазықтықтың кез келген бөлігінде суреттеген пайдалы, алайда оны экранның центріне орналастырғанды көрнекі болады. Мұндай жағдайда координата басын экранда (x0, y0) нүктесінде орнатқаннан кейбір қисықтың кез келген нүктесiнiң (x, y) координатасы айырыммен (x-x0, y-y0) анықтауға болады. Осыдан кейін программада тек оң мәндерді ғана емес, теріс мәндерді де қолдануға болады.
Сурет кішкентай болып шығады, сондықтан суреттің масштабын үлкейтуге тура келеді. Егер функция үшін бүкіл экран пайдаланылса, суретті таңдалған экранға байланысты х және осі бойынша үлкейту керек.
Үлкейту масштабын келесі тәсілмен таңдауға болады:
-графиканың көлденең және тік өлшемін анықтау (ол үшін мәндер облысының шегі және анықталу облысындағы функцияның максимум және минимум мәндері анықталады, кейін графиканың көлденең және тік өлшемі болатын аргумент пен функцияның максимум және минимум мәндерінің айырымдары есептеледі);
- Өлшемді анықтау (алдымен экранның түріне байланысты суреттің көлденең және тігінен келген өлшемдері мына формула арқылы анықталады: масштаб (г/в) = экран өлшемі (г/в) графиктің өлшемі (г/в), кейін олардың ішінен кіші өлшемдісін таңдалады. Біздің жағдайда графиктің өлшемі 640×480.
Кез келген жағдайда, нүктені экранға шығару үшін х-ті алып, обсциссада у-ті анықтап, кейін нүктелері белгіленеді. Экраннан х мәндерінің шектеулі ғана санын алуға мүмкіндік болғандықтан, олар циклдың көмегімен теріледі.
y=x2 функциясының графигін тұрғызу
1-нұсқасы
program f;
uses graph;
var gd, gm: integer;
x, y: real;
begin
gd:= detect;
initgraph( gd, gm, ‘c/ bp’);
SetColor(5);
Line(0, 240, 640, 240);
Line(320, 0, 320, 480);
x:= -20;
While x<=20 do
begin
y:= -Sqr(x);
PutPixel( x *5 + 320, y*5 +240, 15);
x:=x + 0.01;
end;
end.
2-нұсқасы
program f;
uses graph, crt;
var gd, gm: integer;
x, y, mx, my, m,x1, x2, y1, y2,h: real;
function f(x:real): real;
begin
f:= Sqr(x);
end;
clrscr;
Write(‘қимның шегін енгізу’);
Read(x1, x2);
y1:=f(x1); y2:=f(x2);
mx:=640 /(x2 –x1);
my:=480 / (y2 – y1);
If mx< my Then m:=mx
else m:= my;
h:= 1/m; x:=x1;
gd:= detect;
initgraph(gd, gm, ‘c/ bp’);
SetColor (5);
Line(0, 240, 640, 240);
Line(320, 0, 320, 480);
While x<= x2 do
begin
y:= -f(x);
PutPixel(x *m +320, y*m +240, 15);
x:= x+ h;
end;
end.
Функциямен салыстырғанда y=f(x) айқын түрде берілген, х параметрі бұл жағдайда кейбір мәндерге тәуелді функция болып саналады.
Мысалы функцияның графигін тұрғызу қажет (кардиоидтың):
x = a cos t ( 1+ cost), y = a sin t( 1+cost), a > 0, t Î [0, 2p )
Программаның фрагменті:
SetColor (5);
Line(0, 240, 640, 240);
Line(320, 0, 320, 480);
t:=0; a:=3;
While t<= 3.1415 do
begin
x:=a*cos(t)*(1+cos(t));
y:= - a sin(t)*(1+cos(t));
PutPixel(x*5 +320, y*5 +240, 15);
x:= x+ 0.01;
end;
2. 2 Графикадағы циклдер. Кездейсоқ процесстердiң құрастыру
Суреттер бiр қалыпты және жүйелi болмау үшiн, фигураларға кездейсоқ өлшем, түс, координата беру керек. Ол үшін арнайы Random функциясы бар. Ол [0, 1) кездейсоқ сандарын шығарады.
Для того, чтобы картинки не были монотонными и регулярными, можно задавать фигурам случайные размеры, цвет, координаты. Для этого имеется специальная функция Random. Она генерирует случайные числа из [0, 1). Бастапқы аралықтың кеңейтулерi үшiн Random(I: word)функциясы қолданылады, ол диапазоны 0… I аралығындағы сандарды шығарады. Шын мәнінде бұл функциялар кездейсоқ сандардың кейбір бірізділігін шығарады, толық кездейсоқтықтың иллюзиясына қол жеткізу үшін кездейсоқ сандардың датчик базасын өзгертетін Randomize командасы қолданылады.
Мысалға экранның кездейсоқ жерінде кездейсоқ түстегі нүктені шығару керек.
Программа фрагменті:
Randomize
x:=random(640); y:=Random(480); c:=Random(15);
PutPixel(x, y, c);
Кездейсоқ жерінде кездейсоқ түстегі 5000 нүктені салу керек.
Программа фрагменті:
For i:=1 to 5000 do
begin
x:=Random(640); y:=Random(480); c:=Random(15);
PutPixel(x, y, c);
end;
Қозғалыстың иллюзиясын құру.
Экрандағы суреттің қозғаласын көрсетуді құру бірнеше тәсілмен іске асады.
Обьект қозғалысының имитациясы экранда әрекет жиыны программасын көп орындау арқасынды: салу – пауза – өшіру (сол жерде фонның түсімен салу) – суреттің орналасу координатасын өзгерту.
Программаны құрмас бұрын қозғалыстағы обьекттің сипатталуын, обьекттің ағымдағы орналасуын анықтайтын координаталардың өзгеруін, өзгеру диапазоны мен қадамын ойлап табу қажет.
Атомның моделін сипаттайтын программаны игеру керек. Оның қозғалысын бақылап отыру қажет.
program Model_At;
uses Crt, Graph;
const
Ra=100;{ атом радиусы }
Rc=10; { ядро радиусы }
Re=4; { электронның радиусы }
k=0.5; { электрон орбиталарын қысу коэффициенті}
Dr=30; { электрон координатасының өзгеру параметрі}
Step1=0.2; { электрон орналасуының өзгеру қадамы}
Step=100; {кідіріс уақыты – электрондардың қозғалыс жылдамдығы}
var
cx, cy, y, y1, y2, x, x1, x2, x3, y3:integer;
I, I1, I2, I3: real; gd, gm: integer;
begin
clrscr;
gd:=detect; initgraph(gd, gm, ‘драйверге жол);
SetTextStyle(0, 0, 2); OutTextXY(200, 30, ‘атом моделі’);
cx:= GetMaxX div 2; {экран центрін анықтау – ядроның орналасуы}
cy:= GetMaxY div 2;
PieSlice(cx, cy, 0, 360, Rc);{атом ядросын салу}
SetColor(Red); SetLineStyle(0, 0, 3);
Line(cx-7, cy, cx+7, cy); Line(cx, cy-5, cx, cy+5);
SetLineStyle(0,0,1); SetFillStyle(1, 1);
I:=Pi/4; { 4 электронның бастапқы орнын беру}
I1:= - Pi/4; I2:= - Pi/2; I3:= Pi/2;
SetTextStyle(0, 0, 1);SetColor(jellow);
OutTextXY(180, 420,’бас тарту үшін кез келген батырманы басу керек’);
While not KeyPressed do {батырма басылмайынша қайталау}
begin
{ электрондардың координатасые анықтау}
x:=Round (Ra*cos(I)) +cx; Y:= Round (k+Ra*sin(I)) +cy;
x1:= Round((Ra+Dr)*cos(I1)) +cx; y1:= Round (k*(Ra+Dr)*sin(I1)) +cy;
x2:= Round((Ra-Dr)*cos(I2)) +cx; y2:= Round (k*(Ra-Dr)*sin(I2)) +cy;
x3:= Round((Ra-Dr)*cos(I3)*2.3) +cx; y3:= Round (k*(Ra-Dr)*sin(I3)*2.3) +cy;
{көк түсті орнатып электронды салу}
SetColor(1);
Circle (x, y, Re); PutPixel(x, y, 2);
Circle (x1, y1, Re); PutPixel(x1, y1, 2);
Circle (x2, y2, Re); PutPixel(x2, y2, 2);
Circle (x3, y3, Re); PutPixel(x3, y3, 2);
Delay(Step);
{электрондары фонның түсімен салу}
SetColor(0);
Circle (x, y, Re); PutPixel(x, y, 2);
Circle (x1, y1, Re); PutPixel(x1, y1, 2);
Circle (x2, y2, Re); PutPixel(x2, y2, 2);
Circle (x3, y3, Re); PutPixel(x3, y3, 2);
{электрондардың орнының өзгеруін беру}
I:=I + Step1; I1:=I1 – Step1; I2:=I2 + Step1; I3:=I3 + Step1;
end; {циклдің соңы}
CloseGraph;
end.
2. 3 Жұлдызды аспан программасы
Жұлдызды аспанды салып және ондағы фона НЛО-ның суретін орналастыратын прграмманы игеру қажет.
program NLO;
uses crt, graph;const
k=20; Pause=50;
var
gd, gm, xmin, xm, ymin, ym, x, y, tx, ty, rx, ry, size, i, dx, dy, width, height: integer;
sauser:Pointer;
begin
Randomize;
gd:= detect; initgraph(gd, gm, ‘драйверге жол);
SetTextStyle(0, 0, 2); OutTextXY(50, 10, ‘НЛО-ның қозғалыс демонстрациясы’);
{НЛО салу}
x:=R*5; y:=R*2; xm:=GetmaxX- 5; ym:=GetmaxY-25;
Ellipse(x, y, 0, 360, R, R div 3+2);
Ellipse(x, y-4, 190, 357, R, R div 3);
Line(x + 7, y - 6, x + 10, y - 12);
Line(x -7, y - 6, x + 10, y - 12);
Circle(x + 10, y - 10, 2);
Circle(x -10, y - 10, 2);
FloodFill(x+1, y+4, White);
{НЛО габориті анықталып, динамикалық айнымалыға орналастырылады}
Tx:= x-R; Ty:=y-14; Rx:;=x+R; Ry:=y+R div3 +3;
Width:=Rx-Tx+1; Size:=ImageSize(Tx, Ty, Rx, Ry);
GetMem(sauser, Size);
GetImage(Tx, Ty, Rx, Ry, sauser^);
{суреттің тұрғызылуы өшіріледі}
PutImage(Tx, Ty, sauser^, XorPut);
{жұлдызды аспан салынады}
SetStyle(1, blue); {көгілдір аспанның стилі мен боялу түсі орнатылады}
SetColor(White);
{тіктөртбұрыш салынып терезе ашылады}
Rectangle(xmin, ymin, GetmaxX, GetmaxY);
SetViewPort(xmin, ymin, GetmaxX, GetmaxY, ClipOn);
FloodFill(xmin+1, ymin+1, White);
For i:=1 to 500 do {ақ түсті 500 жұлдызды салу}
PutPixel(Random(GetmaxX), Random(GetmaxY- ymin), 15);
{НЛО-ға бастапқы орны беріледі}
x:=xm div 3 – xmin; y:=ym div 3 – ymin; dx:=6; dy:=6;
Repeat {кез келген батырма басылғанша цикл орындалады}
PutImage(x, y, sauser^, XorPut); {объект бейнеленеді}
Delay (Pause);{ кідіріс}
PutImage(x, y, sauser^, XorPut); {паузадан кейін обьектті өшіреді}
{объектті орналастырады}
If (x<xmin) Or (y<ymin) Or (x+Width +1> xm) Or (y+Height +1> ym) Then
begin {егер объект сол жақ жоғарғы шекке шығып кетсе, ол терезе ішінде орналасатындай координаталарын өзгерту керек}
Информация о работе Pascal программалау тіліндегі фрактальді графика