added GPL copyrights
[physics.git] / src / Vector2.cpp
CommitLineData
e68f847b
PG
1/*
2 * Copyright (C) 2008 Patrik Gornicz, Gornicz_P (at) hotmail (dot) com.
3 *
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
ad9f1fb6
PG
18#include "Vector2.h"
19#include "mathw.h"
20
617dcc71
PG
21/// ***** Constructors/Destructors *****
22
ad9f1fb6
PG
23Vector2::Vector2()
24 : x(0), y(0)
25{
617dcc71 26
ad9f1fb6
PG
27}
28Vector2::Vector2(float x, float y)
29 : x(x), y(y)
30{
617dcc71 31
ad9f1fb6
PG
32}
33Vector2::Vector2(const Vector2& vec)
34 : x(vec.x), y(vec.y)
35{
617dcc71
PG
36
37}
38Vector2::~Vector2()
39{
40
ad9f1fb6
PG
41}
42
617dcc71
PG
43/// ***** Public Class Methods *****
44
ad9f1fb6
PG
45void Vector2::zero()
46{
617dcc71
PG
47 x = 0;
48 y = 0;
ad9f1fb6
PG
49}
50void Vector2::unit()
51{
617dcc71 52 float len = length();
ad9f1fb6 53
617dcc71
PG
54 x /= len;
55 y /= len;
ad9f1fb6
PG
56}
57
58float Vector2::angle() const
59{
617dcc71
PG
60 //TODO
61 //return atan2A(y,x);
62 return 0;
ad9f1fb6
PG
63}
64float Vector2::length() const
65{
617dcc71 66 return sqrt(x*x + y*y);
ad9f1fb6
PG
67}
68
69
70string Vector2::toString() const
71{
617dcc71
PG
72 // long just to be safe
73 char* strX = new char[50];
74 char* strY = new char[50];
75
76 sprintf(strX, "%f", x);
77 sprintf(strY, "%f", y);
78
79 string val = (string)"Vector2 x: " + strX + ", y: " + strY;
ad9f1fb6 80
617dcc71
PG
81 // deletes the allocated memory, not just what is used by sprintf
82 delete []strX;
83 delete []strY;
ad9f1fb6 84
617dcc71 85 return val;
ad9f1fb6
PG
86}
87void Vector2::print() const
88{
617dcc71 89 printf("%s\n",toString().c_str());
ad9f1fb6
PG
90}
91
92
93Vector2 Vector2::add(const Vector2& vec) const
94{
617dcc71 95 return Vector2(x+vec.x, y+vec.y);
ad9f1fb6
PG
96}
97Vector2 Vector2::subtract(const Vector2& vec) const
98{
617dcc71 99 return Vector2(x-vec.x, y-vec.y);
ad9f1fb6
PG
100}
101Vector2 Vector2::multiply(float c) const
102{
617dcc71 103 return Vector2(x*c, y*c);
ad9f1fb6
PG
104}
105Vector2 Vector2::divide(float c) const
106{
617dcc71 107 return Vector2(x/c, y/c);
ad9f1fb6
PG
108}
109
617dcc71 110/// ***** Public Methods *****
ad9f1fb6
PG
111
112Vector2 operator+(const Vector2& vec1, const Vector2& vec2)
113{
617dcc71 114 return vec1.add(vec2);
ad9f1fb6
PG
115}
116Vector2 operator-(const Vector2& vec1, const Vector2& vec2)
117{
617dcc71 118 return vec1.subtract(vec2);
ad9f1fb6
PG
119}
120Vector2 operator*(float c, const Vector2& vec)
121{
617dcc71 122 return vec.multiply(c);
ad9f1fb6
PG
123}
124Vector2 operator*(const Vector2& vec, float c)
125{
617dcc71 126 return vec.multiply(c);
ad9f1fb6
PG
127}
128Vector2 operator/(const Vector2& vec, float c)
129{
617dcc71 130 return vec.divide(c);
ad9f1fb6
PG
131}
132
133
134void operator+=(Vector2& vec1, const Vector2& vec2)
135{
617dcc71
PG
136 vec1.x += vec2.x;
137 vec1.y += vec2.y;
ad9f1fb6
PG
138}
139void operator-=(Vector2& vec1, const Vector2& vec2)
140{
617dcc71
PG
141 vec1.x -= vec2.x;
142 vec1.y -= vec2.y;
ad9f1fb6
PG
143}
144void operator*=(Vector2& vec, float c)
145{
617dcc71
PG
146 vec.x *= c;
147 vec.y *= c;
ad9f1fb6
PG
148}
149void operator/=(Vector2& vec, float c)
150{
617dcc71
PG
151 vec.x /= c;
152 vec.y /= c;
ad9f1fb6 153}