From 8362bf63dea22bbf6736609b0f49c152f975eb63 Mon Sep 17 00:00:00 2001 From: tpearson Date: Wed, 20 Jan 2010 01:29:50 +0000 Subject: 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 --- kivio/kiviopart/kiviosdk/tkmath.h | 141 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 kivio/kiviopart/kiviosdk/tkmath.h (limited to 'kivio/kiviopart/kiviosdk/tkmath.h') diff --git a/kivio/kiviopart/kiviosdk/tkmath.h b/kivio/kiviopart/kiviosdk/tkmath.h new file mode 100644 index 00000000..0edb6b37 --- /dev/null +++ b/kivio/kiviopart/kiviosdk/tkmath.h @@ -0,0 +1,141 @@ +/* + * Kivio - Visual Modelling and Flowcharting + * Copyright (C) 2000-2001 theKompany.com & Dave Marotti + * + * 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 _TKVECTOR_H +#define _TKVECTOR_H + +#include + +class TKVec2 +{ +protected: + double m_x, m_y; + +public: + TKVec2(const double &_x, const double &_y) + { m_x = _x; m_y=_y; } + + inline double dotProduct( const TKVec2 &v2 ) const + { return m_x*v2.m_x + m_y*v2.m_y; } + + inline double crossProduct( const TKVec2 &v2 ) const + { return ( m_x*v2.m_y - m_y*v2.m_x ); } + + inline double magnitude() const + { return sqrt(m_x*m_x + m_y*m_y); } + + inline void normalize() + { double l=this->magnitude(); m_x/=l; m_y/=l; } + + inline void scale( const double &sx, const double &sy ) + { m_x *= sx; m_y *= sy; } + + inline void scale( const TKVec2 &v ) + { m_x *= v.m_x; m_y *= v.m_y; } + + inline void scale( const double &s ) + { m_x*=s; m_y*=s; } + + inline TKVec2 getPerpendicular() const + { return TKVec2(-m_y, m_x); } + + inline void reverse() + { m_x*=-1.0f; m_y*=-1.0f; } + + inline void rotate( const double &rad ) + { double newX, newY; newX= m_x*cos(rad) - m_y*sin(rad); newY=m_x*sin(rad)+m_y*cos(rad); m_x=newX; m_y=newY;} + + inline void rotateDeg( const double ° ) + { double newX, newY, rad=deg*3.14159f/180.0f; + newX= m_x*cos(rad) - m_y*sin(rad); newY=m_x*sin(rad)+m_y*cos(rad); m_x=newX; m_y=newY;} + + inline void translate( const double &tx, const double &ty ) + { m_x += tx; m_y += ty; } + + inline double angle( const TKVec2 &v ) + { return acos( (this->dotProduct(v)) / (this->magnitude() * v.magnitude()) ); } + + inline double x() { return m_x; } + inline double y() { return m_y; } + + inline void setX(const double &_x) { m_x=_x; } + inline void setY(const double &_y) { m_y=_y; } + + inline void set(const double &_x, const double &_y) {m_x=_x; m_y=_y;} +}; + +inline double shortestDistance(double sx, double sy, double ex, double ey, double px, double py ) +{ + TKVec2 u(sx-ex, sy-ey); + TKVec2 pq(sx-px, sy-py); + + double magTop = fabs( pq.crossProduct(u) ); + double magU = u.magnitude(); + + // Eeeewww + if( magU==0.0f ) + { + return -1.0f; + } + + return magTop / magU; +} + +inline bool collisionLine( double sx, double sy, double ex, double ey, double px, double py, double threshold ) +{ + double minx, miny, maxx, maxy; + + if( sx < ex ) { + minx = sx; + maxx = ex; + } + else { + minx = ex; + maxx = sx; + } + + minx -= threshold; + maxx += threshold; + + if( sy < ey ) { + miny = sy; + maxy = ey; + } + else { + miny = ey; + maxy = sy; + } + + miny -= threshold; + maxy += threshold; + + if( !(px >= minx && + px <= maxx && + py >= miny && + py <= maxy ) ) + { + return false; + } + + if( shortestDistance( sx, sy, ex, ey, px, py ) <= threshold ) + return true; + + return false; +} + +#endif -- cgit v1.2.1