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++)