summaryrefslogtreecommitdiffstats
path: root/krita/core/kis_vec.h
diff options
context:
space:
mode:
authortpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-01-20 01:29:50 +0000
committertpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-01-20 01:29:50 +0000
commit8362bf63dea22bbf6736609b0f49c152f975eb63 (patch)
tree0eea3928e39e50fae91d4e68b21b1e6cbae25604 /krita/core/kis_vec.h
downloadkoffice-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.h405
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