Файл: Использование аттракторов.docx

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 03.12.2023

Просмотров: 66

Скачиваний: 4

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
от нуля, тем колебания осциллятора менее похожи на гармонические.

Вынужденные колебания

Вынужденные колебания осциллятора Ван дер Поля как с потерями энергии, так и без оных рассчитываются по формуле

t), где

А — амплитуда внешнего гармонического сигнала,

— его угловая частота.



Аттрактор Уэды


Один из первых примеров хаоса в электрических цепях был открыт Уэдой в цепи с нелинейным индуктивным элементом. Цепь с нелинейной индуктивностью и линейным сопротивлением, возбуждаемая гармонической электродвижущей силой, описывается уравнением

)

которое является частным случаем уравнения Дуффинга. С помощью аналогового и численного моделирования Уэда, сотрудник университета Киото в Японии, получил интересную визуализацию отображений Пуанкаре, описывающую хаотическую динамику этого уравнения. Уравнения этой модели, записанные в виде системы уравнений первого порядка, имеют вид




Алгоритм и программа


Для разработки программы был выбран язык программирования C++ и среда программирования Microsoft Visual Studio 2017.

Код программы:
#define _CRT_SECURE_NO_WARNINGS

#include

#include

#include

#include

#include
using namespace std;

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

//otrisovka-------------------------------------------------------------------------------------------------

static float angle = 0; // кут повороту фігур

int width = 1, height = 1;

int button = -1; // кнопка миші (-1 - не натиснутa, 0 - ліва, 2 - права)

float angleX, angleY; // поточний кут повороту сцени

float zm;

float mouseX, mouseY; // поточні координати

float distZ = 0; // відстань по осі Z до сцени

//otrisovka---------------------------------------------------------------------------------------------------------------

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

//kkk------------------------------------------------------------------------------------------------------------------

float hk = 0.05, xnk, ynk, znk, qk = 10, rk = 28, xk, yk, zk, tk, bk = 8 / 3;

int nk = 10000;

//kkk-----------------------------------------------------------------------------------------------------------------

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

//dl'a formulx----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

struct diya {

float * q;

float * w;

float * r;

float(*f)(float q, float w);

};

diya sdiy[50], sdix[50], sdiz[50]; //struktura funkcxy

int tfx = 0, tfy = 0, tfz = 0; //koliqestvo funkcxy

float bqisel[20]; //bufer qisel

//dl'a formulx-----------------------------------------------------------------------------------------------------

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

//dl'a vvoda--------------------------------------------------------------------------------------------------------------------------------

float* uvum; //kkk bufer dl'a constant

int vvod = 0; //status vvoda

float bust = 0; //kkk bust uveliq'eniya constant

char *a = new char[200]; //bufer dl'a vvoda

char *ba = new char[10];

int teka = 0; //polojeniye karetki a

//dl'a vvoda----------------------------------------------------------------------------------------------------------------------------

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

//dl'a obratnogo vvoda--------------------------------------------------

char *itog = new char[200]; //dl'a oratnoy formulx

char *stek = new char[50]; //stek funkcxy

int pstek[50]; //prioritet funkcxy steka

int flag; //0-cifra 1-toqka 2-x 3-operator i ( 4-)

int skobki, toqki; //kolvo skobok i tiqek

int j, k; //j t'ekuw'iy el'em'ent itog;stek

//dl'a obratnogo vvoda--------------------------------------------------

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

//dl'a ploskosti--------------------------------------------------

void(*tekpaint)();

int flagploskosti = 0;// 1 - risuet; 0 - net ; 2 - proekcxxya x ; 3 - y ; 4 - z

int rejxmploskosti = 1;// 1 - norma; 2 - proekcxxya x ; 3 - y ; 4 - z

int flagproekcxi[4] = { 1,1,1,1 };
struct Vctr3

{

float x; float y; float z;

};

float skalarnoye(Vctr3 a, Vctr3 b) { return (a.x*b.x + a.y*b.y + a.z*b.z); }

Vctr3 raznicaVctr3(Vctr3 a, Vctr3 b) { a.x -= b.x; a.y -= b.y; a.z -= b.z; return (a); }

