Разработка программы "Тензорный калькулятор", страница 5

int RowCount,int ColCount,bool* _deleted,KMatrix *_BufMat);  // конструктор для матрицы

// данные формы

String DataName;        // имя тензора/матрицы

int NameIndex;          // индекс имени тензора/матрицы

String FullDataName;    // полное имя тензора/матрицы (имя+индекс)

// данные для матрицы-формы

KMatrix *Matrix;

// функции работы с формой

void OutData();         // вывести на экран данные и обновить все настройки

void InpData(double D); // ввести все значения которые есть в ячейках D-множитель

void OutCaption();      // вывести заголовок формы

int  TypOfForm();       // возвращает FmTyp

bool FormTensor();      // 1 - если форма-тензор

bool FormMatrix();      // 1 - если форма-матрица

// для внешних обьектов

int ListNumber;         // номер формы в списке

bool* deleted;          // надо ли обновить список в форме калькулятора

// прочее

void SaveMatrix();      // сохранить имеющуюся матрицу в файл *.bin

void LoadMatrix(const char *FileName);// загрузить матрицу из двоичного файла

void ExportMatrix();    // эеспортировать матрицу в файл  *.dat

void ImportMatrix(const char *FileName);// импортировать матрицу из файла *.dat

KMatrix *BufMat;        // буферная матрица

double MN;              // множитель вывода

int outForm;            // формат вывода 0-обычный 1-треугольный

void setOutFormat(int typ); // установить формат вывода по outForm

bool showNull;          // выводить нули

void setshowNull(bool typ); // установка вывода нулей

void EnterMnoj();       // установка множителя (ввод пользователем)

void OutMnoj();         // вывод состояния множителя

void OutRefresh();      // учесть изменения во внешних формах

Файл "CalcForm.h"(основные элементы)

public:                  // User declarations

__fastcall TfmCalc(TComponent* Owner);

// работа с данными

void NewMatrix(int RowCount,int ColCount,String Name); // создать новую форму-матрицу

TfmMatrix* MR;          // последняя созданная матрица с помощью NewMatrix(операции)

bool* deleted;          // удалена ли какая либо форма

String NewDataName;     // стандартное имя новой формы

TfmMatrix** MF;         //[maxtensors];

// выбор матриц из списка

TfmMatrix* MFinList();  // возвращает указатель на форму с матрицей, выделенной в списке

void DeleteDataForm(TfmMatrix* M);      // удалить матрицу по ее указателю

// задает операцию

int err;                   // код ошибки

String OperName;           // имя операции (строка)

int ARGS;                  // количество аргументов у операции(осталось ввести)(матричные)

int DARGS;                 // количество аргументов у операции(осталось ввести)(типа double)

String ANames[MAXARGS];    // имена аргументов (матриц)

String DANames[MAXARGS];   // имена аргументов (типа double)

TfmMatrix *MFA[MAXARGS];   // передаваемые аргументы матричные нумерация с 1

double DA[MAXARGS];        // аргументы типа double нумерация с 1

void ClearOperation();     // сброс операции

void AfterOperation();     // по завершению аперации

void OperList();           // формирует список операций

void InitOperation();      // инициализация операции

void exeOperation();       // выполнение операций

bool sizMatrix;            // выставить размер окна размром матрицы

// служебное для операций

int NARG;                  // номер текущего вводимого аргумента

int DNARG;                 // номер текущего вводимого аргумента (типа double)

void ReList(TfmMatrix** _MF);

// прочее

KMatrix *BufMat;          // буферная матрица

Математическое применение (несколько примеров):

1. Преобразование координат

Связь между координатами точки в одной системе отсчета X | x1, x2, x3 | и другой системы отсчета Y | y1, y2, y3 |  может быть записана соотношением:

,                                                      или

;                            где      A – матрица поворота осей координат;

X0 – вектор смещения начала координат (значения координат центра новой системы отсчета в старых координатах).