Материал: Определение количества витков резьбового соединения с трапецеидальной резьбой, воспринимающего осевую сжимающую нагрузку

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

p = new Uzl_Coord();

p = vozvr_uzl(x1, x2, x3, y1, y2, y3);

p.c = c3;

list_coord.Add(p);// uzpor.Insert(jer, p);

flag = 0;

k = Rezba.count_v * 2;

dx = dx4;

int fl = 0;

while (flag < k-1)

{

if (fl == 0)

{

x2 = x1+dx3; y2 = y1 + dy;

x3 = x2 + dx4; y3 = y2;

p = new Uzl_Coord();

p = vozvr_uzl(x1, x2, x3, y1, y2, y3);

p.c = c1;

list_coord.Add(p);// uzpor.Insert(jer, p);

x2 = x1 + dx4+dx3; y2 = y1 + dy;

x3 = x1+dx5; y3 = y1;

p = new Uzl_Coord();

p = vozvr_uzl(x1, x2, x3, y1, y2, y3);

p.c = c1;

list_coord.Add(p); //uzpor.Insert(jer, p);

flag++;

x1 = x1 + dx5;

fl = 1;

c_in2++;

}

else

{

x2 = x1-dx3; y2 = y1 + dy;

x3 = x2 + dx5; y3 = y2;

p = new Uzl_Coord();

p = vozvr_uzl(x1, x2, x3, y1, y2, y3);

p.c = c3;

list_coord.Add(p); //uzpor.Insert(jer, p);

x2 = x1 + dx4+dx3; y2 = y1 + dy;

x3 = x1+dx4; y3 = y1;

p = new Uzl_Coord();

p = vozvr_uzl(x1, x2, x3, y1, y2, y3);

p.c = c3;

list_coord.Add(p); //uzpor.Insert(jer, p);

flag++;

x1 = x1 + dx4;

fl = 0;

}

}

x2 = x1 - dx3; y2 = y1 + dy;

x3 = x2 + dx4+dx3; y3 = y2;

p = new Uzl_Coord();

p = vozvr_uzl(x1, x2, x3, y1, y2, y3);

p.c = c3;

list_coord.Add(p); //uzpor.Insert(jer, p);

x2 = x1 + dx4; y2 = y1 + dy;

x3 = x2; y3 = y1;

p = new Uzl_Coord();

p = vozvr_uzl(x1, x2, x3, y1, y2, y3);

p.c = c3;

list_coord.Add(p);// uzpor.Insert(jer, p);

line++;

c_in2++;

}

uzk.Add(c_in2);

#endregion

#region Нумерация узлов для второго ряда элементов

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

{

if (i < 11)

{

gi1 = new globindexes();

gi2 = new globindexes();

gi1.ind = new int[3];

gi2.ind = new int[3];

gi1.ind[0] = ind;

gi2.ind[1] = ind + c_in1 + 1;

gi1.ind[1] = ind + c_in1;

gi2.ind[2] = ind + 1;

gi1.ind[2] = ind + c_in1 + 1;

gi2.ind[0] = ind;

listGI.Add(gi1);

listGI.Add(gi2);

ind++;

}

else

{

if (i == 11)

{

gi1 = new globindexes();

gi1.ind = new int[3];

gi1.ind[0] = ind;

gi1.ind[1] = ind + c_in1;

gi1.ind[2] = ind + c_in1 + 1;

listGI.Add(gi1);

}

else

{

gi1 = new globindexes();

gi2 = new globindexes();

gi1.ind = new int[3];

gi2.ind = new int[3];

gi1.ind[0] = ind;

gi2.ind[1] = ind + c_in1 + 1+1;

gi1.ind[1] = ind + c_in1+1;

gi2.ind[2] = ind + 1;

gi1.ind[2] = ind + c_in1 +1+ 1;

gi2.ind[0] = ind;

listGI.Add(gi1);

listGI.Add(gi2);

ind++;

}

}

}

ind++;

#endregion

#region 3

int c_in3 = 0;

if (line == 2)

{

Color c1 = Color.Gray;

Color c2 = Color.Black;

Color c3 = Color.Red;

y1 = dy1+dy2;

x1 = 0;

dx = dx1;

dy = dy3;

x2 = x1; y2 = y1 + dy;

x3 = x1 + dx; y3 = y2;

Uzl_Coord p = new Uzl_Coord();

p = vozvr_uzl(x1, x2, x3, y1, y2, y3);

p.c = c1;

list_coord.Add(p);// uzpor.Insert(jer, p);

x2 = x1 + dx; y2 = y1 + dy;

x3 = x2; y3 = y1;

p = new Uzl_Coord();

p = vozvr_uzl(x1, x2, x3, y1, y2, y3);

p.c = c1;

list_coord.Add(p);// uzpor.Insert(jer, p);

x1 = x1 + dx;

c_in3++;

c_in3++;

dx = dx2;

flag = 0;

while (flag < 10)

{

x2 = x1; y2 = y1 + dy;

x3 = x1 + dx; y3 = y2;

p = new Uzl_Coord();

p = vozvr_uzl(x1, x2, x3, y1, y2, y3);

p.c = c2;

list_coord.Add(p); //uzpor.Insert(jer, p);

x2 = x1 + dx; y2 = y1 + dy;

x3 = x2; y3 = y1;

p = new Uzl_Coord();

p = vozvr_uzl(x1, x2, x3, y1, y2, y3);

p.c = c2;

list_coord.Add(p); //uzpor.Insert(jer, p);

flag++;

x1 = x1 + dx;

c_in3++;

}

dx = dx3;

x2 = x1; y2 = y1 + dy;

x3 = x1 + dx; y3 = y2;

p = new Uzl_Coord();

p = vozvr_uzl(x1, x2, x3, y1, y2, y3);

p.c = c3;

list_coord.Add(p); //uzpor.Insert(jer, p);

x2 = x1 + dx; y2 = y1 + dy;

x3 = x2; y3 = y1;

p = new Uzl_Coord();

p = vozvr_uzl(x1, x2, x3, y1, y2, y3);

p.c = c3;

list_coord.Add(p); //uzpor.Insert(jer, p);

c_in3++;

x1 = x1 + dx;

int fl = 0;

flag = 0;

while (flag < k - 1)

{

if (fl == 0)

{

dx = dx4;

x2 = x1; y2 = y1 + dy;

x3 = x1 + dx; y3 = y2;

p = new Uzl_Coord();

p = vozvr_uzl(x1, x2, x3, y1, y2, y3);

p.c = c3;

list_coord.Add(p); //uzpor.Insert(jer, p);

x2 = x1 + dx; y2 = y1 + dy;

x3 = x2; y3 = y1;

p = new Uzl_Coord();

p = vozvr_uzl(x1, x2, x3, y1, y2, y3);

p.c = c3;

list_coord.Add(p); //uzpor.Insert(jer, p);

flag++;

x1 = x1 + dx;

fl = 1;

c_in3++;

}

else

{

dx = dx5;

x2 = x1; y2 = y1 + dy;

x3 = x1 + dx; y3 = y2;

p = new Uzl_Coord();

p = vozvr_uzl(x1, x2, x3, y1, y2, y3);

p.c = c3;

list_coord.Add(p); //uzpor.Insert(jer, p);

x2 = x1 + dx; y2 = y1 + dy;

x3 = x2; y3 = y1;

p = new Uzl_Coord();

p = vozvr_uzl(x1, x2, x3, y1, y2, y3);

p.c = c3;

list_coord.Add(p); //uzpor.Insert(jer, p);

flag++;

c_in3++;

x1 = x1 + dx;

fl = 0;

}

}

x2 = x1; y2 = y1 + dy;

x3 = x2 + dx4 + dx3; y3 = y2;

p = new Uzl_Coord();

p = vozvr_uzl(x1, x2, x3, y1, y2, y3);

p.c = c3;

list_coord.Add(p); //uzpor.Insert(jer, p);

x2 = x1 + dx4+dx3; y2 = y1 + dy;

x3 = x2; y3 = y1;

p = new Uzl_Coord();

p = vozvr_uzl(x1, x2, x3, y1, y2, y3);

p.c = c3;

list_coord.Add(p); //uzpor.Insert(jer, p);

line++;

c_in3++;

}

uzk.Add(c_in3);

#endregion

#region Нумерация узлов для третьего ряда элементов

