#ifndef __JDIRECTION2D__ #define __JDIRECTION2D__ #include #include "JGeometry2D/JAngle2D.hh" #include "JGeometry2D/JPoint2D.hh" #include "JGeometry2D/JRotation2D.hh" namespace JGEOMETRY2D { /** * Data structure for direction in two dimensions. */ class JDirection2D : public JAngle2D { public: /** * Default constructor. */ JDirection2D() : JAngle2D() {} /** * Constructor. * * \param phi phi angle [rad] */ JDirection2D(const double phi) : JAngle2D(phi) {} /** * Constructor. * * \param vector vector */ JDirection2D(JVector2D vector) : JAngle2D(atan2(vector.getY(),vector.getX())) {} /** * Constructor. * * \param x x value * \param y y value */ JDirection2D(const double x, const double y) : JAngle2D() { __phi = atan2(y,x); } /** * Transform. * * \param R matrix */ JDirection2D& transform(const JMatrix2D& R) { *this = JPoint2D(*this).transform(R); return *this; } /** * Rotate. * * \param R rotation matrix */ JDirection2D& rotate(const JRotation2D& R) { *this = JPoint2D(*this).rotate(R); return *this; } /** * Rotate back. * * \param R rotation matrix */ JDirection2D& rotate_back(const JRotation2D& R) { *this = JPoint2D(*this).rotate_back(R); return *this; } }; /** * Dot product. * * \param first JDirection2D * \param second JDirection2D * \return dot product */ inline double dot(const JDirection2D& first, const JDirection2D& second) { return first.getDX() * second.getDX() + first.getDY() * second.getDY(); } } #endif