From b86d8a56110f4cc368212f6728e79a481f1187b2 Mon Sep 17 00:00:00 2001 From: cathook Date: Thu, 1 May 2014 06:38:27 +0800 Subject: update vector2,3D --- meowpp/geo/Vector2D.h | 97 +++++++++++++++++++++++++++------------------------ 1 file changed, 52 insertions(+), 45 deletions(-) (limited to 'meowpp/geo/Vector2D.h') diff --git a/meowpp/geo/Vector2D.h b/meowpp/geo/Vector2D.h index 7de3523..d112f57 100644 --- a/meowpp/geo/Vector2D.h +++ b/meowpp/geo/Vector2D.h @@ -1,66 +1,73 @@ #ifndef geo_Vector2D_H__ #define geo_Vector2D_H__ +#include "../math/Matrix.h" + #include -#include "../math/utility.h" namespace meow{ template class Vector2D{ private: - Scalar _x, _y, _w; + Scalar _x, _y; public: + Vector2D(); + Vector2D(Vector2D const& __v); + Vector2D(Scalar const& __x, Scalar const& __y); + ~Vector2D(); + // + Vector2D& copy(Vector2D const& __v); + // + Scalar const& x() const; + Scalar const& y() const; + Scalar const& x(Scalar const& __s); + Scalar const& y(Scalar const& __s); + Vector2D& xy(Scalar const& __x, Scalar const& __y); + // + Vector2D positive() const; + Vector2D negative() const; + Vector2D right () const; // - Vector2D(): _x(0), _y(0), _w(0){ } - Vector2D(Scalar const& x, - Scalar const& y) : _x( x), _y( y), _w( 0){ } - Vector2D(Scalar const& x, - Scalar const& y, - Scalar const& w) : _x( x), _y( y), _w( w){ } - Vector2D(Vector2D const& v): _x(v._x), _y(v._y), _w(v._w){ } + Vector2D add(Vector2D const& __v) const; + Vector2D sub(Vector2D const& __v) const; + Vector2D mul(Scalar const& __s) const; + Vector2D div(Scalar const& __s) const; // - Scalar const& x() const{ return _x; } - Scalar const& y() const{ return _y; } - Scalar const& w() const{ return _w; } - Scalar & x(Scalar const& s){ _x = s; return _x; } - Scalar & y(Scalar const& s){ _y = s; return _y; } - Scalar & w(Scalar const& s){ _w = s; return _w; } - Vector2D& operator()(Scalar const& x, Scalar const& y) { _x = x; _y = y; return *this; } - Vector2D& operator()(Scalar const& x, Scalar const& y, Scalar const& w){ _x = x; _y = y; _w = w; return *this; } - Scalar& operator[](size_t n) { return (n == 0 ? _x : (n == 1 ? _y : _w)); } - Scalar const& operator[](size_t n) const{ return (n == 0 ? _x : (n == 1 ? _y : _w)); } + Scalar dot (Vector2D const& __v) const; + Scalar cross(Vector2D const& __v) const; + Scalar length () const; + Scalar length2() const; // - Vector2D operator-() const{ return Vector2D(-_x, -_y, _w); } - Vector2D operator~() const{ return Vector2D(-_y, _x, _w); } + Vector2D& normalize (); + Vector2D normalized() const; + Vector2D& rotate (Scalar const& __theta); + Vector2D rotated (Scalar const& __theta) const; + Vector2D& reflect (Vector2D const& __v); + Vector2D reflected (Vector2D const& __v) const; // - Vector2D operator+(Vector2D const& v) const{ return Vector2D(_x + v._x, _y + v._y, _w); } - Vector2D operator-(Vector2D const& v) const{ return Vector2D(_x - v._x, _y - v._y, _w); } - Vector2D operator*(Scalar const& s) const{ return Vector2D(_x * s, _y * s, _w); } - Vector2D operator/(Scalar const& s) const{ return Vector2D(_x / s, _y / s, _w); } + Matrix matrix( ) const; + Matrix matrix(Scalar const& __homo) const; // - Vector2D& operator+=(Vector2D const& v){ _x += v._x; _y += v._y; return *this; } - Vector2D& operator-=(Vector2D const& v){ _x -= v._x; _y -= v._y; return *this; } - Vector2D& operator*=(Scalar const& s){ _x *= s; _y *= s; return *this; } - Vector2D& operator/=(Scalar const& s){ _x /= s; _y /= s; return *this; } + Scalar const& operator()(size_t n) const; + Scalar& operator()(size_t n); + Vector2D& operator()(Scalar const& __x, Scalar const& __y); // - Scalar dot (Vector2D const& v) const{ return _x * v._x + _y * v._y; } - Scalar cross(Vector2D const& v) const{ return _x * v._y - _y * v._x; } - Scalar length () const{ return sqrt(squ(_x) + squ(_y)); } - Scalar length2() const{ return squ(_x) + squ(_y) ; } + Vector2D operator+() const; + Vector2D operator-() const; + Vector2D operator~() const; // - Vector2D normal() const{ - Scalar len(length()); - return Vector2D(_x / len, _y / len, _w); - } - Vector2D rotation(Scalar theta) const{ - Vector2D i(cos(-theta), sin(-theta)); - return Vector2D(i.dot(*this), i.cross(*this), _w); - } - Vector2D reflection(Vector2D const& v) const{ - return v * v.dot(*this) * 2 / v.length2() - *this; - } + Vector2D operator+(Vector2D const& __v) const; + Vector2D operator-(Vector2D const& __v) const; + Vector2D operator*(Scalar const& __s) const; + Vector2D operator/(Scalar const& __s) const; + // + Vector2D& operator+=(Vector2D const& __v); + Vector2D& operator-=(Vector2D const& __v); + Vector2D& operator*=(Scalar const& __s); + Vector2D& operator/=(Scalar const& __s); }; - } +#include "Vector2D.hpp" + #endif // geo_Vector2D_H__ -- cgit v1.2.3