for (int i = 0; i < c_in3 - 1; i++)

{

gi1 = new globindexes();

gi2 = new globindexes();

gi1.ind = new int[3];

gi2.ind = new int[3];

gi1.ind[0] = ind;

gi2.ind[1] = ind + c_in3 + 1;

gi1.ind[1] = ind + c_in3;

gi2.ind[2] = ind + 1;

gi1.ind[2] = ind + c_in3 + 1;

gi2.ind[0] = ind;

listGI.Add(gi1);

listGI.Add(gi2);

ind++;

}

ind++;

#endregion

#region 4

if (line == 3)

{

// int jer = uzpor.Count - 1;

Color c2 = Color.Black;

Color c3 = Color.Red;

y1 = dy1 + dy2+dy3;

while(y1<Rezba.d3/2+Rezba.bg)

{

x1 = 0;

dx = dx1;

dy = dy4;

x2 = x1; y2 = y1 + dy;

x3 = x1 + dx; y3 = y2;

Uzl_Coord p = new Uzl_Coord();

p = vozvr_uzl(x1, x2, x3, y1, y2, y3);

p.c = c2;

list_coord.Add(p); //uzpor.Insert(jer, p);

x2 = x1 + dx; y2 = y1 + dy;

x3 = x2; y3 = y1;

p = new Uzl_Coord();

p = vozvr_uzl(x1, x2, x3, y1, y2, y3);

p.c = c2;

list_coord.Add(p); //uzpor.Insert(jer, p);

x1 = x1 + dx;

dx = dx2;

flag = 0;

while (flag < 10)

{

x2 = x1; y2 = y1 + dy;

x3 = x1 + dx; y3 = y2;

p = new Uzl_Coord();

p = vozvr_uzl(x1, x2, x3, y1, y2, y3);

p.c = c2;

list_coord.Add(p); //uzpor.Insert(jer, p);

x2 = x1 + dx; y2 = y1 + dy;

x3 = x2; y3 = y1;

p = new Uzl_Coord();= vozvr_uzl(x1, x2, x3, y1, y2, y3);

p.c = c2;

list_coord.Add(p); //uzpor.Insert(jer, p);

flag++;

x1 = x1 + dx;

}

dx = dx3;

x2 = x1; y2 = y1 + dy;

x3 = x1 + dx; y3 = y2;

p = new Uzl_Coord();

p = vozvr_uzl(x1, x2, x3, y1, y2, y3);

p.c = c3;

list_coord.Add(p); //uzpor.Insert(jer, p);

x2 = x1 + dx; y2 = y1 + dy;

x3 = x2; y3 = y1;

p = new Uzl_Coord();

p = vozvr_uzl(x1, x2, x3, y1, y2, y3);

p.c = c3;

list_coord.Add(p); //uzpor.Insert(jer, p);

x1 = x1 + dx;

int fl = 0;

flag = 0;

while (flag < k - 1)

{

if (fl == 0)

{

dx = dx4;

x2 = x1; y2 = y1 + dy;

x3 = x1 + dx; y3 = y2;

p = new Uzl_Coord();

p = vozvr_uzl(x1, x2, x3, y1, y2, y3);

p.c = c3;

list_coord.Add(p); //uzpor.Insert(jer, p);

x2 = x1 + dx; y2 = y1 + dy;

x3 = x2; y3 = y1;

p = new Uzl_Coord();= vozvr_uzl(x1, x2, x3, y1, y2, y3);

p.c = c3;

list_coord.Add(p); //uzpor.Insert(jer, p);

flag++;

x1 = x1 + dx;

fl = 1;

}

else

{

dx = dx5;

x2 = x1; y2 = y1 + dy;

x3 = x1 + dx; y3 = y2;

p = new Uzl_Coord();

p = vozvr_uzl(x1, x2, x3, y1, y2, y3);

p.c = c3;

list_coord.Add(p);// uzpor.Insert(jer, p);

x2 = x1 + dx; y2 = y1 + dy;

x3 = x2; y3 = y1;

p = new Uzl_Coord();= vozvr_uzl(x1, x2, x3, y1, y2, y3);

p.c = c3;

list_coord.Add(p);// uzpor.Insert(jer, p);

flag++;= x1 + dx;

fl = 0;

}

}

x2 = x1; y2 = y1 + dy;

x3 = x2 + dx4 + dx3; y3 = y2;

p = new Uzl_Coord();

p = vozvr_uzl(x1, x2, x3, y1, y2, y3);

p.c = c3;

list_coord.Add(p);// uzpor.Insert(jer, p);

x2 = x1 + dx4 + dx3; y2 = y1 + dy;

x3 = x2; y3 = y1;

p = new Uzl_Coord();

p = vozvr_uzl(x1, x2, x3, y1, y2, y3);

p.c = c3;

list_coord.Add(p);// uzpor.Insert(jer, p);

line++;

y1 = y1 + dy;

uzk.Add(c_in3);

#region Нумерация узлов для четвертого ряда элементов

for (int i = 0; i < c_in3 - 1; i++)

{

gi1 = new globindexes();

gi2 = new globindexes();

gi1.ind = new int[3];

gi2.ind = new int[3];

gi1.ind[0] = ind;

gi2.ind[1] = ind + c_in3 + 1;

gi1.ind[1] = ind + c_in3;

gi2.ind[2] = ind + 1;

gi1.ind[2] = ind + c_in3 + 1;

gi2.ind[0] = ind;

listGI.Add(gi1);

listGI.Add(gi2);

ind++;

}

ind++;

#endregion

}

}

