Добавьте файлы проекта.
This commit is contained in:
28
include/Form.hpp
Normal file
28
include/Form.hpp
Normal 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
29
include/Mesh.hpp
Normal 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
34
include/Node.hpp
Normal 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
30
include/Object.hpp
Normal 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
54
include/Primitives.hpp
Normal 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
21
include/Solver.hpp
Normal 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
24
include/System.hpp
Normal 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
|
||||
|
||||
Reference in New Issue
Block a user