changed cleaning logic again, added copying of COPYING
[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 18#include "Vector2.h"
9d6dea5f
PG
19#include "debug.h"
20
ad9f1fb6
PG
21#include "mathw.h"
22
617dcc71
PG
23/// ***** Constructors/Destructors *****
24
ad9f1fb6 25Vector2::Vector2()
9d6dea5f 26 : m_fX(0), m_fY(0)
ad9f1fb6 27{
617dcc71 28
ad9f1fb6 29}
9d6dea5f
PG
30Vector2::Vector2(float fX, float fY)
31 : m_fX(fX), m_fY(fY)
617dcc71
PG
32{
33
ad9f1fb6
PG
34}
35
617dcc71
PG
36/// ***** Public Class Methods *****
37
ad9f1fb6
PG
38void Vector2::zero()
39{
9d6dea5f
PG
40 m_fX = 0;
41 m_fY = 0;
ad9f1fb6
PG
42}
43void Vector2::unit()
44{
9d6dea5f 45 float fLen = length();
ad9f1fb6 46
9d6dea5f
PG
47 m_fX /= fLen;
48 m_fY /= fLen;
ad9f1fb6
PG
49}
50
51float Vector2::angle() const
52{
617dcc71 53 //TODO
9d6dea5f
PG
54 DASSERT(false);
55 //return atan2A(m_fY,m_fX);
617dcc71 56 return 0;
ad9f1fb6
PG
57}
58float Vector2::length() const
59{
54fe85c5
PG
60 return sqrt(sqrLength());
61}
62float Vector2::sqrLength() const
63{
9d6dea5f 64 return this->dot(*this);
54fe85c5
PG
65}
66
9d6dea5f 67float Vector2::dot(const Vector2& vec) const
54fe85c5 68{
9d6dea5f 69 return m_fX * vec.m_fX + m_fY * vec.m_fY;
ad9f1fb6
PG
70}
71
72
73string Vector2::toString() const
74{
617dcc71 75 // long just to be safe
9d6dea5f 76 char rgchars[100];
ad9f1fb6 77
9d6dea5f 78 sprintf(rgchars, "Vector2 X: %f, Y: %f", m_fX, m_fY);
ad9f1fb6 79
9d6dea5f 80 return rgchars;
ad9f1fb6
PG
81}
82void Vector2::print() const
83{
9d6dea5f 84 printf("%s\n", toString().c_str());
ad9f1fb6
PG
85}
86
87
88Vector2 Vector2::add(const Vector2& vec) const
89{
9d6dea5f 90 return Vector2(m_fX + vec.m_fX, m_fY + vec.m_fY);
ad9f1fb6
PG
91}
92Vector2 Vector2::subtract(const Vector2& vec) const
93{
9d6dea5f 94 return Vector2(m_fX - vec.m_fX, m_fY - vec.m_fY);
ad9f1fb6 95}
9d6dea5f 96Vector2 Vector2::multiply(float f) const
ad9f1fb6 97{
9d6dea5f 98 return Vector2(m_fX * f, m_fY * f);
ad9f1fb6 99}
9d6dea5f 100Vector2 Vector2::divide(float f) const
ad9f1fb6 101{
9d6dea5f 102 return Vector2(m_fX / f, m_fY / f);
ad9f1fb6
PG
103}
104
617dcc71 105/// ***** Public Methods *****
ad9f1fb6
PG
106
107Vector2 operator+(const Vector2& vec1, const Vector2& vec2)
108{
617dcc71 109 return vec1.add(vec2);
ad9f1fb6
PG
110}
111Vector2 operator-(const Vector2& vec1, const Vector2& vec2)
112{
617dcc71 113 return vec1.subtract(vec2);
ad9f1fb6 114}
9d6dea5f 115Vector2 operator*(float f, const Vector2& vec)
ad9f1fb6 116{
9d6dea5f 117 return vec.multiply(f);
ad9f1fb6 118}
9d6dea5f 119Vector2 operator*(const Vector2& vec, float f)
ad9f1fb6 120{
9d6dea5f 121 return vec.multiply(f);
ad9f1fb6 122}
9d6dea5f 123Vector2 operator/(const Vector2& vec, float f)
ad9f1fb6 124{
9d6dea5f 125 return vec.divide(f);
ad9f1fb6
PG
126}
127
128
129void operator+=(Vector2& vec1, const Vector2& vec2)
130{
9d6dea5f
PG
131 vec1.m_fX += vec2.m_fX;
132 vec1.m_fY += vec2.m_fY;
ad9f1fb6
PG
133}
134void operator-=(Vector2& vec1, const Vector2& vec2)
135{
9d6dea5f
PG
136 vec1.m_fX -= vec2.m_fX;
137 vec1.m_fY -= vec2.m_fY;
ad9f1fb6 138}
9d6dea5f 139void operator*=(Vector2& vec, float f)
ad9f1fb6 140{
9d6dea5f
PG
141 vec.m_fX *= f;
142 vec.m_fY *= f;
ad9f1fb6 143}
9d6dea5f 144void operator/=(Vector2& vec, float f)
ad9f1fb6 145{
9d6dea5f
PG
146 vec.m_fX /= f;
147 vec.m_fY /= f;
ad9f1fb6 148}