From: Patrik Gornicz Date: Mon, 27 Apr 2009 19:25:25 +0000 (-0400) Subject: copied Vector2 from physics X-Git-Tag: libbear-premerge~106 X-Git-Url: http://gitweb.pgornicz.com/gitweb.cgi?a=commitdiff_plain;h=b3429f75b8d7a29f81731690d0474adc2af92f04;p=libbear.git copied Vector2 from physics --- b3429f75b8d7a29f81731690d0474adc2af92f04 diff --git a/Vector2.cpp b/Vector2.cpp new file mode 100644 index 0000000..2a8c8af --- /dev/null +++ b/Vector2.cpp @@ -0,0 +1,148 @@ +/* + * Copyright (C) 2008 Patrik Gornicz, Gornicz_P (at) hotmail (dot) com. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "Vector2.h" +#include "debug.h" + +#include "mathw.h" + +/// ***** Constructors/Destructors ***** + +Vector2::Vector2() + : m_fX(0), m_fY(0) +{ + +} +Vector2::Vector2(float fX, float fY) + : m_fX(fX), m_fY(fY) +{ + +} + +/// ***** Public Class Methods ***** + +void Vector2::zero() +{ + m_fX = 0; + m_fY = 0; +} +void Vector2::unit() +{ + float fLen = length(); + + m_fX /= fLen; + m_fY /= fLen; +} + +float Vector2::angle() const +{ + //TODO + DASSERT(false); + //return atan2A(m_fY,m_fX); + return 0; +} +float Vector2::length() const +{ + return sqrt(sqrLength()); +} +float Vector2::sqrLength() const +{ + return this->dot(*this); +} + +float Vector2::dot(const Vector2& vec) const +{ + return m_fX * vec.m_fX + m_fY * vec.m_fY; +} + + +string Vector2::toString() const +{ + // long just to be safe + char rgchars[100]; + + sprintf(rgchars, "Vector2 X: %f, Y: %f", m_fX, m_fY); + + return rgchars; +} +void Vector2::print() const +{ + printf("%s\n", toString().c_str()); +} + + +Vector2 Vector2::add(const Vector2& vec) const +{ + return Vector2(m_fX + vec.m_fX, m_fY + vec.m_fY); +} +Vector2 Vector2::subtract(const Vector2& vec) const +{ + return Vector2(m_fX - vec.m_fX, m_fY - vec.m_fY); +} +Vector2 Vector2::multiply(float f) const +{ + return Vector2(m_fX * f, m_fY * f); +} +Vector2 Vector2::divide(float f) const +{ + return Vector2(m_fX / f, m_fY / f); +} + +/// ***** Public Methods ***** + +Vector2 operator+(const Vector2& vec1, const Vector2& vec2) +{ + return vec1.add(vec2); +} +Vector2 operator-(const Vector2& vec1, const Vector2& vec2) +{ + return vec1.subtract(vec2); +} +Vector2 operator*(float f, const Vector2& vec) +{ + return vec.multiply(f); +} +Vector2 operator*(const Vector2& vec, float f) +{ + return vec.multiply(f); +} +Vector2 operator/(const Vector2& vec, float f) +{ + return vec.divide(f); +} + + +void operator+=(Vector2& vec1, const Vector2& vec2) +{ + vec1.m_fX += vec2.m_fX; + vec1.m_fY += vec2.m_fY; +} +void operator-=(Vector2& vec1, const Vector2& vec2) +{ + vec1.m_fX -= vec2.m_fX; + vec1.m_fY -= vec2.m_fY; +} +void operator*=(Vector2& vec, float f) +{ + vec.m_fX *= f; + vec.m_fY *= f; +} +void operator/=(Vector2& vec, float f) +{ + vec.m_fX /= f; + vec.m_fY /= f; +} diff --git a/Vector2.h b/Vector2.h new file mode 100644 index 0000000..57a5541 --- /dev/null +++ b/Vector2.h @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2008 Patrik Gornicz, Gornicz_P (at) hotmail (dot) com. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef VECTOR2_H +#define VECTOR2_H + +#include + +using std::string; + +/// ***** Header Class ***** +class Vector2 +{ + public: + float m_fX; + float m_fY; + + Vector2(); + Vector2(float, float); + + void zero(); + void unit(); + + float angle() const; + float length() const; + float sqrLength() const; + + float dot(const Vector2&) const; + + Vector2 add(const Vector2&) const; + Vector2 subtract(const Vector2&) const; + Vector2 divide(float) const; + Vector2 multiply(float) const; + + string toString() const; + void print() const; +}; + +/// ***** Header Methods ***** + +// definitions of the operators are external because (float, Vector2) would +// fail inside the class + +Vector2 operator+(const Vector2&, const Vector2&); +Vector2 operator-(const Vector2&, const Vector2&); +Vector2 operator*(float, const Vector2&); +Vector2 operator*(const Vector2&, float); +Vector2 operator/(const Vector2&, float); + +void operator+=(Vector2&, const Vector2&); +void operator-=(Vector2&, const Vector2&); +void operator*=(Vector2&, float); +void operator/=(Vector2&, float); + +#endif // VECTOR2_H