C++: класс "вектор на плоскости"
Просто маленькая модель физического вектора в двумерном пространстве, чтобы не пропала. Легко переделать на трёхмерную.
Класс поддерживает сложение и вычитание векторов, умножение и деление на скаляр, сравнение с точностью до константы EPSILON
, декартовы и полярные координаты.
Ниже приведён код, проверенный в консоли Visual Studio 2015.
#include <iostream> #include <string> #include <cmath> using namespace std; #define M_PI 3.14159265359 #define EPSILON 1e-9 class Vector { public: double x, y; bool mode; //true - полярные координаты, false - декартовы Vector(double ix, double iy, char mod=false) { mode = mod; if (mod) { x = ix*cos(iy); y = ix*sin(iy); } else { x = ix; y = iy; } } Vector operator + (const Vector& first) { return Vector (x + first.x, y + first.y); } Vector operator - (Vector first) { return Vector(x - first.x, y - first.y); } Vector operator * (double scalar) { return Vector(x*scalar, y*scalar); } Vector operator / (double scalar) { return Vector(x / scalar, y / scalar); } bool operator == (Vector first) { return (fabs(x-first.x)<EPSILON && fabs(y-first.y)<EPSILON); } void type (bool newline=false, string hdr="") { if (newline) cout << endl; if (hdr.length()>0) cout << hdr << " "; cout << "X: " << x << " Y: " << y; } }; int main() { Vector vec1(0, 1); vec1.type(true,"vec1"); Vector vec2(2, 2); vec2.type(true, "vec2"); Vector vec3(sqrt(2), 45 * M_PI / 180, true); vec3.type(true, "vec3"); //Vector(1,1) Vector vec4 = vec1 + vec2; vec4.type(true, "vec4"); //Vector(2,3) Vector vec5 = vec1 - vec2; vec5.type(true, "vec5"); //Vector(-2, -1) Vector vec6 = vec1 * 5; vec6.type(true, "vec6"); //Vector(0, 5) Vector vec7 = vec2 / 2; vec7.type(true, "vec7"); //Vector(1, 1) bool eq = vec3 == vec7; cout << endl << "vec3 == vec7? " << eq; cin.get(); return 0; }
22.02.2018, 12:51 [2782 просмотра]