uzk.Add(c_in3);

#endregion

#endregion

#region Нахождение числа узлов

int alluzk=0;

int keykey = 0;

int len=uzk.Count;

for (int i = 1;i<len ; i++)

{

uzk.Insert(0,uzk[i+keykey]);

keykey++;

}

for (int i = 0; i < uzk.Count; i++)

{ alluzk += uzk[i]; }

#endregion

#region Получение результирующей фигуры из фигуры вращения

List<Uzl_Coord> list_new = new List<Uzl_Coord>();

List<int> uz_in_row = new List<int>();

double y;

//int ind;

int kk=0;

int ind_for_list=0;

list_coord_rez = new List<Uzl_Coord>();

while(kk < list_coord.Count)

{

ind_for_list = 0;

y = list_coord[kk].y1;

ind = list_new.Count;

while (kk < list_coord.Count && y.Equals(list_coord[kk].y1))

{

list_new.Insert(ind, list_coord[kk]);

kk++;

}

}

for (int i = 0; i < list_coord.Count; i++)

{

Uzl_Coord elm = new Uzl_Coord();

elm.x1 = list_new[i].x1;

elm.x2 = list_new[i].x3;

elm.x3 = list_new[i].x2;

elm.y1 = (-1) * list_new[i].y1;

elm.y2 = (-1) * list_new[i].y3;

elm.y3 = (-1) * list_new[i].y2;

elm.c = list_new[i].c;

list_coord_invert.Add(elm);

}

for (int i = list_coord.Count-1; i >=0; i--)

{

Uzl_Coord elm = new Uzl_Coord();

elm.x1 = list_coord_invert[i].x1;

elm.x2 = list_coord_invert[i].x2;

elm.x3 = list_coord_invert[i].x3;

elm.y1 = list_coord[list_coord.Count - 1].y2 + list_coord_invert[i].y1;

elm.y2 = list_coord[list_coord.Count - 1].y2 + list_coord_invert[i].y2;

elm.y3 = list_coord[list_coord.Count - 1].y2 + list_coord_invert[i].y3;

elm.c = list_coord_invert[i].c;

list_coord_rez.Add(elm);

}

ind = 0;

int kkk=0;

while (uzk[kkk + 1] != c_in1)

{

for (int i = 0; i < uzk[kkk] - 1; i++)

{

gi1 = new globindexes();

gi2 = new globindexes();

gi1.ind = new int[3];

gi2.ind = new int[3];

gi1.ind[0] = ind + uzk[kkk + 1];

gi2.ind[0] = ind + uzk[kkk + 1];

gi1.ind[1] = ind + 1;

gi2.ind[1] = ind + uzk[kkk + 1]+1;

gi1.ind[2] = ind;

gi2.ind[2] = ind + 1;.Add(gi1);

listGIBuf.Add(gi2);

ind++;

}

ind++;

kkk++;

}

