Pascal программалау тіліндегі фрактальді графика

Автор работы: Пользователь скрыл имя, 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 Жұлдызды аспан программасы......................................................................
Қорытынды...........................................................................................................
Қолданылған әдебиеттер....................................................................................

Файлы: 1 файл

Фрактальді графика.doc

— 351.50 Кб (Скачать файл)

Сурет 4. Машиналық координата жүйесі

 

Берілген суретте машиналық (xm, ym) және физикалық координаталар (x,y) жүйесі суреттелген. Экранға физикалық координаталары (x,y) нүктесін салу үшін, алдымен оның машиналық координаталарын анықтау қажет. Есептеу формулалары келесі түрде берілген:

xm=x0+x*Mx,

ym=y0-y*My,

мұндағы Mx, My – бір фихикалық бірлікте қанша пиксель бар екендігін көрсететін х және у осіне сәйкес масштаб.

x, y – нүктенің физикалық координаталары,

xm, ym - нүктенің физикалық координаталары,

x0, y0 – физикалық координаталар жүйесінің машиналық координата басы.

Мәселен бүкіл экранға монитор центрінде қиылысатын көлденең және тігінен орналасқан нүктелерді салу үшін келесі кестемен жұмыс жасауға тура келеді.

Кесте 5.

Программаны орындау жолы

 

 

N

Программалау жолдары

Орындалуы

1.

Есептің берілгені

Бүкіл экранға монитор центрінде қиылысатын көлденең және тігінен орналасқан нүктелерді салу.

2.

Математикалық сипаттамасы

Сызыққа тәуелді координаталар арқылы экран түрі бейнеленеді.

 

3.

Структограмманы өңдеу

 

 

4.

Программаның жазылуы

Program P5;

Uses graph; {раф. Модулін қосу}

Var gd,gm: integer;

Begin

gd: =detect; { граф. драйверді анықтау}

InitGraph (gd,gm,’ ‘); { Графиканы инициялизациялау }

Line (0, round (GetMaxY/2), GetMaxX,

Round (GetMaxY/2)); {көлденең сызық }

Line (round (GetMaxX/2), 0,Round (GetMaxX/2), GetMaxY);

{тігінен орналасқан сызық }

Readln; {бос енгізу}

CloseGraph; { Графиканың жабылуы }

End.

5.

Нәтижесін алу

Өз бетінше орындау


 

x∈ [-1; 1] үшін y=x2 функциясының графигін тұрғызатын программаны құру қажет.

Кесте 6.

Программаның орындалу жолы

 

N

Программалау жолдары

Орындалуы

1.

Есептің берілгені

Функцияның графигін тұрғызу керек x∈ [-1; 1] үшін y=x2.

2.

Математикалық сипаттамасы

Программаны орындап болғаннан кейінгі экран түрін сипаттау керек.

3.

Структограмманы өңдеу

 

 

 

 

 

 

 

4.

Программаның жазылуы

Program P6;

Uses graph;

Var gd,gm: integer;

x,y: real;

x0,y0,xm,ym,Mx,My: integer;

begin

gd: =detect;

InitGraph (gd,gm,’ ‘);

Mx: =300; x0: =320; My: =440; y0: =460;

{ 640x480 пикс. мониторы үшін таңдалған}

For xm: =20 to 620 do

Begin

x: = (xm-x0) /Mx;

y: =sqr (x);

ym: =round (y0-y*My);

PutPixel (xm,ym,1);

End;

Readln;

CloseGraph;

End.

5.

Нәтижесін алу

Өз бетінше орындау


 

  1. 5 Graph модулі

 

ТР жеткілікті түрде стандартты VGA экранмен жұмыс жасау үшін түрлі құрамдарға ие.

VGA адаптер 640х480 пикселге (экранның сол жақ жоғарғы бұрышындағы нүкте (0,0)) және 16 түсті қолдануға рұқсат етеді.

Графикамен жұмыс жасау кезінде алдымен оны инициялизациялау керек, ал аяқталысымен жабу қажет. Барлық графикалық процедуралар мен функциялар Graph модулінде орналасқан, сондықтан да оның қосылуының маңызы зор.

