#include "amr_comunication/vda_5050/utils/line_common.h"

double vda_5050_utils::distanceFromPointToLine(double x0, double y0, double x1, double y1, double x2, double y2)
{
  double A = y2 - y1;
  double B = -(x2 - x1);
  double C = -A * x1 - B * y1;

  return fabs(A * x0 + B * y0 + C) / sqrt(A * A + B * B);
}

bool vda_5050_utils::isPointOnSegment(double x0, double y0, double x1, double y1, double x2, double y2, const double tolerance)
{
  double crossProduct = distanceFromPointToLine(x0,  y0, x1, y1, x2, y2);
  if (fabs(crossProduct) > fabs(tolerance)) 
    return false;

  // Kiểm tra tọa độ của P có nằm giữa A và B không
  if (x0 >= std::min(x1, x2) && x0 <= std::max(x1, x2) &&
      y0 >= std::min(y1, y2) && y0 <= std::max(y1, y2))
  {
    return true;
  }

  return false;
}