aboutsummaryrefslogtreecommitdiffstats
path: root/meowpp/geo/Vectors.h
diff options
context:
space:
mode:
Diffstat (limited to 'meowpp/geo/Vectors.h')
-rw-r--r--meowpp/geo/Vectors.h168
1 files changed, 84 insertions, 84 deletions
diff --git a/meowpp/geo/Vectors.h b/meowpp/geo/Vectors.h
index 8cdafc9..0f09ee6 100644
--- a/meowpp/geo/Vectors.h
+++ b/meowpp/geo/Vectors.h
@@ -22,165 +22,165 @@ public:
//! @brief consturctor (0, 0)
Vector2D(): x_(0), y_(0) {
}
-
+
//! @brief consturctor (from another Vector2D)
Vector2D(Vector2D const& v): x_(v.x_), y_(v.y_) {
}
-
+
//! @brief constructor (s, s)
Vector2D(Scalar const& s): x_(s), y_(s) {
}
-
+
//! @brief constructor (sx, sy)
Vector2D(Scalar const& sx, Scalar const& sy): x_(sx), y_(sy) {
}
-
+
//! @brief constructor (from another Vector)
Vector2D(Vector<Scalar> const& v): x_(v(0)), y_(v(1)) {
}
-
+
//! @brief constructor (from another Vector, i-th)
Vector2D(Vector<Scalar> const& v, size_t i): x_(v(i)), y_(v(i + 1)) {
}
-
+
//! @brief destructor
~Vector2D() {
}
-
+
//! @brief copy
Vector2D& copyFrom(Vector2D const& v) {
return xy(v.x(), v.y());
}
-
+
//! @brief access x
Scalar const& x() const {
return x_;
}
-
+
//! @brief access x with non constant reference
Scalar& xGet() {
return x_;
}
-
+
//! @brief access y with non constant reference
Scalar& yGet() {
return y_;
}
-
+
//! @brief access y
Scalar const& y() const {
return y_;
}
-
+
//! @brief modify x
Scalar const& x(Scalar const& s) {
x_ = s;
return x();
}
-
+
//! @brief modify y
Scalar const& y(Scalar const& s) {
y_ = s;
return y();
}
-
+
//! @brief modify x and y
Vector2D& xy(Scalar const& sx, Scalar const& sy){
x(sx);
y(sy);
return *this;
}
-
+
//! @brief return \a +(*this)
Vector2D positive() const {
return *this;
}
-
+
//! @brief return \a -(*this)
Vector2D negative() const {
return Vector2D(-x(), -y());
}
-
+
//! @brief return \a count-clockwise \a rotate \a 90 \a degree of itself
Vector2D right()const{
return Vector2D(-y(), x());
}
-
+
//! @brief return \a (*this)+v
Vector2D add(Vector2D const& v) const {
return Vector2D(x() + v.x(), y() + v.y());
}
-
+
//! @brief Let itself add v
Vector2D& added(Vector2D const& v) {
return xy(x() + v.x(), y() + v.y());
}
-
+
//! @brief return \a (*this)-v
Vector2D sub(Vector2D const& v) const {
return Vector2D(x() - v.x(), y() - v.y());
}
-
+
//! @brief Let itself substract v
Vector2D& subed(Vector2D const& v) {
return xy(x() - v.x(), y() - v.y());
}
-
+
//! @brief return \a (*this)*s , where s is a scalar
Vector2D mul(Scalar const& s) const {
return Vector2D(x() * s, y() * s);
}
-
+
//! @brief Let itself mulitple s
Vector2D& muled(Scalar const& s) {
return xy(x() * s, y() * s);
}
-
+
//! @brief return \a (*this)/s , where s is a scalar
Vector2D div(Scalar const& s) const {
return Vector2D(x() / s, y() / s);
}
-
+
//! @brief Let itself divide s
Vector2D& dived(Scalar const& s) {
return xy(x() / s, y() / s);
}
-
+
//! @brief same as dot(v)
Scalar mul(Vector2D const& v) const {
return dot(v);
}
-
+
//! @brief dot
Scalar dot(Vector2D const& v) const {
return x() * v.x() + y() * v.y();
}
-
+
//! @brief cross
Scalar cross(Vector2D const& v) const {
return x() * v.y() - y() * v.x();
}
-
+
//! @brief sqrt of length2
Scalar length() const {
return Scalar(sqrt(double(length2())));
}
-
+
//! @brief same as \a dot(*this)
Scalar length2() const {
return dot(*this);
}
-
+
//! @brief return normalize form of itself
Vector2D normalize() const {
return div(length());
}
-
+
//! @brief normalize itself
Vector2D& normalized() {
return dived(length());
}
-
+
//! @brief return rotate \a theta degree of itself
Vector2D rotate(Scalar const& theta) const {
Scalar cs(cos(-double(theta)));
@@ -188,22 +188,22 @@ public:
Vector2D<Scalar> new_x(cs, sn);
return Vector2D(new_x.dot(*this), new_x.cross(*this));
}
-
+
//! @brief Let itself rotate \a theta degree
Vector2D& rotated(Scalar const& theta) {
return copyFrom(rotate(theta));
}
-
+
//! @brief return reflect from given vector \a v
Vector2D reflect(Vector2D const& v) const {
return v.mul(v.dot(*this) * 2 / v.length2()).sub(*this);
}
-
+
//! @brief reflect itself given vector \a v
Vector2D& reflected(Vector2D const& v) {
return copyFrom(reflecte(v));
}
-
+
//! @brief return a 2x1 matrix form of itself
Matrix<Scalar> matrix() const {
static Matrix<Scalar> ret(2, 1, Scalar(0));
@@ -211,7 +211,7 @@ public:
ret(1, 0, y());
return ret;
}
-
+
//! @brief return a 3x1 matrix form of itself
Matrix<Scalar> matrix(Scalar const& homo) const {
static Matrix<Scalar> ret(3, 1, Scalar(0));
@@ -220,11 +220,11 @@ public:
ret(2, 0, homo);
return ret;
}
-
+
Scalar const& operator()(size_t n) const {
return (n == 0 ? x() : y());
}
-
+
Vector2D& operator()(Scalar const& sx, Scalar const& sy) {
return xy(sx, sy);
}
@@ -259,86 +259,86 @@ public:
//! @brief consturctor (0, 0)
Vector3D(): x_(0), y_(0), z_(0) {
}
-
+
//! @brief consturctor (from another Vector3D)
Vector3D(Vector3D const& v): x_(v.x_), y_(v.y_), z_(v.z_) {
}
-
+
//! @brief constructor (s, s)
Vector3D(Scalar const& s): x_(s), y_(s), z_(s) {
}
-
+
//! @brief constructor (sx, sy)
Vector3D(Scalar const& sx,
Scalar const& sy,
Scalar const& sz): x_(sx), y_(sy), z_(sz) {
}
-
+
//! @brief constructor (from another Vector)
Vector3D(Vector<Scalar> const& v): x_(v(0)), y_(v(1)), z_(v(2)) {
}
-
+
//! @brief constructor (from another Vector, i-th)
Vector3D(Vector<Scalar> const& v, size_t i): x_(v(i)), y_(v(i+1)), z_(v(i+2)){
}
-
+
//! @brief destructor
~Vector3D(){
}
-
+
//! @brief copy
Vector3D& copyFrom(Vector3D const& v){
return xyz(v.x(), v.y(), v.z());
}
-
+
//! @brief access x
Scalar const& x() const{
return x_;
}
-
+
//! @brief access y
Scalar const& y() const{
return y_;
}
-
+
//! @brief access z
Scalar const& z() const{
return z_;
}
-
+
//! @brief access x with non constant reference
Scalar& xGet() {
return x_;
}
-
+
//! @brief access y with non constant reference
Scalar& yGet() {
return y_;
}
-
+
//! @brief access z with non constant reference
Scalar& zGet() {
return z_;
}
-
+
//! @brief modify x
Scalar const& x(Scalar const& s) {
x_ = s;
return x();
}
-
+
//! @brief modify y
Scalar const& y(Scalar const& s) {
y_ = s;
return y();
}
-
+
//! @brief modify z
Scalar const& z(Scalar const& s) {
z_ = s;
return z();
}
-
+
//! @brief modify x and y
Vector3D& xyz(Scalar const& sx, Scalar const& sy, Scalar const& sz) {
x(sx);
@@ -346,99 +346,99 @@ public:
z(sz);
return *this;
}
-
+
//! @brief return \a +(*this)
Vector3D positive() const {
return *this;
}
-
+
//! @brief return \a -(*this)
Vector3D negative() const {
return Vector3D(-x(), -y(), -z());
}
-
+
//! @brief return \a (*this)+v
Vector3D add(Vector3D const& v) const {
return Vector3D(x() + v.x(), y() + v.y(), z() + v.z());
}
-
+
//! @brief Let itself add v
Vector3D& added(Vector3D const& v) {
return xyz(x() + v.x(), y() + v.y(), z() + v.z());
}
-
+
//! @brief return \a (*this)-v
Vector3D sub(Vector3D const& v) const {
return Vector3D(x() - v.x(), y() - v.y(), z() - v.z());
}
-
+
//! @brief Let itself substract v
Vector3D& subed(Vector3D const& v) {
return xyz(x() - v.x(), y() - v.y(), z() - v.z());
}
-
+
//! @brief return \a (*this)*s , where s is a scalar
Vector3D mul(Scalar const& s) const {
return Vector3D(x() * s, y() * s, z() * s);
}
-
+
//! @brief Let itself mulitple s
Vector3D& muled(Scalar const& s) {
return xyz(x() * s, y() * s, z() * s);
}
-
+
//! @brief return \a (*this)/s , where s is a scalar
Vector3D div(Scalar const& s) const {
return Vector3D(x() / s, y() / s, z() / s);
}
-
+
//! @brief Let itself divide s
Vector3D& dived(Scalar const& s) {
return xyz(x() / s, y() / s, z() / s);
}
-
+
//! @brief same as dot(v)
Scalar mul(Vector3D const& v) const {
return dot(v);
}
-
+
//! @brief dot
Scalar dot(Vector3D const& v) const {
return x() * v.x() + y() * v.y() + z() * v.z();
}
-
+
//! @brief cross
Vector3D cross(Vector3D const& v) const {
return Vector3D(y() * v.z() - z() * v.y(),
z() * v.x() - x() * v.z(),
x() * v.y() - y() * v.x());
}
-
+
//! @brief crossed
Vector3D& crossed(Vector3D const& v) {
return copyFrom(cross(v));
}
-
+
//! @brief sqrt of length2
Scalar length() const {
return Scalar(sqrt(double(length2())));
}
-
+
//! @brief same as \a dot(*this)
Scalar length2() const {
return dot(*this);
}
-
+
//! @brief return normalize form of itself
Vector3D normalize() const {
return div(length());
}
-
+
//! @brief normalize itself
Vector3D& normalized() {
return dived(length());
}
-
+
//! @brief return rotate \a theta degree by \a axis of itself
Vector3D rotate(Vector3D const& axis, double theta) const {
Vector3D a(axis.normalize());
@@ -446,22 +446,22 @@ public:
Vector3D yy(a.cross(*this).mul(sin(theta)));
return a.mul(a.dot(*this)).add(xx).add(yy);
}
-
+
//! @brief Let itself rotate \a theta degree
Vector3D& rotated(Vector3D const& axis, double theta) {
return copyFrom(rotate(axis, theta));
}
-
+
//! @brief return reflect from given vector \a v
Vector3D reflect(Vector3D const& v) const {
return v.mul(v.dot(*this) * 2 / v.length2()).sub(*this);
}
-
+
//! @brief reflect itself given vector \a v
Vector3D& reflected(Vector3D const& v) {
return copyFrom(reflecte(v));
}
-
+
//! @brief return a 3x1 matrix form of itself
Matrix<Scalar> matrix() const {
static Matrix<Scalar> ret(3, 1, Scalar(0));
@@ -470,7 +470,7 @@ public:
ret(2, 0, z());
return ret;
}
-
+
//! @brief return a 3x1 matrix form of itself
Matrix<Scalar> matrix(Scalar const& homo) const {
static Matrix<Scalar> ret(4, 1, Scalar(0));
@@ -480,11 +480,11 @@ public:
ret(3, 0, homo);
return ret;
}
-
+
Scalar const& operator()(size_t n) const {
return (n == 0 ? x() : (n == 1 ? y() : z()));
}
-
+
Vector3D& operator()(Scalar const& sx, Scalar const& sy, Scalar const& sz) {
return xyz(sx, sy, sz);
}
@@ -497,7 +497,7 @@ public:
Vector3D operator*(Scalar const& s) const { return mul(s); }
Vector3D operator/(Scalar const& s) const { return div(s); }
Scalar operator*(Vector3D const& v) const { return mul(v); }
-
+
Vector3D& operator=(Vector3D const& v) { return copyFrom(v); }
Vector3D& operator+=(Vector3D const& v) { return added(v); }
Vector3D& operator-=(Vector3D const& v) { return subed(v); }