Advertisement
MeShootIn

struct Vector

Jun 7th, 2019
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.28 KB | None | 0 0
  1. #include <math.h>
  2.  
  3. #define USE_MATH_DEFINES
  4.  
  5. struct Vector{
  6.     Vector(double x, double y) : x(x), y(y){
  7.     }
  8.    
  9.     double length() const{
  10.         return sqrt(x * x + y * y);
  11.     }
  12.    
  13.     Vector operator - () const{
  14.         return Vector(-x, -y);
  15.     }
  16.    
  17.     Vector & operator += (Vector const & v){
  18.         x += v.x;
  19.         y += v.y;
  20.        
  21.         return * this;
  22.     }
  23.    
  24.     Vector & operator -= (Vector const & v){
  25.         x -= v.x;
  26.         y -= v.y;
  27.        
  28.         return * this;
  29.     }
  30.    
  31.     Vector & operator *= (double d){
  32.         x *= d;
  33.         y *= d;
  34.        
  35.         return * this;
  36.     }
  37.    
  38.     double x;
  39.     double y;
  40. };
  41.  
  42. Vector normalize(Vector const & v){
  43.     double len = v.length();
  44.    
  45.     return Vector(v.x / len, v.y / len);
  46. }
  47.  
  48. Vector operator * (Vector const & v, double d){
  49.     return Vector(v.x * d, v.y * d);
  50. }
  51.  
  52. Vector operator * (double d, Vector const & v){
  53.     return v * d;
  54. }
  55.  
  56. double operator * (Vector const & v, Vector const & w){
  57.     return v.x * w.x + v.y * w.y;
  58. }
  59.  
  60. double angle(Vector const & v, Vector const & w){
  61.     double scal = v * w;
  62.     double len_v = v.length();
  63.     double len_w = w.length();
  64.    
  65.     double rad = acos(scal / (len_v * len_w));
  66.    
  67.     return rad / M_PI * 180.;
  68. }
  69.  
  70. Vector operator + (Vector const & v, Vector const & w){
  71.     return Vector(v.x + w.x, v.y + w.y);
  72. }
  73.  
  74. Vector operator - (Vector const & v, Vector const & w){
  75.     return v + (-w);
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement