diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-20 01:29:50 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-20 01:29:50 +0000 |
commit | 8362bf63dea22bbf6736609b0f49c152f975eb63 (patch) | |
tree | 0eea3928e39e50fae91d4e68b21b1e6cbae25604 /krita/core/kis_vec.h | |
download | koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.tar.gz koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.zip |
Added old abandoned KDE3 version of koffice
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/koffice@1077364 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'krita/core/kis_vec.h')
-rw-r--r-- | krita/core/kis_vec.h | 405 |
1 files changed, 405 insertions, 0 deletions
diff --git a/krita/core/kis_vec.h b/krita/core/kis_vec.h new file mode 100644 index 00000000..1706dd4e --- /dev/null +++ b/krita/core/kis_vec.h @@ -0,0 +1,405 @@ +/* + * kis_vec.h - part of KImageShop + * + * Copyright (c) 1999 Matthias Elter <[email protected]> + * + * 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 2 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __kis_vec_h__ +#define __kis_vec_h__ + +#include <math.h> +#include <cfloat> +#include <qpoint.h> +#include "kis_point.h" + +/* + * vector classes + */ +const double epsilon = DBL_EPSILON; + +class KisVector2D +{ +public: + KisVector2D(); + KisVector2D(double x, double y); + KisVector2D(const QPoint& p); + KisVector2D(const KisPoint& p); + + bool isNull() const; + + double length() const; + + double x() const; + double y() const; + void setX(double); + void setY(double); + + KisVector2D &normalize(); + double dotProduct(const KisVector2D &) const; + + KisVector2D &operator+=(const KisVector2D &); + KisVector2D &operator-=(const KisVector2D &); + KisVector2D &operator*=(int); + KisVector2D &operator*=(long); + KisVector2D &operator*=(double); + KisVector2D &operator/=(int); + KisVector2D &operator/=(long); + KisVector2D &operator/=(double); + + friend inline bool operator==(const KisVector2D &, const KisVector2D &); + friend inline bool operator!=(const KisVector2D &, const KisVector2D &); + friend inline KisVector2D operator+(const KisVector2D &, const KisVector2D &); + friend inline KisVector2D operator-(const KisVector2D &, const KisVector2D &); + friend inline KisVector2D operator*(const KisVector2D &, int); + friend inline KisVector2D operator*(int, const KisVector2D &); + friend inline KisVector2D operator*(const KisVector2D &, long); + friend inline KisVector2D operator*(long, const KisVector2D &); + friend inline KisVector2D operator*(const KisVector2D &, double); + friend inline KisVector2D operator*(double, const KisVector2D &); + friend inline KisVector2D operator-(const KisVector2D &); + friend inline KisVector2D operator/(const KisVector2D &, int); + friend inline KisVector2D operator/(const KisVector2D &, long); + friend inline KisVector2D operator/(const KisVector2D &, double); + + KisPoint toKisPoint() const; + +private: + double m_x; + double m_y; +}; + +inline KisVector2D::KisVector2D() +{ m_x=0; m_y=0; } + +inline KisVector2D::KisVector2D(double x, double y) +{ m_x=x; m_y=y; } + +inline KisVector2D::KisVector2D(const QPoint& p) +{ + m_x=p.x(); m_y=p.y(); +} + +inline KisVector2D::KisVector2D(const KisPoint& p) +{ + m_x=p.x(); m_y=p.y(); +} + +inline bool KisVector2D::isNull() const +{ return fabs(m_x) < epsilon && fabs(m_y) < epsilon; } + +inline double KisVector2D::length() const +{ return (sqrt(m_x*m_x + m_y*m_y)); } + +inline double KisVector2D::dotProduct(const KisVector2D &v) const +{ return m_x*v.m_x + m_y*v.m_y; } + +inline double KisVector2D::x() const +{ return m_x; } + +inline double KisVector2D::y() const +{ return m_y; } + +inline void KisVector2D::setX(double x) +{ m_x=x; } + +inline void KisVector2D::setY(double y) +{ m_y=y; } + +inline KisVector2D &KisVector2D::operator+=(const KisVector2D &v) +{ m_x+=v.m_x; m_y+=v.m_y; return *this; } + +inline KisVector2D &KisVector2D::operator-=(const KisVector2D &v) +{ m_x-=v.m_x; m_y-=v.m_y; return *this; } + +inline KisVector2D &KisVector2D::operator*=(int c) +{ m_x*=c; m_y*=c; return *this; } + +inline KisVector2D &KisVector2D::operator*=(long c) +{ m_x*=c; m_y*=c; return *this; } + +inline KisVector2D &KisVector2D::operator*=(double c) +{ m_x*=c; m_y*=c; return *this; } + +inline bool operator==(const KisVector2D &v1, const KisVector2D &v2) +{ return fabs(v1.m_x - v2.m_x) < epsilon && fabs(v1.m_y - v2.m_y) < epsilon; } + +inline bool operator!=(const KisVector2D &v1, const KisVector2D &v2) +{ return !(v1 == v2); } + +inline KisVector2D operator+(const KisVector2D &v1, const KisVector2D &v2) +{ return KisVector2D(v1.m_x+v2.m_x, v1.m_y+v2.m_y); } + +inline KisVector2D operator-(const KisVector2D &v1, const KisVector2D &v2) +{ return KisVector2D(v1.m_x-v2.m_x, v1.m_y-v2.m_y); } + +inline KisVector2D operator*(const KisVector2D &v, int c) +{ return KisVector2D((v.m_x*c), (v.m_y*c)); } + +inline KisVector2D operator*(int c, const KisVector2D &v) +{ return KisVector2D((v.m_x*c), (v.m_y*c)); } + +inline KisVector2D operator*(const KisVector2D &v, long c) +{ return KisVector2D((v.m_x*c), (v.m_y*c)); } + +inline KisVector2D operator*(long c, const KisVector2D &v) +{ return KisVector2D((v.m_x*c), (v.m_y*c)); } + +inline KisVector2D operator*(const KisVector2D &v, double c) +{ return KisVector2D(v.m_x*c, v.m_y*c); } + +inline KisVector2D operator*(double c, const KisVector2D &v) +{ return KisVector2D(v.m_x*c, v.m_y*c); } + +inline KisVector2D operator-(const KisVector2D &v) +{ return KisVector2D(-v.m_x, -v.m_y); } + +inline KisVector2D operator/(const KisVector2D &v, int c) +{ + if (c != 0) { + return KisVector2D(v.x() / c, v.y() / c); + } else { + return v; + } +} + +inline KisVector2D operator/(const KisVector2D &v, long c) +{ + if (c != 0) { + return KisVector2D(v.x() / c, v.y() / c); + } else { + return v; + } +} + +inline KisVector2D operator/(const KisVector2D &v, double c) +{ + if (c > DBL_EPSILON || c < -DBL_EPSILON) { + return KisVector2D(v.x() / c, v.y() / c); + } else { + return v; + } +} + +inline KisVector2D &KisVector2D::operator/=(int c) +{ + if (!c == 0) + { + m_x/=c; + m_y/=c; + } + return *this; +} + +inline KisVector2D &KisVector2D::operator/=(long c) +{ + if (!c == 0) + { + m_x/=c; + m_y/=c; + } + return *this; +} + +inline KisVector2D &KisVector2D::operator/=(double c) +{ + if (!c == 0) + { + m_x/=c; + m_y/=c; + } + return *this; +} + +inline KisPoint KisVector2D::toKisPoint() const +{ + return KisPoint(m_x, m_y); +} + +class KisVector3D +{ +public: + KisVector3D(); + KisVector3D(double x, double y, double z = 0); + KisVector3D(int x, int y, int z = 0); + KisVector3D(long x, long y, long z = 0); + + bool isNull() const; + + double length() const; + + double x() const; + double y() const; + double z() const; + void setX(double); + void setY(double); + void setZ(double); + + KisVector3D &normalize(); + KisVector3D &crossProduct(const KisVector3D &); + double dotProduct(const KisVector3D &) const; + + KisVector3D &operator+=(const KisVector3D &); + KisVector3D &operator-=(const KisVector3D &); + KisVector3D &operator*=(int); + KisVector3D &operator*=(long); + KisVector3D &operator*=(double); + KisVector3D &operator/=(int); + KisVector3D &operator/=(long); + KisVector3D &operator/=(double); + + friend inline bool operator==(const KisVector3D &, const KisVector3D &); + friend inline bool operator!=(const KisVector3D &, const KisVector3D &); + friend inline KisVector3D operator+(const KisVector3D &, const KisVector3D &); + friend inline KisVector3D operator-(const KisVector3D &, const KisVector3D &); + friend inline KisVector3D operator*(const KisVector3D &, int); + friend inline KisVector3D operator*(int, const KisVector3D &); + friend inline KisVector3D operator*(const KisVector3D &, long); + friend inline KisVector3D operator*(long, const KisVector3D &); + friend inline KisVector3D operator*(const KisVector3D &, double); + friend inline KisVector3D operator*(double, const KisVector3D &); + friend inline KisVector3D operator-(const KisVector3D &); + friend inline KisVector3D operator/(const KisVector3D &, int); + friend inline KisVector3D operator/(const KisVector3D &, long); + friend inline KisVector3D operator/(const KisVector3D &, double); + +private: + double m_x; + double m_y; + double m_z; +}; + +inline KisVector3D::KisVector3D() +{ m_x=0; m_y=0; m_z=0; } + +inline KisVector3D::KisVector3D(double x, double y, double z) +{ m_x=x; m_y=y; m_z=z; } + +inline KisVector3D::KisVector3D(int x, int y, int z) +{ m_x=static_cast<double>(x); m_y=static_cast<double>(y); m_z=static_cast<double>(z); } + +inline KisVector3D::KisVector3D(long x, long y, long z) +{ m_x=static_cast<double>(x); m_y=static_cast<double>(y); m_z=static_cast<double>(z); } + +inline bool KisVector3D::isNull() const +{ return fabs(m_x) < epsilon && fabs(m_y) < epsilon && fabs(m_z) < epsilon; } + +inline double KisVector3D::length() const +{ return (sqrt(m_x*m_x + m_y*m_y + m_z*m_z)); } + +inline double KisVector3D::dotProduct(const KisVector3D &v) const +{ return m_x*v.m_x + m_y*v.m_y + m_z*v.m_z; } + +inline double KisVector3D::x() const +{ return m_x; } + +inline double KisVector3D::y() const +{ return m_y; } + +inline double KisVector3D::z() const +{ return m_z; } + +inline void KisVector3D::setX(double x) +{ m_x=x; } + +inline void KisVector3D::setY(double y) +{ m_y=y; } + +inline void KisVector3D::setZ(double z) +{ m_z=z; } + +inline KisVector3D &KisVector3D::operator+=(const KisVector3D &v) +{ m_x+=v.m_x; m_y+=v.m_y; m_z+=v.m_z; return *this; } + +inline KisVector3D &KisVector3D::operator-=(const KisVector3D &v) +{ m_x-=v.m_x; m_y-=v.m_y; m_z-=v.m_z; return *this; } + +inline KisVector3D &KisVector3D::operator*=(int c) +{ m_x*=c; m_y*=c; m_z*=c; return *this; } + +inline KisVector3D &KisVector3D::operator*=(long c) +{ m_x*=c; m_y*=c; m_z*=c; return *this; } + +inline KisVector3D &KisVector3D::operator*=(double c) +{ m_x*=c; m_y*=c; m_z*=c; return *this; } + +inline bool operator==(const KisVector3D &v1, const KisVector3D &v2) +{ return fabs(v1.m_x - v2.m_x) < epsilon && fabs(v1.m_y - v2.m_y) < epsilon && fabs(v1.m_z - v2.m_z) < epsilon; } + +inline bool operator!=(const KisVector3D &v1, const KisVector3D &v2) +{ return !(v1 == v2); } + +inline KisVector3D operator+(const KisVector3D &v1, const KisVector3D &v2) +{ return KisVector3D(v1.m_x+v2.m_x, v1.m_y+v2.m_y, v1.m_z+v2.m_z); } + +inline KisVector3D operator-(const KisVector3D &v1, const KisVector3D &v2) +{ return KisVector3D(v1.m_x-v2.m_x, v1.m_y-v2.m_y, v1.m_z-v2.m_z); } + +inline KisVector3D operator*(const KisVector3D &v, int c) +{ return KisVector3D((v.m_x*c), (v.m_y*c), (v.m_z*c)); } + +inline KisVector3D operator*(int c, const KisVector3D &v) +{ return KisVector3D((v.m_x*c), (v.m_y*c), (v.m_z*c)); } + +inline KisVector3D operator*(const KisVector3D &v, long c) +{ return KisVector3D((v.m_x*c), (v.m_y*c), (v.m_z*c)); } + +inline KisVector3D operator*(long c, const KisVector3D &v) +{ return KisVector3D((v.m_x*c), (v.m_y*c), (v.m_z*c)); } + +inline KisVector3D operator*(const KisVector3D &v, double c) +{ return KisVector3D(v.m_x*c, v.m_y*c, v.m_z*c); } + +inline KisVector3D operator*(double c, const KisVector3D &v) +{ return KisVector3D(v.m_x*c, v.m_y*c, v.m_z*c); } + +inline KisVector3D operator-(const KisVector3D &v) +{ return KisVector3D(-v.m_x, -v.m_y, -v.m_z); } + +inline KisVector3D &KisVector3D::operator/=(int c) +{ + if (!c == 0) + { + m_x/=c; + m_y/=c; + m_z/=c; + } + return *this; +} + +inline KisVector3D &KisVector3D::operator/=(long c) +{ + if (!c == 0) + { + m_x/=c; + m_y/=c; + m_z/=c; + } + return *this; +} + +inline KisVector3D &KisVector3D::operator/=(double c) +{ + if (!c == 0) + { + m_x/=c; + m_y/=c; + m_z/=c; + } + return *this; +} + +#endif |