#pragma once #include // For abs, sqrt #include "Point.h" class Line { private: Point m_from, m_to, m_to_from_origin; public: Line(Point from, Point to) : m_from(from), m_to(to), m_to_from_origin(to - from) {} Point from() const { return m_from; } Point to() const { return m_to; } // Return true if the given point is to the right of this line. // False is also returned if the point is directly on the line. bool is_point_right(Point other) const { other -= from(); // Cross product greater than zero? if (m_to_from_origin.x() * other.y() - m_to_from_origin.y() * other.x() > 0) { return true; } else { return false; } } float distance_to(Point other) const { float a = from().y() - to().y(); float b = to().x() - from().x(); float c = from().x() * to().y() - to().x() * from().y(); return abs(a * other.x() + b * other.y() + c) / sqrt(a * a + b * b); } };