Главная страница

Курсовая Использование аттракторов. Использование аттракторов


Скачать 367.67 Kb.
НазваниеИспользование аттракторов
Дата15.05.2023
Размер367.67 Kb.
Формат файлаdocx
Имя файлаКурсовая Использование аттракторов.docx
ТипКурсовая
#1130346
страница4 из 4
1   2   3   4

//vbivaniye v stek funkcxi----------------------------------------------------------------------------------------------------------------------------------------

void stuk(int p, int ii)

{

if (k == 1) {

stek[k] = a[ii];

pstek[k] = p; k++;

}

else

{

k--;

while (pstek[k] >= p)

{

itog[j] = stek[k]; j++; k--;

}k++; stek[k] = a[ii]; pstek[k] = p; k++;

}

}

//vbivaniye v stek funkcxi----------------------------------------------------------------------------------------------------------------------------------------

//|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

//cvf----------------------------------------------------------------------------------------------------------------------------------------

float charvfloat(char* a, int l) {

char mch[] = "0123456789";

int toqki = l;

float e = 0;

cout << endl << "#a#=";

for (int i = 0; i < l; i++)

cout << a[i];

for (int i = 0; i < l; i++)

if (a[i] == '.')toqki = i;

for (int i = 0; i < toqki; i++)

for (int j = 0; j < 10; j++)

if (a[i] == mch[j])e += j * pow(10.0, toqki - 1 - i);

for (int i = toqki + 1; i < l; i++)

for (int j = 0; j < 10; j++)

if (a[i] == mch[j])e += j * pow(10.0, toqki - i);

cout << endl << "qislo=" << e << " !";

return e;
}

//cvf----------------------------------------------------------------------------------------------------------------------------------------

//|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

//vbivaniye funkcxi v formulu----------------------------------------------------------------------------------------------------------------------------------------

void zdiy(int uno, diya *sdiy, int &toqki) {

/* flag--;

if (pstek[flag] == 1) {

sdiy[toqki].w = &xk; flag--;

sdiy[toqki].q = bqisel[flag];

}

else {
*sdiy[toqki].w =

*bqisel[flag];

flag--;

*sdiy[toqki].q = *bqisel[flag];

}
bqisel[flag] = sdiy[toqki].r;

pstek[flag] = 1; flag++; toqki++;*/
sdiy[toqki].q = new float;

sdiy[toqki].w = new float;

sdiy[toqki].r = new float;

flag--;

if (uno == 0) {

if (pstek[flag] == 1) { sdiy[toqki].w = &xk; flag--; }

else if (pstek[flag] == 2) { sdiy[toqki].w = &yk; flag--; }

else if (pstek[flag] == 3) { sdiy[toqki].w = &zk; flag--; }

else if (pstek[flag] == 5) { sdiy[toqki].w = &tk; flag--; }

else if (pstek[flag] == 0) { sdiy[toqki].w = new float; *(sdiy[toqki].w) = bqisel[flag]; flag--; }

else if (pstek[flag] == 4) { sdiy[toqki].w = sdiy[(int)bqisel[flag]].r; flag--; }

}

else { sdiy[toqki].w = new float; *(sdiy[toqki].w) = 0; }
if (pstek[flag] == 1) { sdiy[toqki].q = &xk; }

else if (pstek[flag] == 2) { sdiy[toqki].q = &yk; }

else if (pstek[flag] == 3) { sdiy[toqki].q = &zk; }

else if (pstek[flag] == 5) { sdiy[toqki].q = &tk; }

else if (pstek[flag] == 0) { sdiy[toqki].q = new float; *sdiy[toqki].q = bqisel[flag]; }

else if (pstek[flag] == 4) { sdiy[toqki].q = sdiy[(int)bqisel[flag]].r; }

bqisel[flag] = toqki + 0.1;

pstek[flag] = 4; flag++; toqki++;

}

//vbivaniye funkcxi v formulu----------------------------------------------------------------------------------------------------------------------------------------

//|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

//sozdaniye fomulx---------------------------------------------------------------------------------------------------------------------------------------

