Source: helper/getProjectedPoint.js

  1. const dotProduct = (e1, e2) => {
  2. return e1[0] * e2[0] + e1[1] * e2[1];
  3. };
  4. /**
  5. * Get projected point P' of P on line e1. Faster version.
  6. * @return projected point p.
  7. * This code comes from section 5 of http://www.sunshine2k.de/coding/java/PointOnLine/PointOnLine.html.
  8. * The dotProduct function had a bug in the html page. It's fixed here.
  9. */
  10. const getProjectedPoint = (p, v1, v2) => {
  11. // get dot product of e1, e2
  12. const e1 = [v2[0] - v1[0], v2[1] - v1[1]];
  13. const e2 = [p[0] - v1[0], p[1] - v1[1]];
  14. const valDp = dotProduct(e1, e2);
  15. // get squared length of e1
  16. const len2 = e1[0] * e1[0] + e1[1] * e1[1];
  17. const res = [v1[0] + (valDp * e1[0]) / len2, v1[1] + (valDp * e1[1]) / len2];
  18. return res;
  19. };
  20. export default getProjectedPoint;