Графикалық программаның жалпы структурасы:

Uses crt, graph;

var Gd, Gm: Integer;

begin

Gd: = Detect;

InitGraph (Gd, Gm, 'c: \bp\bgi');

...

{Мұнда сурет тұрғызылады}

...

ReadKey;

CloseGraph;

end.

Бұл жерде c: \bp\bgi файлдың орналасуын көрсетеді egavga. bgi (графическалық адаптердің драйвері). Әр түрлі компьютерде бұл жол әр түрлі болады. Егер egavga. Bgi файлын программамен каталогқа орналастырса, онда жолды көрсетпеуге де болады.

Негізгі графикалық функциялар мен процедуралар:

Фигураларды тұрғызу

PutPixel (x,y,c) – экранға с түсті, (x,y) координаталы нүктені шығарады.

Line (x1,y1,x2,y2) – бастапқы нүктесі (x1,y1) және соңғы нүктесі (x2,y2) болатын сызықты салады.

Rectangle (x1,y1,x2,y2) – диогоналі (x1,y1) - (x2,y2) болатын тіктөртбұрыш контурын салады.

Bar (x1,y1,x2,y2) – диогональдары (x1,y1) - (x2,y2) юолатын боялған тіктөртбұрышты салады.

Circle (x,y,r) - центрі (x,y) және радиусы r-ге тең шеңбер салады.

Ellipse (x,y,ba,ea,xr,yr) – центрі (x,y) элипс доғасын, көлденең және тігінен орналасқан xr и yr радиусын салады және бастапқы және соңғы бұрышы ba және ea деп белгіленеді.

FillEllipse (x,y,xr,yr) - центрі (x,y) болатын , көлденең және тігінен орналасқан xr и yr радиусы бар боялған элипсті салады,

Стиль мен түсті анықтау.

GetPixel (x,y) - (x,y) координаталы пикселдің түсін қайтарады

SetColor (c) – суреттің түсін орнатады (сызық үшін)

SetFillStyle (p,c) – p стилін анықтап, с түсін береді ( "боялған" фигуралар үшін)

FloodFill (x,y,b) –ішкі нүктесі (x,y) және b контур түсімен тұйық облысты бояйды.

Мәтінмен жұмыс.

OutTextXY (x,y,st) – экранға (x,y) позициясымен st жолын шығарады

SetTextStyle (f,d,s) – f шрифтін орнатып, d бағыты мен өлшемін анықтайды

Қателік туралы хабарламалар

function GraphErrorMsg (ErrorCode: integer): String; Берілген ErrorCode коды үшін қателік туралы хабарлама кодын қайтарады.

function GraphResult: integer; Соңғы графикалық операция үшін қателік кодын қайтарады.

Адаптерді анықтау, инициализация және мәтін мен графика арасындағы көшулер.

procedure DetectGraph (var GraphDriver, GraphMode: integer); Аппаратураны тексеріп, қай графикалық драйвер қай режим қолданылатындығы анықталады (адаптер типі - GraphDriver, режим - GraphMode).

function GetDriverName: string; Берілген драйвер атауымен жолды шығарады.

procedure InitGraph (var GraphDriver: integer; var GraphMode: integer; PathToDriver: String); Графикалық жүйені инициализациялайды және графикалық режимді орнатады. PathToDriver – драйверге апаратын толық жол. bgi, көп жағдайда 'c: \tp\bgi'. Егер жол тасталынып кетсе (''), онда драйвер берілген каталогтан табылуы тиіс.

function RegisterBGIfont (Font: pointer): integer; Графикалық режим үшін BGI қаріпін жазады. Жазылған фонт SetTextStyle шақыруында қолданылуы мүмкін. Ол дискіден жазылып, кеңейтілуі. obj файлында (binobj. exe көмегімен) . exe жазылуы мүмкін. Қателік болған жағдайда функция нәтижесінде теріс мән шығарады.

function RegisterBGIdriver (Driver: pointer): integer; Графикалық режимде BGI драйверін жазады. Жаңадан жазылған драйвер InitGraph процедурасында қолданылатын болады. Ол дискіден жазылып, кеңейтілуі. obj файлында (binobj. exe көмегімен) . exe жазылуы мүмкін. Қателік болған жағдайда функция нәтижесінде теріс мән шығарады.