int f(diya *sdiy, int &tf) {

j = 0;

k = 1;

pstek[0] = -1;

skobki = toqki = 0;

flag = 3;

strcpy(itog, "0+");

cout << a;

strcpy(a, strcat(itog, a));

strcpy(itog, "");
//------------------------------------------------------------------------------------------------------------------------------

for (int i = 0; i < strlen(a); i++)

{

if (a[i] == '0' || a[i] == '1' || a[i] == '2' || a[i] == '3' || a[i] == '4' ||

a[i] == '5' || a[i] == '6' || a[i] == '7' || a[i] == '8' || a[i] == '9')

{

if (flag == 2 || flag == 4)return i;

itog[j] = a[i]; j++; flag = 0;

}

else if (a[i] == '.')

{

toqki++;

if (flag != 0 || toqki > 1)return i;

itog[j] = a[i]; j++; flag = 1;

}

else if (a[i] == 'x' || a[i] == 'y' || a[i] == 'z' || a[i] == 'v')

{

if (flag != 3)return i;

itog[j] = a[i]; j++; flag = 2;

}

else if (a[i] == '(' || a[i] == 's' || a[i] == 'c' || a[i] == 't' || a[i] == 'l' || (a[i] == '-' && flag == 3))

{
if (flag != 3)

{

return i;

}

//itog[j] = a[i]; j++;

//-----------------------------------

if (a[i] == '(')

{

skobki--;

stek[k] = '(';

pstek[k] = 0; k++;

}

else

{

if (a[i] == '-') { itog[j] = '0'; j++; itog[j] = '!'; j++; }

stek[k] = a[i];

pstek[k] = 4; k++;

}

//-----------------------------------

flag = 3;

}

else if (a[i] == ')')

{

toqki = 0;

if (flag == 0) { itog[j] = '!'; j++; }

else

if (flag % 2 == 1)return i;
//itog[j] = a[i]; j++;

//-------------------------------------

k--;

while (stek[k] != '(')

{

itog[j] = stek[k]; j++; k--;

}

//-------------------------------------

flag = 4;

skobki++;

}

else if (a[i] == '+' || a[i] == '-' || a[i] == '*' || a[i] == '/' || a[i] == '^')

{

toqki = 0;

if (flag == 0) { itog[j] = '!'; j++; }

else

if (flag % 2 == 1)return i;

//itog[j] = a[i]; j++;

//-------------------------------------

if (a[i] == '+' || a[i] == '-') { stuk(1, i); }

else if (a[i] == '^') { stuk(3, i); }

else { stuk(2, i); }

//-------------------------------------

flag = 3;

}

}

//konec cxkla-------------------------------------------------------------------------------------------------------------------

{ if (flag == 0) { itog[j] = '!'; j++; }

if (skobki != 0)return 999;

k--;

while (k > 0)

{

itog[j] = stek[k];

j++; k--;

}

cout << "itog=";

for (int i = 0; i < j; i++)

cout << itog[i];

}

//konec vxvoda obratnoy formx--------------------------------------------------------------------------------------------------
//flag - tekuw'iy bqisel

//k - tekuw'ee naqalo v itog

//tf - tek fciya
k = 0;

flag = 0;

tf = 0;

for (int i = 0; i < j; i++)

{

/*cout << endl << "a[i]=" << a[i]

<< endl << "i=" << i

<< endl << "k=" << k;*/
if (itog[i] == '0' || itog[i] == '1' || itog[i] == '2' || itog[i] == '3' || itog[i] == '4' ||

itog[i] == '5' || itog[i] == '6' || itog[i] == '7' || itog[i] == '8' || itog[i] == '9' || itog[i] == '.')

{

a[i - k] = itog[i];

}

else if (itog[i] == '!')

{
bqisel[flag] = charvfloat(a, i - k);
pstek[flag] = 0;

k = i + 1; flag++;

}

else if (itog[i] == 'x') { pstek[flag] = 1; flag++; k = i + 1; }

else if (itog[i] == 'y') { pstek[flag] = 2; flag++; k = i + 1; }

else if (itog[i] == 'z') { pstek[flag] = 3; flag++; k = i + 1; }

else if (itog[i] == 'v') { pstek[flag] = 5; flag++; k = i + 1; }

else if (itog[i] == '-')

{

zdiy(0, sdiy, tf);

sdiy[tf - 1].f = Minus;

k = i + 1;

}

else if (itog[i] == '+')

{

zdiy(0, sdiy, tf);

sdiy[tf - 1].f = Plus;

k = i + 1;

}

else if (itog[i] == '*')

{

zdiy(0, sdiy, tf);

sdiy[tf - 1].f = Umnojxt;

k = i + 1;

}

else if (itog[i] == '/')

{

zdiy(0, sdiy, tf);

sdiy[tf - 1].f = Delit;

k = i + 1;

}

else if (itog[i] == '^')

{

zdiy(0, sdiy, tf);

sdiy[tf - 1].f = Stepen;

k = i + 1;

}

else if (itog[i] == 's')

{

zdiy(1, sdiy, tf);

sdiy[tf - 1].f = SIN;

k = i + 1;

}

else if (itog[i] == 'c')

{

zdiy(1, sdiy, tf);

sdiy[tf - 1].f = COS;

k = i + 1;

}

else if (itog[i] == 't')

{

zdiy(1, sdiy, tf);

sdiy[tf - 1].f = TAN;

k = i + 1;

}

else if (itog[i] == 'l')

{

zdiy(1, sdiy, tf);

sdiy[tf - 1].f = LOG;

k = i + 1;

}
}
vdiy(sdiy, tf);

return (-1);

}