Vctr3 sumaVctr3(Vctr3 a, Vctr3 b) { a.x += b.x; a.y += b.y; a.z += b.z; return (a); }

Vctr3 proizvVctr3(Vctr3 a, float b) { a.x *= b; a.y *= b; a.z *= b; return (a); }

Vctr3 normal, point, nmp,start;

Vctr3 uglx[4];
int znakploskosti = 1;

//dl'a ploskosti--------------------------------------------------

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

float Plus(float q, float w) { return q + w; }

float Minus(float q, float w) { return q - w; }

float Umnojxt(float q, float w) { return q * w; }

float Delit(float q, float w) { return q / w; }

float Stepen(float q, float w) { return powf(q, w); }

float COS(float q, float w) { return cos(q); }

float SIN(float q, float w) { return sin(q); }

float TAN(float q, float w) { return tan(q); }

float EXP(float q, float w) { return exp(q); }

float LOG(float q, float w) { return log(q); }

float OTR(float q, float w) { return -q; }

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

//vxvod r'eweniya formulx--------------------------------------------------------------------------------------------------------

//eylera----------------------------------------------------------------------

float vdiy(diya *sdiy, int &toqki)

{

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

*sdiy[i].r = sdiy[i].f(*sdiy[i].q, *sdiy[i].w);

if (toqki) {

// cout << endl << "!!!!! =" << *sdiy[toqki - 1].r;

return *sdiy[toqki - 1].r;

}

else {

// cout << endl << "!!!!! =" << 1;

return 0;

}

}

//rungekuta------------------------------------------------------------------------

int meta = 0;

float rkdiy(diya *sdiy, int &toqki)

{

float k1, k2, k3, k4;

k1 = hk * vdiy(sdiy, toqki); xk += k1 / 2; yk += k1 / 2; zk += k1 / 2;

k2 = hk * vdiy(sdiy, toqki); xk -= k1 / 2 - k2 / 2; yk -= k1 / 2 - k2 / 2; zk -= k1 / 2 - k2 / 2;

k3 = hk * vdiy(sdiy, toqki); xk -= k2 / 2 - k3; yk -= k2 / 2 - k3; zk -= k2 / 2 - k3;

k4 = hk * vdiy(sdiy, toqki); xk -= k3; yk -= k3; zk -= k3;

return hk * (k1 + 2 * k2 + 2 * k3 + k4) / 6;

}
float(*metod)(diya *sdiy, int &toqki) = vdiy;
//vxvod r'eweniya formulx--------------------------------------------------------------------------------------------------------

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

//otrisovka po t---------------------------------------------------------------------------------------------------------------------