for (int i = 0; i < uzk[kkk]-1; i++)

{

if (i < 11)

{

gi1 = new globindexes();

gi2 = new globindexes();

gi1.ind = new int[3];

gi2.ind = new int[3];

gi1.ind[0] = ind + uzk[kkk ];

gi2.ind[0] = ind + uzk[kkk ];

gi1.ind[1] = ind + 1;

gi2.ind[1] = ind + uzk[kkk ] + 1;

gi1.ind[2] = ind;

gi2.ind[2] = ind + 1;

listGIBuf.Add(gi1);

listGIBuf.Add(gi2);

ind++;

}

else

{

if (i == 11)

{

gi1 = new globindexes();

gi1.ind = new int[3];

gi1.ind[0] = ind + uzk[kkk ];

gi1.ind[1] = ind + 1;

gi1.ind[2] = ind;

listGIBuf.Add(gi1);

ind++;

}

else

{

gi1 = new globindexes();

gi2 = new globindexes();

gi1.ind = new int[3];

gi2.ind = new int[3];

gi1.ind[0] = ind + uzk[kkk ]-1;

gi2.ind[0] = ind + uzk[kkk ]-1;

gi1.ind[1] = ind + 1;

gi2.ind[1] = ind + uzk[kkk ];

gi1.ind[2] = ind;

gi2.ind[2] = ind + 1;

listGIBuf.Add(gi1);

listGIBuf.Add(gi2);

ind++;

}

}

}

ind++;

kkk++;

for (int i = 0; i < uzk[kkk] - 1; i++)

{

gi1 = new globindexes();

gi2 = new globindexes();

gi1.ind = new int[3];

gi2.ind = new int[3];

gi1.ind[0] = ind + uzk[kkk ];

gi2.ind[0] = ind + uzk[kkk ];

gi1.ind[1] = ind + 1;

gi2.ind[1] = ind + uzk[kkk ] + 1;

gi1.ind[2] = ind;

gi2.ind[2] = ind + 1;

listGIBuf.Add(gi1);

listGIBuf.Add(gi2);

ind++;

}

for (int i = 0; i < list_coord.Count; i++)

{

Uzl_Coord elm = new Uzl_Coord();

elm.x1 = list_coord[i].x1;

elm.x2 = list_coord[i].x2;

elm.x3 = list_coord[i].x3;

elm.y1 = list_coord[list_coord.Count - 1].y2 + list_coord[i].y1;

elm.y2 = list_coord[list_coord.Count - 1].y2 + list_coord[i].y2;

elm.y3 = list_coord[list_coord.Count - 1].y2 + list_coord[i].y3;

elm.c = list_coord[i].c;

list_coord_rez.Add(elm);

}

for (int i = 0; i < listGI.Count; i++)

{

listGI[i].ind[0] += ind + 1;

listGI[i].ind[1] += ind + 1;

listGI[i].ind[2] += ind + 1;

}

for (int i = 0; i < listGIBuf.Count; i++)

{

listGI.Insert(i,listGIBuf[i]);

}

kk = 0;

bool g = true;

#endregion

#region Копирование координат в новый список, для последующего вывода

foreach (Uzl_Coord u in list_coord_rez)

{

Uzl_Coord p = new Uzl_Coord();

p.c = u.c;

p.x1 = u.x1;

p.x2 = u.x2;

p.x3 = u.x3;

p.y1 = u.y1;

p.y2 = u.y2;

p.y3 = u.y3;

coord_do.Add(p);

}

#endregion

#region Матрицы А

for (int i = 0; i < list_coord_rez.Count; i++)

{

matrAclass p = new matrAclass();

p.A = matrA(list_coord_rez[i].x1, list_coord_rez[i].x2, list_coord_rez[i].x3, list_coord_rez[i].y1, list_coord_rez[i].y2, list_coord_rez[i].y3);

listAt.Add(p);

}

#endregion

#region Локальная матрица жесткости

double[,] Qt = new double[6, 3];

Qt[1, 0] = 1;

Qt[5, 1] = 1;

Qt[2, 2] = 1;

Qt[4, 2] = 1;

listKLOC.Clear();

double EB=21000, EG=9500, EP=0.01;

