30 TKVec2( const double &_x, const double &_y)
33 inline double dotProduct( const TKVec2 &v2 ) const
34 { return m_x*v2.m_x + m_y*v2.m_y; }
36 inline double crossProduct( const TKVec2 &v2 ) const
37 { return ( m_x*v2.m_y - m_y*v2.m_x ); }
39 inline double magnitude() const
40 { return sqrt(m_x*m_x + m_y*m_y); }
42 inline void normalize()
43 { double l=this->magnitude(); m_x/=l; m_y/=l; }
45 inline void scale( const double &sx, const double &sy )
46 { m_x *= sx; m_y *= sy; }
48 inline void scale( const TKVec2 &v )
49 { m_x *= v.m_x; m_y *= v.m_y; }
51 inline void scale( const double &s )
54 inline TKVec2 getPerpendicular() const
55 { return TKVec2(-m_y, m_x); }
58 { m_x*=-1.0f; m_y*=-1.0f; }
60 inline void rotate( const double &rad )
61 { 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;}
63 inline void rotateDeg( const double ° )
64 { double newX, newY, rad=deg*3.14159f/180.0f;
65 newX= m_x*cos(rad) - m_y*sin(rad); newY=m_x*sin(rad)+m_y*cos(rad); m_x=newX; m_y=newY;}
67 inline void translate( const double &tx, const double &ty )
68 { m_x += tx; m_y += ty; }
70 inline double angle( const TKVec2 &v )
71 { return acos( (this->dotProduct(v)) / (this->magnitude() * v.magnitude()) ); }
73 inline double x() { return m_x; }
74 inline double y() { return m_y; }
76 inline void setX( const double &_x) { m_x=_x; }
77 inline void setY( const double &_y) { m_y=_y; }
79 inline void set( const double &_x, const double &_y) {m_x=_x; m_y=_y;}
82inline double shortestDistance( double sx, double sy, double ex, double ey, double px, double py )
84 TKVec2 u(sx-ex, sy-ey);
85 TKVec2 pq(sx-px, sy-py);
87 double magTop = fabs( pq.crossProduct(u) );
88 double magU = u.magnitude();
99inline bool collisionLine( double sx, double sy, double ex, double ey, double px, double py, double threshold )
101 double minx, miny, maxx, maxy;
135 if( shortestDistance( sx, sy, ex, ey, px, py ) <= threshold )
|