function InstallUserDriver (DriverFileName: string; AutoDetectPtr: pointer): integer; Драйверлердің құрылғылар кестесіндегі қолданушылардың BGI құрылғысының драйверін орнатады.

function InstallUserFont (FontFileName: string): integer; BGI жүйесінде құрылмаған жаңа қаріпті орнатады.

procedure SetGraphBufSize (BufSize: word); Функцияны толтыру(бояу) үшін буфер өлшемін өзгертуге мүмкіндік береді. BufSize байт өлшемді буфер айналым кезінде InitGraph үйімде жайғастырылады. 4К өлшемі 650 сызықтан тұратын көпбұрышты тұрғызуға жеткілікті.

function GetMaxMode: integer; Ағымда жазылған максимальді режимнің нөмірін қайтарады.

procedure GetModeRange (GraphDriver: integer; var LoMode, HiMode: integer); Берілген драйвер үшін максимальді және минимальді графиклық режимді қайтарады.

function GetModeName (GraphMode: integer): string; Жолды көрсетілген графикалық режимнің атымен қайтарады.

procedure SetGraphMode (Mode: integer); Жүйені көрсетілген графикалық режимге аударады және экранды тазартады.

function GetGraphMode: integer; Ағымдық графикалық режимді қайтарады.

procedure GraphDefaults; Ағымдық сілтегішті(CP) бастапқы позицияға тағайындайды (яғни 0,0 нүктесіне) және қолданушы тағайындаған барлық режимдерді бастапқы күйге лақтырады, соның ішінде терезені, палитраны, негізгі түс пен фонның түсін, сызықтың стилі, қаріпі, мәтіннің кеңейтілуі, символдардың өлшемі мен шығарылатын мәтіннің стилі. Жүйе графикалық режимді орналасуы тиіс.

procedure RestoreCrtMode; Графиканы инициялизациялаудан бұрын болған мәтіндік видеорежим қалпына келтіреді. Буферді босатып алмайды және тағайындалған айнымалыларды нөлге айналдырмайды.

procedure CloseGraph; Графикалық режимді жабады. Графиканы инициялизациялаудан бұрын болған мәтіндік видеорежим қалпына келтіреді. Буферді босатады және барлық графикалық айнымалыларды лақтырады.

Координаты графического курсора

function GetX: integer; (CP) Ағымдық позициялы Х координатасын қайтарады.

function GetY: integer; (CP) Ағымдық позициялы Ү координатасын қайтарады.

function GetMaxX: integer; Ағымдағы графикалық драйвер мен режим үшін максимальді Х (көлденеңінен) қайтарады.

function GetMaxY: integer; Ағымдағы графикалық драйвер мен режим үшін максимальді Ү (тігінен) қайтарады.

BGI-графикасының жетіспеушіліктері

Іскелік графика үшін аумақты мүмкіндіктерге қарамастан, кәсіби өңдеушінің көзқарасы бойынша графикалық құрылғылар жақсы ойды қалыптастырады. Кез келген спрайттармен жұмыс iстеуге болмайды, экранның скроллингі жоқ, сақтау / барлық бейнелерді шығару, суреттерді масштабтау, толтыру функциялары мен биталық үлгілермен жұмыс баяу жұмыс жасайды, басқа графикалық форматтағы файлдарды қолдану мүмкін емес, үшөлшемді бейнелер жоқ және тағы басқалары. Мұның барлығы графикалық редакторларды, инженерлік және математикалық графиканың жүйесін жазуға кедергі жасайды. Жоғарыда аталған мүмкіндіктерді орындау үшін видеожады мен BIOS көмекші функциялары тікелей қолжетімді болса, тікелей графикалық режимді басқарып отыру керек.

Стандартты бояу стильдері

Кесте 7.

Стандартты бояу стильдері

 

Тұрақтылар

Мәндері

Маскасы

EmptyFill

0

Фонның түсімен бояу

SolidFill

1

Ағымдағы түспен бояу

LineFill

2

Символдармен бояу --, түс – color

LtslashFill

3

