Добавьте файлы проекта.

This commit is contained in:
Anton Kamalov
2025-05-13 20:24:51 +03:00
parent 8fab8f453f
commit 47b39d658d
27 changed files with 1758901 additions and 0 deletions

28
include/Form.hpp Normal file
View File

@@ -0,0 +1,28 @@
#ifndef MIMAPR_FORM_H
#define MIMAPR_FORM_H
#include <iostream>
#include <algorithm>
#include <cmath>
#include <map>
class Form {
protected:
static size_t counter_;
size_t id_;
bool excluded_;
int _boundtype;
public:
Form();
virtual double Function(double, double);
virtual std::pair<double, double> Deriative(double, double);
virtual bool Inhere(double, double);
virtual std::pair<double, double> missX(double);
virtual std::pair<double, double> missY(double);
virtual std::pair<double, double> size();
virtual int GetB();
bool Excluded() const;
bool operator==(size_t) const;
};
#endif

29
include/Mesh.hpp Normal file
View File

@@ -0,0 +1,29 @@
#ifndef MIMAPR_MESH_H
#define MIMAPR_MESH_H
#include <vector>
#include "Object.hpp"
#include "Node.hpp"
class Mesh{
std::vector<std::vector<Node*>> _mesh;
std::vector<Node*> _hlines;
std::vector<Node*> _vlines;
Object& _obj;
double _step;
void LinkX();
void LinkY();
void Delnode(int, int);
void Adapt();
public:
Mesh(Object&, double);
void ShowLinks();
std::vector<std::vector<Node*>>& Nodes();
std::vector<Node*>& LineX();
std::vector<Node*>& LineY();
~Mesh();
};
#endif

34
include/Node.hpp Normal file
View File

@@ -0,0 +1,34 @@
#ifndef MIMAPR_NODE_H
#define MIMAPR_NODE_H
#include <cmath>
class Node{
double _x;
double _y;
double _t;
int _btype;
Node* _left;
Node* _right;
Node* _above;
Node* _below;
public:
Node(double x = 0., double y = 0., int type = 0., double t = 0.): _x(x), _y(y), _t(t), _left(nullptr), _right(nullptr), _above(nullptr), _below(nullptr), _btype(type) {}
double T() const;
double X() const;
double Y() const;
double Dist(const Node*) const;
void LinkX(Node*, Node*);
void LinkY(Node*, Node*);
Node*& l();
Node*& r();
Node*& u();
Node*& d();
void SetT(double);
bool IsBound();
void SetB(int);
};
#endif

30
include/Object.hpp Normal file
View File

@@ -0,0 +1,30 @@
#ifndef MIMAPR_OBJECT_H
#define MIMAPR_OBJECT_H
#include "Primitives.hpp"
#include <vector>
class Object {
private:
std::vector<Form*> forms_;
double _w;
double _h;
void Updsize();
public:
Object();
~Object();
double Inhere(double, double);
double Width() const;
double Height() const;
bool Add_Form(const std::string&, std::map<std::string, double>&, bool, int);
std::pair<double, double> Filly(double, double);
std::pair<double, double> Fillx(double, double);
//std::vector<size_t> Get_IDs();
Form* Who(double, double);
};
#endif

54
include/Primitives.hpp Normal file
View File

@@ -0,0 +1,54 @@
#ifndef MIMAPR_PRIMITIVES_H
#define MIMAPR_PRIMITIVES_H
#include "Form.hpp"
class Rectangle : public Form {
private:
double a_;
double b_;
double h_x_;
double h_y_;
public:
Rectangle(double, double, double, double, bool, int);
double Function(double, double) override;
std::pair<double, double> Deriative(double, double) override;
bool Inhere(double, double) override;
std::pair<double, double> missX(double) override;
std::pair<double, double> missY(double) override;
std::pair<double, double> size() override;
};
class Circle : public Form {
private:
double a_;
double b_;
double h_x_;
double h_y_;
public:
Circle(double, double, double, double, bool, int);
double Function(double, double) override;
std::pair<double, double> Deriative(double, double) override;
bool Inhere(double, double) override;
std::pair<double, double> missX(double) override;
std::pair<double, double> missY(double) override;
std::pair<double, double> size() override;
};
class Arc : public Form {
private:
double a_;
double b_;
double h_x_;
double h_y_;
public:
Arc(double, double, double, double, bool, int);
double Function(double, double) override;
std::pair<double, double> Deriative(double, double) override;
std::pair<double, double> missX(double) override;
std::pair<double, double> missY(double) override;
std::pair<double, double> size() override;
bool Inhere(double, double) override;
};
#endif

21
include/Solver.hpp Normal file
View File

@@ -0,0 +1,21 @@
#ifndef SOLVER_H
#define SOLVER_H
#include <System.hpp>
#include <string>
#include <fstream>
class Solver{
double delta;
std::vector<double> ThomasMethod(std::vector<std::vector<double>>&, std::vector<double>&) const;
void SolveLine(System&, std::vector<Node*>&) const;
std::string _name_1;
std::string _name_2;
public:
Solver(std::string name_1, std::string name_2, double dt = 1.): delta(dt), _name_1(name_1), _name_2(name_2) {}
void SolveExplicit(System&, double) const;
void SolveImplicit(System&, double) const;
};
#endif

24
include/System.hpp Normal file
View File

@@ -0,0 +1,24 @@
#ifndef SYSTEM_H
#define SYSTEM_H
#include "Mesh.hpp"
class System{
Object& _obj;
Mesh _mesh;
double _a1;
double _a2;
double _step;
public:
System(Object& obj, double step = 10., double a1 = 1., double a2 = 1.): _obj(obj), _mesh(obj, step), _a1(a1), _a2(a2), _step(step) {}
void DefineBounds(int, int, int, int);
std::vector<std::vector<Node*>>& Nodes();
std::vector<Node*>& LineX();
std::vector<Node*>& LineY();
double step() const { return _step; }
double a1() const { return _a1; };
double a2() const { return _a2; };
};
#endif