# all files / bpmn-js/lib/features/modeling/behavior/util/ LineIntersect.js

100% Statements 8/8
100% Branches 2/2
100% Functions 1/1
100% Lines 8/8

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35

    13287×

    13287×
    6217×

    7070×
    7070×
    7070×

    7070×

    7070×

     /**
     * Returns the intersection between two line segments a and b.
     *
     * @param {Point} l1s
     * @param {Point} l1e
     * @param {Point} l2s
     * @param {Point} l2e
     *
     * @return {Point}
     */
    export default function lineIntersect(l1s, l1e, l2s, l2e) {
      // if the lines intersect, the result contains the x and y of the
      // intersection (treating the lines as infinite) and booleans for
      // whether line segment 1 or line segment 2 contain the point
      var denominator, a, b, c, numerator;

      denominator = ((l2e.y - l2s.y) * (l1e.x - l1s.x)) - ((l2e.x - l2s.x) * (l1e.y - l1s.y));

      if (denominator == 0) {
        return null;
      }

      a = l1s.y - l2s.y;
      b = l1s.x - l2s.x;
      numerator = ((l2e.x - l2s.x) * a) - ((l2e.y - l2s.y) * b);

      c = numerator / denominator;

      // if we cast these lines infinitely in
      // both directions, they intersect here
      return {
        x: Math.round(l1s.x + (c * (l1e.x - l1s.x))),
        y: Math.round(l1s.y + (c * (l1e.y - l1s.y)))
      };
    }