//sozdaniye fomulx----------------------------------------------------------------------------------------------------------------------------------------

//|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

//opisaniye ploskosti-------------------------------------------------------------------------------------------------------------

float ortonorm(Vctr3 e1, Vctr3 n2) { return((e1.x*n2.x + e1.y*n2.y + e1.z*n2.z) / skalarnoye(e1, e1)); }

void oppl(Vctr3 n, Vctr3 p)

{

nmp = raznicaVctr3(normal, point);

Vctr3 n2, n3;

n = raznicaVctr3(n, p);

n3.x = n2.x = n.x;

n3.y = n2.y = n.y;

n3.z = n2.z = n.z;

if (n.x != 0) { n2.y += 1; n3.z += 1; }

else if (n.y != 0) { n2.x += 1; n3.z += 1; }

else if (n.z != 0) { n2.y += 1; n3.x += 1; }

else flagploskosti = 0;

n2 = raznicaVctr3(n2, proizvVctr3(n, ortonorm(n, n2)));
cout << endl << "n " << n.x << " " << n.y << " " << n.z << " ";

cout << endl << "n2 " << n2.x << " " << n2.y << " " << n2.z << " ";

n3 = raznicaVctr3(n3, proizvVctr3(n, ortonorm(n, n3)));

n3 = raznicaVctr3(n3, proizvVctr3(n2, ortonorm(n2, n3)));
n3 = proizvVctr3(n3, 100);

n2 = proizvVctr3(n2, 100);

uglx[0] = sumaVctr3(n3, n2);

n3 = proizvVctr3(n3, -1);

uglx[1] = sumaVctr3(n3, n2);

n2 = proizvVctr3(n2, -1);

uglx[2] = sumaVctr3(n3, n2);

n3 = proizvVctr3(n3, -1);

uglx[3] = sumaVctr3(n3, n2);

cout << endl << "n3 " << n3.x << " " << n3.y << " " << n3.z << " ";

flagploskosti = 1;

}

//opisaniye ploskosti-------------------------------------------------------------------------------------------------------------
//|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
void on_keyboard(unsigned char key, int x, int y) //обробка події від клавіатури

{

//|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// 1 vvod peremennxh-----------------------------------------------------------------------------------------------------------------

//vvod 0 nichego ne vvoditsya

//vvod 1 vxbor peremennoy

//vvod 2 vvod x

//vvod 3 vvod y

//vvod 4 vvod z

//vvod 5 ploskost' vvodits'a normal' x

//vvod 6 ploskost' vvodits'a normal' y

//vvod 7 ploskost' vvodits'a normal' z

//vvod 8 ploskost' vvodits'a toqki x

//vvod 9 ploskost' vvodits'a toqki x

//vvod 10 ploskost' vvodits'a toqki x

//vvod 11 start x

//vvod 12 start y

//vvod 13 start z
if (vvod && key != 13)

{

system("cls");

//cout << "r\t\t\ \r";

//strcat(a, (char*)&key);

if (key == 8)

{

teka--;

a[teka] = '\0';

}

else

{

a[teka] = key;

teka++;

a[teka] = '\0';

}

cout << "a=" << a;

}

// 1 vvod peremennxh-----------------------------------------------------------------------------------------------------------------

//|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

// 2 obrabotka hotk'eyev-------------------------------------------------------------------------------------------------------------

else

{

switch (key)

{

//case 27: exit(0); break; // escape - вихід

case 'n':

nk += 30;

// 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);

}

1   2   3   4


написать администратору сайта