Добавлен: 03.12.2023
Просмотров: 64
Скачиваний: 4
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
// on_paint();
break;
case 'm':
nk -= 30;
// on_paint();
break;
case 'r':
if (rejxmploskosti == 4)rejxmploskosti = 1;
else
rejxmploskosti++;
on_paint();
break;
case 'o':
if (flagproekcxi[3] == 4) { glutDisplayFunc(Tpaint); tekpaint = Tpaint; flagproekcxi[3] = 0; flagproekcxi[0] = 1; flagproekcxi[1] = 1; flagproekcxi[2] = 1; }
else
if (flagproekcxi[3] == 3) { flagproekcxi[3]++; flagproekcxi[0] = 1; flagproekcxi[1] = 1; flagproekcxi[2] = 0; }
else
if (flagproekcxi[3] == 2) { flagproekcxi[3]++; flagproekcxi[0] = 1; flagproekcxi[1] = 0; flagproekcxi[2] = 1; }
else
if (flagproekcxi[3] == 1) { flagproekcxi[3]++; flagproekcxi[0] = 0; flagproekcxi[1] = 1; flagproekcxi[2] = 1; }
else if (flagproekcxi[3] == 0) {
flagproekcxi[3]++; glutDisplayFunc(on_paint); tekpaint = on_paint;
}
on_paint();
break;
case 'p':
teka = 0;
system("cls");
cout << "vvedite x normali ploskosti";
vvod = 5;
break;
case 't':
if (meta) { meta = 0; metod = vdiy; }
else { meta = 1; metod = rkdiy; }
break;
case 'h':
system("cls");
cout << "Enter - naqat' vvod peremennxh" << endl
<< "n - uv'eliqit' wag" << endl
<< "m - um'en'wxt'" << endl
<< "p - vv'esti normal' ploskosti" << endl
<< "t - eyler || rungekut" << endl
<< "o - proekcxya" << endl
<< "r - p'er'ekl'uqit' r'ejxm otobrajeniya";
break;
case 'k':
system("cls");
cout <<
endl << "n=" << nk <<
endl << "x=" << xnk <<
endl << "y=" << ynk <<
endl << "z=" << znk;
break;
}
}
// 2 obrabotka hotk'eyev-------------------------------------------------------------------------------------------------------------
//|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// 1 vvod peremennxh-----------------------------------------------------------------------------------------------------------------
if (key == 13)
{
if (vvod == 0) { vvod = 1; strcpy(a, ""); cout << endl << "vvedite peremennuyu kotoruyu sobiryet'es' zadat' (x | y | z)"; teka = 0; }
else if (vvod == 1)
{
system("cls");
if (a[0] == 'x')vvod = 2;
else if (a[0] == 'y')vvod = 3;
else if (a[0] == 'z')vvod = 4;
else if (a[0] == 's')
{
if (a[1] == 'x')
vvod = 11;
else if (a[1] == 'y')
vvod = 12;
else if (a[1] == 'z')
vvod = 13;
else vvod = 0;
}
else vvod = 0;
if (vvod)cout << "vvedite " << a[0] << endl << a[0] << " = ";
teka = 0;
}
else if (vvod == 2) { cout << "f=" << f(sdix, tfx); vvod = 0; }
else if (vvod == 3) { cout << "f=" << f(sdiy, tfy); vvod = 0; }
else if (vvod == 4) { cout << "f=" << f(sdiz, tfz); vvod = 0; }
else if (vvod == 5) { cout << endl << "vvedite normal y"; normal.x = charvfloat(a, teka); teka = 0; vvod = 6; }
else if (vvod == 6) { cout << endl << "vvedite normal z"; normal.y = charvfloat(a, teka); teka = 0; vvod = 7; }
else if (vvod == 7) { cout << endl << "vvedite point x"; normal.z = charvfloat(a, teka); teka = 0; vvod = 8; }
else if (vvod == 8) { cout << endl << "vvedite point y"; point.x = charvfloat(a, teka); teka = 0; vvod = 9; }
else if (vvod == 9) { cout << endl << "vvedite point z"; point.y = charvfloat(a, teka); teka = 0; vvod = 10; }
else if (vvod == 10) { point.z = charvfloat(a, teka); oppl(normal, point); vvod = 0; }
else if (vvod == 11) { start.x = charvfloat(a, teka); vvod = 0; }
else if (vvod == 12) { start.y = charvfloat(a, teka); vvod = 0; }
else if (vvod == 13) { start.z = charvfloat(a, teka); vvod = 0; }
}
// 1 vvod peremennxh-----------------------------------------------------------------------------------------------------------------
//|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}
void on_motion(int x, int y)
{
switch (button) {
case 0:
angleX += x - mouseX;
angleY += y - mouseY;
mouseX = x;
mouseY = y;
break;
case 2:
distZ += (y - mouseY) / 10;
cout << distZ;
mouseY = y;
break;
}
}
void on_mouse(int _button, int state, int x, int y)
{
if (state == 1) { // 0 - натиснули на кнопку, 1 - відпустили кнопку
button = -1; // ніяка кнопка не натиснута
return;
}
switch (button = _button) {
case 0: mouseX = x; mouseY = y;// cout << "0------------------------------------------------";
break;
case 2: //angleX = 0; angleY = 0;
mouseY = y;// cout << "2------------------------------------------------";//distZ = -15
; break;
}
}
void on_size(int w, int h)
{
width = w;
height = h;
if (height == 0) height = 1; // Запобігання ділення на нуль, якщо вікно занадто коротке
// (ви не можете зробити вікно нульовою ширини).
}
void on_timer(int value)
{
tekpaint(); // перемалюємо екран
glutTimerFunc(50, on_timer, 0); // через 33мс викличеться ця функція
}
int main(int argc, char* argv[])
{
strcpy(a,"50*c(v*3)+34*s(z/7)");
f(sdix, tfx);
strcpy(a, "100*s(v*10)");
f(sdiy, tfy);
strcpy(a, "100*c(v*10)");
f(sdiz, tfz);
start.x = 0.1;
start.y = 0.1;
start.z = 0.1;
glutInit(&argc, argv); // ініціалізація GLUT
glutInitWindowSize(600, 600); // установка розмірів вікна
glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE); // настройка OpenGL контексту
glutCreateWindow("Третій приклад"); // створення вікна
glutDisplayFunc(on_paint); tekpaint = on_paint; // вказуємо функцію, яка відповідає за перемалювання
glutReshapeFunc(on_size); // --//-- за зміну розмірів вікна
glutKeyboardFunc(on_keyboard); // --//-- за натискання наклавішу
glutMotionFunc(on_motion); // --//-- за переміщення миші з натиснутою кнопкою
glutMouseFunc(on_mouse); // --//-- за натискання на кнопку миші
glutTimerFunc(50, on_timer, 0); // кожні 33мс викликається ця функція
glutMainLoop(); // цикл обробки повідомлень
return(0);
}
break;
case 'm':
nk -= 30;
// on_paint();
break;
case 'r':
if (rejxmploskosti == 4)rejxmploskosti = 1;
else
rejxmploskosti++;
on_paint();
break;
case 'o':
if (flagproekcxi[3] == 4) { glutDisplayFunc(Tpaint); tekpaint = Tpaint; flagproekcxi[3] = 0; flagproekcxi[0] = 1; flagproekcxi[1] = 1; flagproekcxi[2] = 1; }
else
if (flagproekcxi[3] == 3) { flagproekcxi[3]++; flagproekcxi[0] = 1; flagproekcxi[1] = 1; flagproekcxi[2] = 0; }
else
if (flagproekcxi[3] == 2) { flagproekcxi[3]++; flagproekcxi[0] = 1; flagproekcxi[1] = 0; flagproekcxi[2] = 1; }
else
if (flagproekcxi[3] == 1) { flagproekcxi[3]++; flagproekcxi[0] = 0; flagproekcxi[1] = 1; flagproekcxi[2] = 1; }
else if (flagproekcxi[3] == 0) {
flagproekcxi[3]++; glutDisplayFunc(on_paint); tekpaint = on_paint;
}
on_paint();
break;
case 'p':
teka = 0;
system("cls");
cout << "vvedite x normali ploskosti";
vvod = 5;
break;
case 't':
if (meta) { meta = 0; metod = vdiy; }
else { meta = 1; metod = rkdiy; }
break;
case 'h':
system("cls");
cout << "Enter - naqat' vvod peremennxh" << endl
<< "n - uv'eliqit' wag" << endl
<< "m - um'en'wxt'" << endl
<< "p - vv'esti normal' ploskosti" << endl
<< "t - eyler || rungekut" << endl
<< "o - proekcxya" << endl
<< "r - p'er'ekl'uqit' r'ejxm otobrajeniya";
break;
case 'k':
system("cls");
cout <<
endl << "n=" << nk <<
endl << "x=" << xnk <<
endl << "y=" << ynk <<
endl << "z=" << znk;
break;
}
}
// 2 obrabotka hotk'eyev-------------------------------------------------------------------------------------------------------------
//|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// 1 vvod peremennxh-----------------------------------------------------------------------------------------------------------------
if (key == 13)
{
if (vvod == 0) { vvod = 1; strcpy(a, ""); cout << endl << "vvedite peremennuyu kotoruyu sobiryet'es' zadat' (x | y | z)"; teka = 0; }
else if (vvod == 1)
{
system("cls");
if (a[0] == 'x')vvod = 2;
else if (a[0] == 'y')vvod = 3;
else if (a[0] == 'z')vvod = 4;
else if (a[0] == 's')
{
if (a[1] == 'x')
vvod = 11;
else if (a[1] == 'y')
vvod = 12;
else if (a[1] == 'z')
vvod = 13;
else vvod = 0;
}
else vvod = 0;
if (vvod)cout << "vvedite " << a[0] << endl << a[0] << " = ";
teka = 0;
}
else if (vvod == 2) { cout << "f=" << f(sdix, tfx); vvod = 0; }
else if (vvod == 3) { cout << "f=" << f(sdiy, tfy); vvod = 0; }
else if (vvod == 4) { cout << "f=" << f(sdiz, tfz); vvod = 0; }
else if (vvod == 5) { cout << endl << "vvedite normal y"; normal.x = charvfloat(a, teka); teka = 0; vvod = 6; }
else if (vvod == 6) { cout << endl << "vvedite normal z"; normal.y = charvfloat(a, teka); teka = 0; vvod = 7; }
else if (vvod == 7) { cout << endl << "vvedite point x"; normal.z = charvfloat(a, teka); teka = 0; vvod = 8; }
else if (vvod == 8) { cout << endl << "vvedite point y"; point.x = charvfloat(a, teka); teka = 0; vvod = 9; }
else if (vvod == 9) { cout << endl << "vvedite point z"; point.y = charvfloat(a, teka); teka = 0; vvod = 10; }
else if (vvod == 10) { point.z = charvfloat(a, teka); oppl(normal, point); vvod = 0; }
else if (vvod == 11) { start.x = charvfloat(a, teka); vvod = 0; }
else if (vvod == 12) { start.y = charvfloat(a, teka); vvod = 0; }
else if (vvod == 13) { start.z = charvfloat(a, teka); vvod = 0; }
}
// 1 vvod peremennxh-----------------------------------------------------------------------------------------------------------------
//|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}
void on_motion(int x, int y)
{
switch (button) {
case 0:
angleX += x - mouseX;
angleY += y - mouseY;
mouseX = x;
mouseY = y;
break;
case 2:
distZ += (y - mouseY) / 10;
cout << distZ;
mouseY = y;
break;
}
}
void on_mouse(int _button, int state, int x, int y)
{
if (state == 1) { // 0 - натиснули на кнопку, 1 - відпустили кнопку
button = -1; // ніяка кнопка не натиснута
return;
}
switch (button = _button) {
case 0: mouseX = x; mouseY = y;// cout << "0------------------------------------------------";
break;
case 2: //angleX = 0; angleY = 0;
mouseY = y;// cout << "2------------------------------------------------";//distZ = -15
; break;
}
}
void on_size(int w, int h)
{
width = w;
height = h;
if (height == 0) height = 1; // Запобігання ділення на нуль, якщо вікно занадто коротке
// (ви не можете зробити вікно нульовою ширини).
}
void on_timer(int value)
{
tekpaint(); // перемалюємо екран
glutTimerFunc(50, on_timer, 0); // через 33мс викличеться ця функція
}
int main(int argc, char* argv[])
{
strcpy(a,"50*c(v*3)+34*s(z/7)");
f(sdix, tfx);
strcpy(a, "100*s(v*10)");
f(sdiy, tfy);
strcpy(a, "100*c(v*10)");
f(sdiz, tfz);
start.x = 0.1;
start.y = 0.1;
start.z = 0.1;
glutInit(&argc, argv); // ініціалізація GLUT
glutInitWindowSize(600, 600); // установка розмірів вікна
glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE); // настройка OpenGL контексту
glutCreateWindow("Третій приклад"); // створення вікна
glutDisplayFunc(on_paint); tekpaint = on_paint; // вказуємо функцію, яка відповідає за перемалювання
glutReshapeFunc(on_size); // --//-- за зміну розмірів вікна
glutKeyboardFunc(on_keyboard); // --//-- за натискання наклавішу
glutMotionFunc(on_motion); // --//-- за переміщення миші з натиснутою кнопкою
glutMouseFunc(on_mouse); // --//-- за натискання на кнопку миші
glutTimerFunc(50, on_timer, 0); // кожні 33мс викликається ця функція
glutMainLoop(); // цикл обробки повідомлень
return(0);
}