InvGauss(N, A, B);
MultMatrix(A, B, E);
for I := 1 to N do
for J := 1 to N do
ShowMessage(Format('A[%d,%d]=%.3f', [I, J, B[I, J]]));
end;
//При клике мышкой
procedure TForm3.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
//Поменяем координаты окружности и заново выполним тесселяцию.
CirX := X/5;
CirY := Y/5;
Button1.Click;
end;
end.
unit uModel;
interface
uses Classes, Graphics, Windows, Math, uSLAU;
type
//Класс - точка с вещественными координатами
TRealPoint = class
//Номер узла
ID: Integer;
//Внешняя сила, приложенная к узлу
ExtForceX, ExtForceY: Extended;
//Перемещения и координаты узла
DX, DY, X, Y: Extended;
//Конструктор, создающий точку
constructor Create(aID: integer; ax, ay: Extended);
end;
//Класс - линия между двумя узлами
TRealLine = class
//Начальная и конечная точка
FirstPoint, EndPoint: TRealPoint;
//Функция сравнения с другой линией
function Same(L: TRealLine): boolean;
end;
//Класс - конечный элемент (треугольник)
TTria = class
//Указатели на три угла
Points: array[1..3]of TRealPoint;
//Вектор напряжений элемента
EpsX, EpsY,GammaX: Extended;
//Функция сравнения с другим конечным элементом
function Same(T: TTria): boolean;
//Функция, возвращающая координату X I-ой точки
function X(I: Integer): Extended;
//Функция, возвращающая координату Y I-ой точки
function Y(I: Integer): Extended;
//Фунция, возвращающая матрицу жесткости
procedure KMatrix(E, v, d: Extended; var K: TMatrix);
//Функция, возвращающая матрицу градиентов
procedure BMatrix(E, v, d: Extended; var B: TMatrix);
//Функция, возвращающая площадь треугольника
function Area: Extended;
//Функция поиска точки P в списке вершин треугольника
function FindPoint(P: TRealPoint): Integer;
//Функция возвращает эквивалентное напряжение в конечном элементе
function EpsSum: Extended;
end;
//Класс модель - представляет разбитый на конечные элементы объект
TModel = class
//Списки вершин, ребер, треугольников
Vertexes, Edges, Trias: TList;
//Максимальное значение эквивалентного напряжения - служит для масштабирования изображения напряжений
Kmax: Extended;
//Конструктор - создает объект
constructor Create;
//Очищает объект
procedure Clear;
//Добавляет в модель узел с координатами aX, aY и возвращает указатель на него
function AddVertex(aX, aY: Extended): TRealPoint;
//Добавляет в модель треугольник с вершинами P1,P2,P3 и возвращает указатель на него
function AddTria(P1, P2, P3: TRealPoint): TTria;
//Рисует модель на холсте C с масштабом Scale
procedure Draw(C: TCanvas; Scale: Extended);
//Составляет систему уравнений МКЭ и решает ее методом Method
procedure SolveMKE(E, v, d: Extended; Method: TMethod);
//Функция поиска точки с заданными координатами
function FindPoint(aX, aY: Extended): TRealPoint;overload;
//Добавляет в модель грань и возвращает указатель на него
function AddEdge(FromP, Top: TRealPoint): TRealLine;
end;
implementation
{ TModel }
function TModel.AddEdge(FromP, Top: TRealPoint): TRealLine;
var
I: Integer;
begin
//Создадим новую грань
Result := TRealLine.Create;
//Установим ее начальную и конечную точку
with Result do
begin
FirstPoint := FromP;
EndPoint := ToP;
end;
//Проверим, не совпадает ли она с существующими гранями
for I := 0 to Edges.Count - 1 do
if TRealLine(Edges[I]).Same(Result) then
begin
//Если совпадает - удалим ее
Result.Free;
Result := nil;
exit
end;
//Добавим грань в список граней
Edges.Add(Result);
end;
function TModel.AddTria(P1, P2, P3: TRealPoint): TTria;
var
I: integer;
begin
//Создадим новый треугольник
Result := TTria.Create;
//Установим его вершины
with Result do
begin
Points[1] := P1;
Points[2] := P2;
Points[3] := P3;
end;
//Если площадь нулевая - удалим!
if Result.Area = 0 then
begin
Result.Free;
Result := nil;
exit
end;
//Проверим, не совпадает ли он с существующими треугольниками
for I := 0 to Trias.Count - 1 do
if TTria(Trias[I]).Same(Result) then
begin
//Если совпадает - удалим его
Result.Free;
Result := nil;
exit
end;
//Добавим в список треугольников
Trias.Add(Result);
//Добавим стороны треугольника
AddEdge(P1, P2);
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.