І. Теориялық БӨлім с++ тіліндегі графика туралы жалпы түсінік


Динамикалық айнымалыны қолдана отырып фигуралар



бет6/9
Дата29.06.2022
өлшемі185 Kb.
#459546
1   2   3   4   5   6   7   8   9
Курсовая мысал

2.2 Динамикалық айнымалыны қолдана отырып фигуралар
суретін құру және жылжыту

Жалпы суретті құру үшін біз graphics кітапханасының функцияларын қолданамыз. Мысал ретінде әр түрлі фигуралардың қалай қозғалысқа түсетінін білу үшін мен келесідегідей фигуралардың суреттерінің программаларын жазамын: төртбұрыш, эллипс, дөңгелек, эллипс секторы, дөңгелк секторы. Бұл программалар бойынша олар, яғни фигуралар тік, горизонтальды немесе вертикальды синусойда бойымен қозғалысқа түседі. Жоғарыда айтылған фигураларды құру үшін ris.cpp.файлының функцияларын қолданамыз. ris.cpp. файлының төменде көрсетіледі.


# include


void * P;
// Боялған төртбұрышты құру
void Barr ( )
{ setfillstyle (1, white); // Бірқалыпты ақ түске бояу
bar (0, 0, 20, 20); // Төртбұрышты салу
getimage(0, 0, 20, 20, P); // Төртбұрышты жадыда сақтау
}
// Эллипстің суретін салу
void Ellipss ( )
{ setlinesty (0, 0, 3); // 3-пиксельдік ободок
setcolor (14); // Ободок түсі жасыл
setfillstyle (1, 1); // Көк түспен толтыру
fillellipse (31, 21, 30, 20); // Эллипсті салу
getimage (0, 0, 62, 42, P); // Эллипсті жадыда сақтау
}
// Дөңгелектің суретін салу
void Krug ( )
{ setlinesty (0, 0, 3); // 3-пиксельдік ободок
setcolor (14); // Ободок түсі
circle (21, 21, 20); // Дөңгелекті салу
setfillstyle (1, 1); // Түспен толтыру
floodfill (21, 21, 14); // Түспен толтыру
getimage (0, 0, 42, 42, P); // Дөңлекті жадыда сақтау
}
// Эллипстің боялған секторының суретін салу
void SectorEl ( )
{ setcolor (14); // Ободок түсі
setfillstyle (1, 1); // Түспен толтыру
sector (31, 31, 0, 210, 30, 20); // Секторды салу
getimage (0, 0, 62, 62, Р ); // Секторды жадыда сақтау
}
// Дөңгелектің боялған секторының суретін салу
void SectorKr ( )
{ setcolor (14); // Ободок түсі
setfillstyle (1, 1); // Түспен толтыру
sector (31, 31, 0, 240, 30); // Секторды салу
getimage (0, 0, 62, 62, Р ); // Секторды жадыда сақтау
}
void Prmoug ( )
{ setcolor (14); // Ободок түсі
restangle (0, 0, 30, 40); // Тік төртбұрышты салу
setfillstyle (1, 1); // Түспен толтыру
floodfill (21, 21, 14); // Түпен толтыру
getimage (0, 0, 31, 41, Р ); // Тік төртбұрышты
жадыда сақтау
}
Төменде көрсетілген программада берілген фигураның келесідегідей бағыттармен қозғалуының программасы көрсетілген: горизонтальді, вертикальді және де экран диагоналдары бойынша. Бұл программа жоғарыда жазылып кеткен ris.cpp. модулін қолданып берілген фигураларды горизонтальді, вертикальді және диагоналдар бойынша жылжытады.

# include


# include
# include
# include
# include // Delay үшін
# include “ris.cpp” // Модульді қосу

// Басты программа


