БлогNot. C++: класс "вектор на плоскости"

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 [2650 просмотров]


теги: c++ учебное

показать комментарии (1)