#include #include "vector.h" // this and vector.h by Ryan Cummings // Creates a vector with between two points Vector::Vector(const TQPoint &source, const TQPoint &dest) { _magnitude = sqrt(pow(source.x() - dest.x(), 2) + pow(source.y() - dest.y(), 2)); _direction = atan2(source.y() - dest.y(), source.x() - dest.x()); } // Creates a vector with between two points Vector::Vector(const Point &source, const Point &dest) { _magnitude = sqrt(pow(source.x - dest.x, 2) + pow(source.y - dest.y, 2)); _direction = atan2(source.y - dest.y, source.x - dest.x); } // Creates an empty Vector Vector::Vector() { _magnitude = 0.0; _direction = 0.0; } // Copy another Vector object Vector::Vector(const Vector& v) { _magnitude = v._magnitude; _direction = v._direction; } // Set the X component void Vector::setComponentX(double x) { setComponents(x, componentY()); } // Set the Y component void Vector::setComponentY(double y) { setComponents(componentX(), y); } // Operations with another Vector performs vector math Vector Vector::operator+(const Vector& v) { double x = componentX() + v.componentX(); double y = componentY() + v.componentY(); return Vector(sqrt((x * x) + (y * y)), atan2(y, x)); } Vector Vector::operator-(const Vector& v) { double x = componentX() - v.componentX(); double y = componentY() - v.componentY(); return Vector(sqrt((x * x) + (y * y)), atan2(y, x)); } Vector& Vector::operator+=(const Vector& v) { setComponents(componentX() + v.componentX(), componentY() + v.componentY()); return *this; } Vector& Vector::operator-=(const Vector& v) { setComponents(componentX() - v.componentX(), componentY() - v.componentY()); return *this; } double Vector::operator*(const Vector& v) { return ((componentX() * v.componentX()) + (componentY() * v.componentY())); } // Operations with a single double value affects the magnitude Vector& Vector::operator+= (double m) { _magnitude += m; return *this; } Vector& Vector::operator-= (double m) { _magnitude -= m; return *this; } Vector& Vector::operator*= (double m) { _magnitude *= m; return *this; } Vector& Vector::operator/= (double m) { _magnitude /= m; return *this; } // Sets both components at once (the only way to do it efficiently) void Vector::setComponents(double x, double y) { _direction = atan2(y, x); _magnitude = sqrt((x * x) + (y * y)); } void debugPoint(const TQString &text, const Point &p) { kdDebug(12007) << text << " (" << p.x << ", " << p.y << ")" << endl; } void debugVector(const TQString &text, const Vector &p) { // debug degrees kdDebug(12007) << text << " (magnitude: " << p.magnitude() << ", direction: " << p.direction() << ", direction (deg): " << (360L / (2L * M_PI)) * p.direction() << ")" << endl; }