void main ( )
{ const N=6; // Фигуралар саны
char c;
int ga, gm, error, sz, XM, YM, i, j, DX, DY, X, Y, DDX, DDY;
ga= DETECT; // Драйвердің автоматикалық анықталуына
gm=DETECT; // Адаптер жұмысының режимі

// Графикалық режимнің инициализациялануы


initgraph (&ga, &gm);
error= graphresult;

// Графикалық режимнің дұрыс инициализациялануының анализі


if (error != grok)
{ printf (“Қате ! Графикалық редактор табылмады %s
\n”,grapherrormsg(error));
printf (“Программаны тоқтату ншін кез келген батырманы
басыңыз:”);
geth ( ); // Батырманы басқанға дейінгі ұсталынған уақыт
аралығы
exit (1); // Программа орындалуының аяқталуы
}

// Сурет тік бұрышы үшін операциялық жадының запросы


sz= imagesize (0, 0, 62, 62); // Қажет болатын
операциялық жадыдағы орын
P= malloc (sz); // Операциялық жадыға запрос
XM= getmaxx ( ); YM= getmaxy ( );
DDX= XM / 20; DDY= YM / 20;
for (i=1; i<=N; i++); // Фигуралар номерлерін теру
{ XM= getmaxx ( ); YM= getmaxy ( );
cleardevice ( ); // Экранды тазалау
swich (i) // Сурет салу функциясын шақыру:
{ case 1: krug ( ); break; // Дөңгелек
case 2: Ellipss ( ); break; // Эллипс
case 3: Barr ( ); break; // Боялған тік төртбұрыш
case 4: SectorKr ( ); break; // Дөңгелек секторы
case 5: SectorEl ( ); break; // Эллипс секторы
case 6: Prmoug ( ); // Тік төртбұрыш
}
settextstyle (0, 0, 1);
outtextxy (15, getmaxy – 50, “Әрі қарай жалғастыру үшін кез
келген батырманы басыңыз”);
getch ( ); // Батырманың басылуын тоқтату
for (j=1; j<=4; j++) // Қозғалыс варианттарының
номерлерін теру
{ cleardevice ( ); // Экранды тазалау
switch (j); // Вариант қозғалысы мәндерін орнату:
{ case 1: X=0; Y=YM; DX=DDX; DY=0; break;
// Горизонталь
case 2: X=XM/2; Y=0; DX=0; DY=DDY; break;
// Вертикаль
case 3: X=0; Y=0; DX=DDX; DY=DDY; break;
// Басты диагональ бойынша
case 4: X=XM; Y=0; DX=-DDX; DY=DDY;
// Кері диагональ бойынша
}
outtextxy (15, getmaxy ( ) – 50, “Тоқтату және жалғастыру
үшін кез келген батырманы басыңыз”);
do // Фигураларды экранға шығару
{ putimage (X, Y, P, 0); // Суретті шығару
delay (200); // Программаны ұсталыну уақыты
// PutImage (X, Y, P, 0); // Координаттардың
өзгерісі
X+= DX; Y+= DY;
}
while ( ! kbhit ( ) && (X<=XM) && (Y<=YM));
C=getch ( ); // Символдардың буферден оқылуы
} // Варианттар қозғалысының циклы
} // Қозғалыс үшін фигуралардың ауысу циклы
free (P); //
closegraph ( ); // Графикалық режимді жабу
}

Суреттерді горизонтальді синусойда бойынша қозғалысқа түсіруге арналған прорамма.


# include


# include
# include
# include
# include // Delay үшін
# include
# include “ris.cpp” // Модульді қосу

// Басты программа


void main ( )
{ const N=6; // Фигуралар саны
float PI=3.141596, XS, DXS;
int ga, gm, error, XM, YM, i, DX, X, Y, YN;
ga= DETECT; // Драйвердің автоматикалық анықталуына
gm=DETECT; // Адаптер жұмысының режимі
// Графикалық режимнің инициализациялануы
initgraph (&ga, &gm);
error= graphresult;

// Графикалық режимнің дұрыс инициализациялануының анализі


if (error != grok)
{ printf (“Қате ! Графикалық редактор табылмады %s
\n”,grapherrormsg(error));
printf (“Программаны тоқтату ншін кез келген батырманы
басыңыз:”);
geth ( ); // Батырманы басқанға дейінгі ұсталынған уақыт
аралығы
exit (1); // Программа орындалуының аяқталуы
}

// Сурет тік бұрышы үшін операциялық жадының


P= malloc (imagesize (0, 0, 62, 62)); // Қажет болатын
операциялық жадыдағы орын
XM= getmaxx ( ); YM= getmaxy ( );
Settextstyle (0, 0, 1);
for (i=1; i<=N; i++); // Фигуралар номерлерін теру
{ XM= getmaxx ( ); YM= getmaxy ( );
cleardevice ( ); // Экранды тазалау
swich (i) // Сурет салу функциясын шақыру:
{ case 1: krug ( ); break; // Дөңгелек
case 2: Ellipss ( ); break; // Эллипс
case 3: Barr ( ); break; // Боялған тік төртбұрыш
case 4: SectorKr ( ); break; // Дөңгелек секторы
case 5: SectorEl ( ); break; // Эллипс секторы
case 6: Prmoug ( ); // Тік төртбұрыш
}
outtextxy (15, getmaxy – 50, “Әрі қарайжалғастыру үшін кез
келген батырманы басыңыз”);
getch ( ); // Батырманың басылуын тоқтату
cleardevice ( ); // Экранды тазалау
outtextxy (15, getmaxy ( ) – 50, “Тоқтату және жалғастыру
үшін кез келген батырманы басыңыз”);
// Бастапқы мәндерді орнату
Y= YM / 2; // Y тің пиксельдегі бастапқы мәні
X= 10; // Пиксельдегі сол жақтан Х ке дейінгі арақашықтық
YN= YM / 2; // Пиксельдегі жоғарыдан Y осіне дейінгі
арақашықтық
XS= 0; DXS = 0.05 * PI;
DX= 0.8 * XM / 4 / PI * DXS; // Х осі бойынша масштаб
do // Фигураларды экранға шығару
{ putimage (X, Y, P, 0); // Суретті шығару
delay (50); // Программаны ұсталыну уақыты
// PutImage (X, Y, P, 0); // Координаттардың
өзгерісі
XS= XS + DSX; Y= YN + sin (XS) * 0.3 * YM;
X+= DX;
}
while ( ! kbhit ( ) && (X<=XM) && (Y<=YM));
C=getch ( ); // Символдардың буферден оқылуы
} // Варианттар қозғалысының циклы
} // Қозғалыс үшін фигуралардың ауысу циклы
free (P); //
closegraph ( ); // Графикалық режимді жабу
}
Суреттерді горизонтальді синусойда бойынша қозғалысқа түсіруге арналған прорамма.

