У нас есть 2 строки.Как мы можем получить точку, где эти 2 линии пересекаются с JavaScript? - PullRequest
0 голосов
/ 25 февраля 2019

1-я строка A (x1, y1) - начальная точка, а B (x2, y2) - конечная точка. 2-я линия A (x2, y2) - начальная точка, а B (x2, y2) - конечная точка. Мне нужна функция, котораяможет вернуть нам точку, где эти 2 линии будут пересекаться.Заранее спасибо

1 Ответ

0 голосов
/ 25 февраля 2019

Вот хорошее прочтение: Как проверить, пересекаются ли два заданных отрезка

, и вот способ сделать это с помощью JavaScript:

var Point = function(valA, valB) {
  this.x = valA;
  this.y = valB;
};

function lineIntersection(pointA, pointB, pointC, pointD) {
  var z1 = (pointA.x - pointB.x);
  var z2 = (pointC.x - pointD.x);
  var z3 = (pointA.y - pointB.y);
  var z4 = (pointC.y - pointD.y);
  var dist = z1 * z4 - z3 * z2;
  if (dist == 0) {
    return null;
  }
  var tempA = (pointA.x * pointB.y - pointA.y * pointB.x);
  var tempB = (pointC.x * pointD.y - pointC.y * pointD.x);
  var xCoor = (tempA * z2 - z1 * tempB) / dist;
  var yCoor = (tempA * z4 - z3 * tempB) / dist;

  if (xCoor < Math.min(pointA.x, pointB.x) || xCoor > Math.max(pointA.x, pointB.x) ||
    xCoor < Math.min(pointC.x, pointD.x) || xCoor > Math.max(pointC.x, pointD.x)) {
    return null;
  }
  if (yCoor < Math.min(pointA.y, pointB.y) || yCoor > Math.max(pointA.y, pointB.y) ||
    yCoor < Math.min(pointC.y, pointD.y) || yCoor > Math.max(pointC.y, pointD.y)) {
    return null;
  }

  return new Point(xCoor, yCoor);
}

console.log(lineIntersection(new Point(40, 0), new Point(180, 140), new Point(60, 120), new Point(180, 40)));
...