added ball to ball collisions
[physics.git] / src / Vector2.cpp
... / ...
CommitLineData
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
18#include "Vector2.h"
19#include "mathw.h"
20
21/// ***** Constructors/Destructors *****
22
23Vector2::Vector2()
24 : x(0), y(0)
25{
26
27}
28Vector2::Vector2(float x, float y)
29 : x(x), y(y)
30{
31
32}
33Vector2::Vector2(const Vector2& vec)
34 : x(vec.x), y(vec.y)
35{
36
37}
38Vector2::~Vector2()
39{
40
41}
42
43/// ***** Public Class Methods *****
44
45void Vector2::zero()
46{
47 x = 0;
48 y = 0;
49}
50void Vector2::unit()
51{
52 float len = length();
53
54 x /= len;
55 y /= len;
56}
57
58float Vector2::angle() const
59{
60 //TODO
61 //return atan2A(y,x);
62 return 0;
63}
64float Vector2::length() const
65{
66 return sqrt(sqrLength());
67}
68float Vector2::sqrLength() const
69{
70 return x*x + y*y;
71}
72
73float Vector2::dot(const Vector2& v) const
74{
75 return x*v.x + y*v.y;
76}
77
78
79string Vector2::toString() const
80{
81 // long just to be safe
82 char* strX = new char[50];
83 char* strY = new char[50];
84
85 sprintf(strX, "%f", x);
86 sprintf(strY, "%f", y);
87
88 string val = (string)"Vector2 x: " + strX + ", y: " + strY;
89
90 // deletes the allocated memory, not just what is used by sprintf
91 delete []strX;
92 delete []strY;
93
94 return val;
95}
96void Vector2::print() const
97{
98 printf("%s\n",toString().c_str());
99}
100
101
102Vector2 Vector2::add(const Vector2& vec) const
103{
104 return Vector2(x+vec.x, y+vec.y);
105}
106Vector2 Vector2::subtract(const Vector2& vec) const
107{
108 return Vector2(x-vec.x, y-vec.y);
109}
110Vector2 Vector2::multiply(float c) const
111{
112 return Vector2(x*c, y*c);
113}
114Vector2 Vector2::divide(float c) const
115{
116 return Vector2(x/c, y/c);
117}
118
119/// ***** Public Methods *****
120
121Vector2 operator+(const Vector2& vec1, const Vector2& vec2)
122{
123 return vec1.add(vec2);
124}
125Vector2 operator-(const Vector2& vec1, const Vector2& vec2)
126{
127 return vec1.subtract(vec2);
128}
129Vector2 operator*(float c, const Vector2& vec)
130{
131 return vec.multiply(c);
132}
133Vector2 operator*(const Vector2& vec, float c)
134{
135 return vec.multiply(c);
136}
137Vector2 operator/(const Vector2& vec, float c)
138{
139 return vec.divide(c);
140}
141
142
143void operator+=(Vector2& vec1, const Vector2& vec2)
144{
145 vec1.x += vec2.x;
146 vec1.y += vec2.y;
147}
148void operator-=(Vector2& vec1, const Vector2& vec2)
149{
150 vec1.x -= vec2.x;
151 vec1.y -= vec2.y;
152}
153void operator*=(Vector2& vec, float c)
154{
155 vec.x *= c;
156 vec.y *= c;
157}
158void operator/=(Vector2& vec, float c)
159{
160 vec.x /= c;
161 vec.y /= c;
162}