Символдармен бояу // орташа қалыңдық, түс – color

SlashFill

4

Символдармен бояу // екі еселенген қалыңдық, түс – color

BkslashFill

5

Символдармен бояу \\ екі еселенген қалыңдық, түс – color

LtbkSlahFill

6

Символдармен бояу \\ орташа қалыңдық, түс – color

HatchFill

7

Көлденең-тік жіңішке штрих сызықтармен бояу, түс – color

XhatchFill

8

Диагоналі бойынша крестке-крест «сирек» жіңішке сызықтармен бояу, түс – color

InterLeaveFill

9

Диагоналі бойынша крестке-крест «жиі» жіңішке сызықтармен бояу, түс – color

WideDotFill

10

«Сирек» нүктелермен бояу

CloseDotFill

11

«Жиі» нүктелермен бояу

UserFill

12

Қолданушының таңдаған маскасы бойынша бояу, түс – color


 

Секторларды тұрғызу үшін келесі процедураларды пайдалануға болады:

PieSlice (x, y: integer, a, b, R: word), дөңгелектің секторын бояйды және салады. x, y шеңбер центрінің координаталары, сектор бастапқы a бұрыштан бастап соңғы бұрышы b дейін салынады, ал а түсі арнайы процедураны қолдану кезінде жасалады;

Sector (x, y: integer, a, b, Rx, Ry: word), эллипстағы секторды құрайды және бояйды. x, y кооринатасы – центрі, Rx, Ry – көлденеі және тік радиустары, сектор бастапқы a бұрыштан бастап соңғы бұрышы b дейін салынады.

PieSlice процедурасын қолдану мысалы:

SetFillStyle(10, 10); {стильді орнату}

SetColor(12); {сызу түсі}

PieSlice(100, 100, 0, 90, 50);

Sector процедурасын қолдану мысалы:

SetFillStyle(11, 9); {стильді орнату}

SetColor(LightMagenta); {сызу түсі}

Sector(300, 150, 180, 135, 60, 70);

 

  1. 6 Мәтінмен жұмыс

 

Экранға шығарылатын бейнені түсінікті мәтінмен шығарған ыңғайлы. Ол үшін графикалық режимде OutText және OutTextXY процедуралары қолданылады.

OutText(Textst: string) процедурасы ағымдағы сілтегіштің орналасуынан бастап мәтін жолын шығарады. Мысалы, OutText(‘кез келген клавишаны басыңыз’); Бұл процедураның жетіспеушілігі – шығару үшін кез келген нүктеге сілтеуге болмайды.

Мұндай жағдайда OutTextXY(x, y: integer, Textst: string) прцедурасын қолданған жөн, мұндағы x, y – мәтін басталатын координата, Textst – тұрақты немесе String типінің айнымалысы. Мысалы, OutTextXY(60, 100, ‘кез келген клавишаны басыңыз’).

Есептік мәндерді шығару

Graph модулінде есептік берілгендерді шығаратын процедура жоқ. Сондықтан да сандарды шығару үшін алдымен оларды жол ретінде Str процедурасымен түрленіру керек, кейін шыққан жолға ‘+’ жалғап отыру қажет.

Мысалы: Max:=34.56;

Str(Max : 6 : 2, Smax);{түрлендіру нәтижесі Smax-та орналасқан}

OutTextXY(400, 40, ‘Максимум=’ + Smax);

Бүтін сандарлы жолға түрлендіруге ыңғайлы болу үшін арнайы қолданушының IntSt және RealSt функцияларын пайдаланған жөн:

function IntSt(Int: integer) : string;

var Buf : string[10];

begin

Str(Int, Buf);

IntSt := Buf;

end;

function RealSt(R : real, Dig, Dec : integer) : string;

var Buf: string[20];

begin

Str(R : Dig : Dec, Buf);

RealSt := Buf;

end;

Бұл функциялар OutText және OutTextXY процедурасындағы параметр ретінде қарастырылады. Мысалы: x:= 5.295643871;

OutTextXY(20, 20, ‘x=’+RealSt(x,11,9));

Нәтижесінде экранға x=5.29564443871 пайда болады.

Информация о работе Pascal программалау тіліндегі фрактальді графика