aboutsummaryrefslogtreecommitdiffstats
path: root/meowpp/geo/Vector2D.h
diff options
context:
space:
mode:
authorcathook <b01902109@csie.ntu.edu.tw>2014-05-01 06:38:27 +0800
committercathook <b01902109@csie.ntu.edu.tw>2014-05-01 06:38:27 +0800
commitb86d8a56110f4cc368212f6728e79a481f1187b2 (patch)
tree70300b696c3f615cc0e08617514165457617e744 /meowpp/geo/Vector2D.h
parent95633629f82427d57e5a72899c46da50a972f72b (diff)
downloadmeow-b86d8a56110f4cc368212f6728e79a481f1187b2.tar
meow-b86d8a56110f4cc368212f6728e79a481f1187b2.tar.gz
meow-b86d8a56110f4cc368212f6728e79a481f1187b2.tar.bz2
meow-b86d8a56110f4cc368212f6728e79a481f1187b2.tar.lz
meow-b86d8a56110f4cc368212f6728e79a481f1187b2.tar.xz
meow-b86d8a56110f4cc368212f6728e79a481f1187b2.tar.zst
meow-b86d8a56110f4cc368212f6728e79a481f1187b2.zip
update vector2,3D
Diffstat (limited to 'meowpp/geo/Vector2D.h')
-rw-r--r--meowpp/geo/Vector2D.h97
1 files changed, 52 insertions, 45 deletions
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 <cmath>
-#include "../math/utility.h"
namespace meow{
template<class Scalar>
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<Scalar> matrix( ) const;
+ Matrix<Scalar> 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__