void Tpaint() {

glClearColor(1, 1, 1, 0);

glViewport(0, 0, width, height); // Установити область перегляду таку, щоб вона вміщувала все вікно

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glMatrixMode(GL_MODELVIEW);// включаємо режим роботи з видовою матрицею

glLoadIdentity();

glTranslatef(0, 0, distZ);

glRotatef(0, 0, 0, 1);

glLineWidth(2);

glBegin(GL_LINES);
glColor3f(0, 0, 1);

glVertex2f(-distZ, 2.0 / 6 * distZ);

glVertex2f(distZ, 2.0 / 6 * distZ);

glColor3f(1, 0, 0);

glVertex2f(-distZ, -2.0 / 6 * distZ);

glVertex2f(distZ, -2.0 / 6 * distZ);

glColor3f(0, 1, 0);

glVertex2f(-distZ, 0);

glVertex2f(distZ, 0);

glColor3f(0, 0, 0);

glVertex2f(0, -distZ);

glVertex2f(0, distZ);

glEnd();

float *masx = new float[nk];

float *masy = new float[nk];

float *masz = new float[nk];

xk = start.x;// n

yk = start.y;// e

zk = start.z;// m

tk = 0.1;

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

{

tk += 0.1;

//xnk = vdiy(sdix, tfx);// xk + hk*(qk*(yk - xk));

//ynk = vdiy(sdiy, tfy);//yk + hk*(rk*xk - yk - zk*xk);

//znk = vdiy(sdiz, tfz);//zk + hk*(-bk*zk + xk*yk);

xnk = metod(sdix, tfx) + xk * meta;

ynk = metod(sdiy, tfy) + yk * meta;

znk = metod(sdiz, tfz) + zk * meta;

xk = xnk;

yk = ynk;

zk = znk;

masx[i] = xnk;

masy[i] = ynk;

masz[i] = znk;

}

glBegin(GL_LINE_STRIP);

tk = 0;

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

{

tk += 0.01;

if (masx[i] - 2.0 / 6 * distZ < -1.0 / 6 * distZ)masx[i] = 1.0 / 6 * distZ;

glVertex2f(tk, masx[i] - 2.0 / 6 * distZ);

}

glEnd();

glBegin(GL_LINE_STRIP);

tk = 0;

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

{

tk += 0.01;

if (masy[i] > -1.0 / 6 * distZ)masy[i] = -1.0 / 6 * distZ;

if (masy[i] < 1.0 / 6 * distZ)masy[i] = 1.0 / 6 * distZ;

glVertex2f(tk, masy[i]);

}

glEnd();

glBegin(GL_LINE_STRIP);

tk = 0;

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

{

tk += 0.01;

if (masz[i] + 2.0 / 6 * distZ > 1.0 / 6 * distZ)masz[i] = -1.0 / 6 * distZ;

glVertex2f(tk, masz[i] + 2.0 / 6 * distZ);

}

glEnd();

glFlush();

glutSwapBuffers();

delete[nk] masx;

delete[nk] masy;

delete[nk] masz;

}

//otrisovka po t---------------------------------------------------------------------------------------------------------------------

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

//otrisovka---------------------------------------------------------------------------------------------------------------------

void on_paint()

{

// 1 ustanovka naqal'nxh param'etrov-----------------------------------------------------------------------------------------------------------------------------------

angle = 0.0f; // збільшення кута повороту
glViewport(0, 0, width, height); // Установити область перегляду таку, щоб вона вміщувала все вікно

glClearColor(1, 1, 1, 0);

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);// очистка буферів OpenGL// задано функцией f(d) = 1.0 / (0.4 * d * d + 0.2 * d)

glMatrixMode(GL_PROJECTION);// включаємо режим роботи з матрицею проекцій

glLoadIdentity();

gluPerspective(60, (GLfloat)width / height, 1, 1000);

glMatrixMode(GL_MODELVIEW);// включаємо режим роботи з видовою матрицею

glLoadIdentity();

glTranslatef(0, 0, distZ); // камера з початку координат зсувається на distZ,

if (rejxmploskosti == 1) {

glRotatef(angleX, 0.0f, 1.0f, 0.0f); // потім повертається по осі Oy

glRotatef(angleY, 1.0f, 0.0f, 0.0f); // потім повертається по осі Ox

}

else if (rejxmploskosti == 2)glRotatef(90, 0.0f, 1.0f, 0.0f);

else if (rejxmploskosti == 3)glRotatef(90, 1.0f, 0.0f, 0.0f);

glEnable(GL_DEPTH_TEST);

glEnable(GL_BLEND);

glEnable(GL_ALPHA_TEST);

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

//glPushMatrix();

// 1 ustanovka naqal'nxh param'etrov-----------------------------------------------------------------------------------------------------------------------------------
// 2 osi-----------------------------------------------------------------------------------------------------------------------------------

glColor4f(1, 0, 0, 1);

glLineWidth(2);

glBegin(GL_LINES);

glVertex3f(-1000, 0, 0);

glVertex3f(1000, 0, 0);

glColor4f(0, 1, 0, 1);

glVertex3f(0, -1000, 0);

glVertex3f(0, 1000, 0);

glColor4f(0, 0, 1, 1);

glVertex3f(0, 0, -1000);

glVertex3f(0, 0, 1000);

glEnd();

// 2 osi-----------------------------------------------------------------------------------------------------------------------------------


// 3 grafik-----------------------------------------------------------------------------------------------------------------------------------

xk = start.x;// n