for (int t = 0; t < listAt.Count; t++)

{

matrKLOCclass d = new matrKLOCclass();

if (list_coord_rez[t].c == Color.Red)

E = matrE(0.35, EG);

else

if(list_coord_rez[t].c==Color.Gray)

E = matrE(0.28, EB);

else

E = matrE(0.01, EP);[,] AtQt = Multiplication(listAt[t].A, Qt);

double[,] EQ = Multiplication(E, Q);

double[,] AtQEQ = Multiplication(AtQt, EQ);

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

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

A[i, j] = listAt[t].A[j, i];

if (list_coord_rez[t].x1.Equals(list_coord_rez[t].x2))

{ dx = Math.Abs(list_coord_rez[t].x3 - list_coord_rez[t].x1); }

else

{ dx = Math.Abs(list_coord_rez[t].x2 - list_coord_rez[t].x1); }

if (list_coord_rez[t].y1.Equals(list_coord_rez[t].y2))

{ dy = Math.Abs(list_coord_rez[t].y3 - list_coord_rez[t].y1); }

else

{ dy = Math.Abs(list_coord_rez[t].y2 - list_coord_rez[t].y1); }

d.K = Multiplication(AtQEQ, A);

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

{

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

{

d.K[i, j] = d.K[i, j] * (dx * dy / 2);

}

}.Add(d);

#endregion

#region Заполнение глобальной матрицы жесткости

double[,] KGlob = new double[2 * (alluzk), 2 * (alluzk)];

int key = 0;

key = 0;

while (key < listKLOC.Count)

{

for (int ii = 0; ii < 3; ii++)

for (int jj = 0; jj < 3; jj++)

{

for (int iii = 0; iii < 2; iii++)

for (int jjj = 0; jjj < 2; jjj++)

KGlob[2 * listGI[key].ind[ii] + iii, 2 * listGI[key].ind[jj] + jjj] += listKLOC[key].K[2 * ii + iii, 2 * jj + jjj];

}

key++;

}

List<globindexes> gli = new List<globindexes>();

s = "";

for (int i = 0; i < list_coord_rez.Count; i++)

{

if (list_coord_rez[i].x1 == 0)

{ gli.Add(listGI[i]); }

}

#region Если вдруг понадобится закрепить только головку болта

/*int z=gli.Count;

while(gli.Count!=z-8)

gli.RemoveAt(0);

z = gli.Count;

while (gli.Count != z - 8)

gli.RemoveAt(gli.Count-1);*/

#endregion

#region Учет закрепленных узлов

for (int j = 0; j < gli.Count; j += 2)

for (int i = 0; i < 2 * (alluzk); i++)

{

KGlob[gli[j].ind[0]*2, i] = 0;

KGlob[gli[j].ind[0]*2 + 1, i] = 0;

KGlob[i, gli[j].ind[0]*2] = 0;

KGlob[i, gli[j].ind[0]*2 + 1] = 0;

}

for (int i = 0; i < 2 * (alluzk); i++)

{

KGlob[0, i] = 0;

KGlob[1, i] = 0;

KGlob[i, 0] = 0;

KGlob[i, 1] = 0;

KGlob[(alluzk-c_in3)*2, i] = 0;

KGlob[(alluzk - c_in3)*2+1, i] = 0;

KGlob[i, (alluzk - c_in3)*2] = 0;

KGlob[i, (alluzk - c_in3)*2+1] = 0;

}

KGlob[0, 0] = 1;

KGlob[1, 1] = 1;

KGlob[(alluzk - c_in3) * 2, (alluzk - c_in3) * 2] = 1;

KGlob[(alluzk - c_in3) * 2 + 1, (alluzk - c_in3) * 2 + 1] = 1;

for (int j = 0; j < gli.Count; j += 2)

{

KGlob[gli[j].ind[0]*2, gli[j].ind[0]*2] = 1;

KGlob[gli[j].ind[0]*2+ 1, gli[j].ind[0]*2 + 1] = 1;

}

#endregion

#endregion

double[] force = new double[2 * alluzk];

int[] mass = new int[coord_do.Count];

if (this.radioButton1.Checked)

{

#region Задание вектора нагрузки

int ind1 = 11;

int ind2 = alluzk - ind1 - 1;

#region Разбиение распределенной нагрузки на узлы гайки

double full_f = double.Parse(textBox9.Text);

double uz_f = full_f / ((c_in3 - 11) * 2);

for (int i = ind1; i < c_in3; i++)

{

force[2 * i] = -uz_f;

}

for (int i = ind2; i < alluzk; i++)

{

force[2 * i] = -uz_f;

}

#endregion

#endregion

}

else

{

#region Задание вектора нагрузки

double maxx = 0;

for (int i = 0; i < coord_do.Count; i++)

{

if (coord_do[i].c == Color.Red)

{

if (maxx < coord_do[i].x1)

{ maxx = coord_do[i].x1; }

if (maxx < coord_do[i].x2)

{ maxx = coord_do[i].x2; }

if (maxx < coord_do[i].x3)

{ maxx = coord_do[i].x3; }

}

}

int iii = 0;

double full_f = double.Parse(textBox9.Text);

double uz_f = full_f / 16;

for (int i = 0; i < coord_do.Count; i++)

{

if (coord_do[i].c == Color.Red)

{

if (Math.Abs(coord_do[i].x1 - maxx) < 0.001)

{

if (mass[listGI[i].ind[0]] == 0)

{

force[listGI[i].ind[0] * 2] = -uz_f;

mass[listGI[i].ind[0]] = 1;

iii++;

}

}

if (Math.Abs(coord_do[i].x2 - maxx) < 0.001)

{

if (mass[listGI[i].ind[1]] == 0)

{

force[listGI[i].ind[1] * 2] = -uz_f;

mass[listGI[i].ind[1]] = 1;

iii++;

}(Math.Abs(coord_do[i].x3 - maxx) < 0.001)

{

if (mass[listGI[i].ind[2]] == 0)

{

force[listGI[i].ind[2] * 2] = -uz_f;

mass[listGI[i].ind[2]] = 1;

iii++;

}

}

}

}

#endregion

}

#region Решение СЛАУ (нахождение перемещений узлов)

Solution = new GausMethod(2 * alluzk);

//заполняем правую часть

for (int i = 0; i < 2 * alluzk; i++)

Solution.RightPart[i] = force[i];

//заполняем матрицу

for (int i = 0; i < 2 * alluzk; i++)

for (int j = 0; j < 2 * alluzk; j++)

Solution.Matrix[i, j] = KGlob[i, j];

//решаем матрицу

Solution.SolveMatrix();

#endregion

#region Изменение координат узлов

for (int i = 0; i < list_coord_rez.Count; i++)

{

list_coord_rez[i].x1+=Solution.Answer[listGI[i].ind[0]*2];

list_coord_rez[i].y1 += Solution.Answer[listGI[i].ind[0] * 2+1];

list_coord_rez[i].x2 += Solution.Answer[listGI[i].ind[1] * 2];

list_coord_rez[i].y2 += Solution.Answer[listGI[i].ind[1] * 2 + 1];

list_coord_rez[i].x3 += Solution.Answer[listGI[i].ind[2] * 2];

list_coord_rez[i].y3 += Solution.Answer[listGI[i].ind[2] * 2 + 1];

}

#endregion

sm = max(Solution.Answer);

max_in_all(Solution.Answer);

max2(Solution.Answer);

 Rezba.count_v++;

}

if (sm > Rezba.eps)

{

MessageBox.Show("Длина болта слишком мала. Что бы болт мог выдержать нагрузку измените параметры.");

}

else

{

MessageBox.Show("Расчет закончен. Для воспринятия нагрузки болт должен иметь:" + (Rezba.count_v-1) + " витков.");

StreamWriter strw = new StreamWriter("smesch_x.txt",false);

for (int i = 0; i < coord_do.Count; i++)

if (coord_do[i].c != Color.Black)

{

strw.WriteLine("" + Solution.Answer[listGI[i].ind[0] * 2]);

strw.WriteLine("" + Solution.Answer[listGI[i].ind[1] * 2]);

strw.WriteLine("" + Solution.Answer[listGI[i].ind[2] * 2]);

}

strw.Close();

strw = new StreamWriter("smesch_y.txt", false);(int i = 0; i < coord_do.Count; i++)