// устанавливаем цвет очистки окна
Gl.glClearColor(0f, 0.8f, 0.8f, 1);
// устанавливаем порт вывода, основываясь на размерах элемента управления AnT
Gl.glViewport(0, 0, AnT.Width, AnT.Height);
Gl.glMatrixMode(Gl.GL_PROJECTION); // Select The Projection Matrix
Gl.glLoadIdentity(); // Reset The Projection Matrix
Glu.gluPerspective(45, AnT.Width / (double)AnT.Height, 0.1, 100);
Gl.glMatrixMode(Gl.GL_MODELVIEW); // Select The Modelview Matrix
Gl.glLoadIdentity();
}
private void button1_Click(object sender, EventArgs e)
{
formMatrixQ();
getMesh();
Draw();
}
void generateGlobalMatrix()
{
formMatrixQ();
globalMatrix = new double[allCountUsel * 2, allCountUsel * 2];
for (int i = 0; i < globalMatrix.GetLength(0); i++)
for (int j = 0; j < globalMatrix.GetLength(0); j++)
globalMatrix[i, j] = 0;
for (int i = 0; i < mesh.Length - 1; i++)
{
generateLocalMatrix(i);
for (int j = 0; j < localMatrix.GetLength(0); j++)
{
globalMatrix[i, j + i] += localMatrix[j, 0];
globalMatrix[i, j + i + 1] += localMatrix[j, 1];
globalMatrix[i + 1, j + i] += localMatrix[j, 2];
globalMatrix[i + 1, j + i + 1] += localMatrix[j, 3];
globalMatrix[i + 2, j + i] += localMatrix[j, 4];
globalMatrix[i + 2, j + i + 1] += localMatrix[j, 5];
}
}
}
void boundary()
{
for (int i = 0; i < usels.GetLength(0); i++)
{
for (int j = 0; j < usels.GetLength(1); j++)
{
if (usels[i,j]!=null && usels[i, j].stat)
{
for (int kk = 0; kk < globalMatrix.GetLength(0); kk++)
{
globalMatrix[i * 2 + j, kk] = 0;
globalMatrix[kk, i * 2 + j] = 0;
}
globalMatrix[i * 2 + j, i * 2 + j] = 1;
}
}}}
void generateLocalMatrix(int i)
{
double[,] E1 = formMatrixE(double.Parse(textYu.Text), double.Parse(textPs.Text));
formMatrixA(mesh[i].element[0].x, mesh[i].element[0].y,
mesh[i].element[1].x, mesh[i].element[1].y,
mesh[i].element[2].x, mesh[i].element[2].y);
B = Matrix.obratnaya_matrix(A);
localMatrix = Matrix.proizvedenie(Matrix.proizvedenie(Matrix.proizvedenie(Matrix.proizvedenie(Matrix.transponirovanie(B), Matrix.transponirovanie(Q)), E1), Q), B); }
private void button2_Click(object sender, EventArgs e)
{
generateGlobalMatrix();
boundary();
X = Matrix.method_gaussa(globalMatrix, R);
DrawResult();
label6.Text ="Максимальное смещение в узле приложения силы\n по ОХ="+ X[X.Length-2] + "\n и OY=" + X[X.Length-1];
}
}
}
Код программы содержащий два основных класса Usel и Mesh
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace k_kskr
{
public class Usel
{
public double x, y;
public bool stat; // false - не граничный узел
// true - левый граничный узел
public Usel(double param_x, double param_y, bool param_stat)
{
x = param_x;
y = param_y;
stat = param_stat;
}
}
//конечный треугольный элемент
public class Mesh
{
public Usel[] element;
public Mesh(Usel usel1, Usel usel2, Usel usel3)
{
element = new Usel[3];
element[0] = usel1;
element[1] = usel2;
element[2] = usel3;
}
}
}
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.