// Первая строка
k[0][0]=koef*c2; k[0][1]=koef*sc; k[0][2]=-koef*c2; k[0][3]=-koef*sc;
// Вторая строка
k[1][0]=koef*sc; k[1][1]=koef*s2; k[1][2]=-koef*sc; k[1][3]=-koef*s2;
// Третья строка
k[2][0]=-koef*c2; k[2][1]=-koef*sc; k[2][2]=koef*c2; k[2][3]=koef*sc;
// Четвертая строка
k[3][0]=-koef*sc; k[3][1]=-koef*s2; k[3][2]=koef*sc; k[3][3]=koef*s2;
}
// Функция заполнения глобальной матрицы жесткости фермы
void CRod::FillGlobalMatrix(double **MatrixA)
{
long place1 = node1*2, place2 = node2*2;
// Первая строка
MatrixA[place1][place1] += k[0][0];
MatrixA[place1][place1+1] += k[0][1];
MatrixA[place1][place2] += k[0][2];
MatrixA[place1][place2+1] += k[0][3];
// Вторая строка
MatrixA[place1+1][place1] += k[1][0];
MatrixA[place1+1][place1+1] += k[1][1];
MatrixA[place1+1][place2] += k[1][2];
MatrixA[place1+1][place2+1] += k[1][3];
// Третья строка
MatrixA[place2][place1] += k[2][0];
MatrixA[place2][place1+1] += k[2][1];
MatrixA[place2][place2] += k[2][2];
MatrixA[place2][place2+1] += k[2][3];
// Четвертая строка
MatrixA[place2+1][place1] += k[3][0];
MatrixA[place2+1][place1+1] += k[3][1];
MatrixA[place2+1][place2] += k[3][2];
MatrixA[place2+1][place2+1] += k[3][3];
}
// Функция вычисления продольной силы в стержне по координатам узлов и их
// перемещениям
void CRod::CalcForce(double x1, double y1, double x2, double y2)
{
// Переменные: новая длина, новый угол наклона к оси 0Х, модуль разности
// между старым и новым углом наклона, проекция расстояния между узлами
// стержня после деформирования фермы на ось стержня до деформации (чтобы
// определить и учесть только его удлинение), линейные продольные деформации
double new_lk, new_omega, delta_omega, projection_lk, deform;
// Новая длина
new_lk = (node[ node2 ].x+x2-(node[ node1 ].x+x1))*
(node[ node2 ].x+x2-(node[ node1 ].x+x1));
new_lk += (node[ node2 ].y+y2-(node[ node1 ].y+y1))*
(node[ node2 ].y+y2-(node[ node1 ].y+y1));
new_lk = sqrt( new_lk );
// Новый угол наклона
new_omega = atan2( double(node[ node2 ].y+y2-(node[ node1 ].y+y1)),
double(node[ node2 ].x+x2-(node[ node1 ].x+x1)) );
// Угол отклонения от первоначального положения после деформации
delta_omega = fabs(omega - new_omega);
// Проекция на собственную ось до деформации
projection_lk = new_lk*cos(delta_omega);
// Линейная продольная деформация стержня
deform = (projection_lk-lk)/lk;
// Продольное усилие
N = deform*E*Ak;
}
Файл Force.cpp - реализация класса внешней силы
#include "stdafx.h"
// Подключение файла заголовка класса внешних сил
#include "Force.h"
// Конструктор и деструктор класса CForce
CForce::CForce()
{
}
CForce::~CForce()
{
}
// Функция назначения величин внешних сил по оси 0Х и 0Y
void CForce::SetValue(double xValue, double yValue)
{
x = xValue;
y = yValue;
}
// Функция заполнения матрицы внешних сил всей фермы
void CForce::FillForceMatrix(double *MatrixB, long node)
{
// Заполнение начинается со строки с номером place
long place = 2*node;
MatrixB[ place ] = x;
MatrixB[ place+1 ] = y;
}
Файл Node.h - объявление класса узла
// В файлах заголовках лучше всего видны возможности того или иного класса.
// Здесь объявлены (кроме самого класса) все функции класса с передаваемыми им
// параметрами и все переменные класса
class CNode
{
public:
bool ThereIsConnection(long numberDisplacement);
void SetConnection(bool xConnection, bool yConnection);
void SetCoord(double xCoord, double yCoord);
double x, y; // Координаты узла
bool supX, supY; // Внешние связи (false-отсутствуют связь, true-есть связь)
CNode();
virtual ~CNode();
};
Файл Rod.h - объявление класса стержня
class CRod
{
public:
void CalcForce(double x1, double y1, double x2, double y2);
void FillGlobalMatrix(double **MatrixA);
void FillSelfMatrix();
void GetAngle();
void GetLength();
void SetParam(double AkValue, double EValue);
void SetNodesNumber(long node1Number, long node2Number);
long node1, node2; // Номера узлов стержня
double E, Ak, lk, omega, k[4][4], N;
CRod();
virtual ~CRod();
};
Файл Force.h - объявление класса внешней силы
class CForce
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.