yk = start.y;// e

zk = start.z;// m

tk = 0.1;

//glPointSize(2.5);

glColor4f(1, 0, 0, 1);

glBegin(GL_LINE_STRIP);

for (int i = 0; i < nk - 30; i++)

{

tk += 0.01;

xnk = metod(sdix, tfx) + xk * meta;

ynk = metod(sdiy, tfy) + yk * meta;

znk = metod(sdiz, tfz) + zk * meta;

// xnk=vdiy(sdix, tfx);// xk + hk*(qk*(yk - xk));
// ynk=vdiy(sdiy, tfy);//yk + hk*(rk*xk - yk - zk*xk);
// znk=vdiy(sdiz, tfz);//zk + hk*(-bk*zk + xk*yk);

if (flagploskosti == 1)

if (((xnk - point.x)*nmp.x + (ynk - point.y)*nmp.y + (znk - point.z)*nmp.z)*znakploskosti <= 0 && flagproekcxi[3] == 1)

{

float x = (nmp.y*(xk*(ynk - yk) / (xnk - xk) - yk + point.y) + nmp.z*(xk*(znk - zk) / (xnk - xk) - zk + point.z) + nmp.x*point.x) /

(nmp.x + nmp.y*(ynk - yk) / (xnk - xk) + nmp.z*(znk - zk) / (xnk - xk));

znakploskosti *= -1;

glVertex3f(x*flagproekcxi[0], ((x - xk)*(ynk - yk) / (xnk - xk) + yk)*flagproekcxi[1], ((x - xk)*(znk - zk) / (xnk - xk) + zk)*flagproekcxi[0]);

glEnd();

glPointSize(7);

glColor4f(0, 1, 1, 1);

glBegin(GL_POINTS);

glVertex3f(x*flagproekcxi[0], ((x - xk)*(ynk - yk) / (xnk - xk) + yk)*flagproekcxi[1], ((x - xk)*(znk - zk) / (xnk - xk) + zk)*flagproekcxi[0]);

glEnd();

// glPointSize(2.5);

glColor4f(1, 0, 0, 1);

glBegin(GL_LINE_STRIP);

glVertex3f(x*flagproekcxi[0], ((x - xk)*(ynk - yk) / (xnk - xk) + yk)*flagproekcxi[1], ((x - xk)*(znk - zk) / (xnk - xk) + zk)*flagproekcxi[0]);

}

xk = xnk;

yk = ynk;

zk = znk;

glVertex3f(xnk*flagproekcxi[0], ynk*flagproekcxi[1], znk*flagproekcxi[2]);

}

glEnd();
/* glPointSize(10);

glColor3d(0, 1, 0);

glBegin(GL_POINTS);

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

{

tk++;

xnk = vdiy(sdix, tfx);// xk + hk*(qk*(yk - xk));

ynk = vdiy(sdiy, tfy);// yk + hk*(rk*xk - yk - zk*xk);

znk = vdiy(sdiz, tfz);// zk + hk*(-bk*zk + xk*yk);

xk = xnk;

yk = ynk;

zk = znk;

glVertex3f(xnk, ynk, znk);

}

glEnd();*/

// 3 grafik-----------------------------------------------------------------------------------------------------------------------------------

// 4 ploskost'-------------------------------------------------------------------------------------

if (flagploskosti)

{

glLineWidth(5);

glColor4f(0, 0, 0, 0.3);
glBegin(GL_POLYGON);

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

{

//cout<

glVertex3f(point.x + uglx[i].x, point.y + uglx[i].y, point.z + uglx[i].z);

}

glEnd();

}

// 4 ploskost'-------------------------------------------------------------------------------------

// 4 finiw-----------------------------------------------------------------------------------------------------------------------------------

glDisable(GL_DEPTH_TEST);

glDisable(GL_ALPHA_TEST);

glDisable(GL_BLEND);

// glPopMatrix();

glFlush();

glutSwapBuffers(); // перемикання буферів

// 4 finiw-----------------------------------------------------------------------------------------------------------------------------------

}

//otrisovka---------------------------------------------------------------------------------------------------------------------

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