# include


# include
# include
# include
# include // Delay үшін
# include
# include “ris.cpp” // Модульді қосу

// Басты программа


void main ( )
{ const N=6; // Фигуралар саны
float PI=3.141596, XS, DXS;
int ga, gm, error, XM, YM, i, DY, X, Y, YN;
ga= DETECT; // Драйвердің автоматикалық анықталуына
gm=DETECT; // Адаптер жұмысының режимі

// Графикалық режимнің инициализациялануы


initgraph (&ga, &gm);
error= graphresult;

// Графикалық режимнің дұрыс инициализациялануының анализі


if (error != grok)
{ printf (“Қате ! Графикалық редактор табылмады %s
\n”,grapherrormsg(error));
printf (“Программаны тоқтату ншін кез келген батырманы
басыңыз:”);
geth ( ); // Батырманы басқанға дейінгі ұсталынған уақыт
аралығы
exit (1); // Программа орындалуының аяқталуы
}

// Сурет тік бұрышы үшін операциялық жадының


P= malloc (imagesize (0, 0, 62, 62)); // Қажет болатын
операциялық жадыдағы орын
XM= getmaxx ( ); YM= getmaxy ( );
Settextstyle (0, 0, 1);
for (i=1; i<=N; i++); // Фигуралар номерлерін теру
{ XM= getmaxx ( ); YM= getmaxy ( );
cleardevice ( ); // Экранды тазалау
swich (i) // Сурет салу функциясын шақыру:
{ case 1: krug ( ); break; // Дөңгелек
case 2: Ellipss ( ); break; // Эллипс
case 3: Barr ( ); break; // Боялған тік төртбұрыш
case 4: SectorKr ( ); break; // Дөңгелек секторы
case 5: SectorEl ( ); break; // Эллипс секторы
case 6: Prmoug ( ); // Тік төртбұрыш
}
outtextxy (15, getmaxy – 50, “Әрі қарайжалғастыру үшін кез
келген батырманы басыңыз”);
getch ( ); // Батырманың басылуын тоқтату
cleardevice ( ); // Экранды тазалау
outtextxy (15, getmaxy ( ) – 50, “Тоқтату және жалғастыру
үшін кез келген батырманы басыңыз”);
// Бастапқы мәндерді орнату
X= XM / 2; // X тің пиксельдегі бастапқы мәні
YN= 10; // Пиксельдегі сол жақтан Y ке дейінгі
арақашықтық
XN= XM / 2; // Пиксельдегі жоғарыдан X осіне дейінгі
арақашықтық
XS= 0; DXS = 0.05 * PI;
DY= 0.8 * XM / 4 / PI * DXS; // Y осі бойынша масштаб
Y= YN;
do // Фигураларды экранға шығару
{ putimage (X, Y, P, 0); // Суретті шығару
delay (50); // Программаны ұсталыну уақыты
// PutImage (X, Y, P, 0); // Координаттардың
өзгерісі
XS= XS + DSX; Y= YN + sin (XS) * 0.3 * YM;
Y+= DY;
}
while ( ! kbhit ( ) && (X<=XM) && (Y<=YM));
C=getch ( ); // Символдардың буферден оқылуы
} // Варианттар қозғалысының циклы
} // Қозғалыс үшін фигуралардың ауысу циклы
free (P); //
closegraph ( ); // Графикалық режимді жабу
}



Достарыңызбен бөлісу:
1   2   3   4   5   6   7   8   9




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет