raw math

Given two lines \(L_1\) and \(L_2\), how is it possible to calculate the point \(P\) of intersection of these two objects? Like always, set the equations of the objects involved equal and solve for the parameters. For the two lines this means:

\[L_1(s) = \vec{v_1}+s\cdot\vec{w_1}=\left(\begin{array}{c} x_1\\ y_1 \end{array}\right)+s\cdot\left(\begin{array}{c} a_1\\ b_1 \end{array}\right)\]

\[L_2(t) = \vec{v_2}+t\cdot\vec{w_2}=\left(\begin{array}{c} x_2\\ y_2 \end{array}\right)+t\cdot\left(\begin{array}{c} a_2\\ b_2 \end{array}\right)\]

Setting the two equations equal yields:

\[\begin{array}{rrl} & \vec{v_1}+s\cdot \vec{w_1} = & \vec{v_2}+t\cdot \vec{w_2}\\ \Leftrightarrow & s\cdot \vec{w_1}-t\cdot \vec{w_2}= & \vec{v_2}-\vec{v_1}\\ \Leftrightarrow & \left(\begin{array}{cc} \vec{w_1} & -\vec{w_2} \end{array}\right)\cdot\left(\begin{array}{c} s\\ t \end{array}\right)= & \vec{v_2}-\vec{v_1}\\ \Leftrightarrow & \left(\begin{array}{c} s\\ t \end{array}\right)= & \left(\begin{array}{cc} \vec{w_1} & -\vec{w_2} \end{array}\right)^{-1}\cdot\left(\begin{array}{c} \vec{v_2}-\vec{v_1}\\ \end{array}\right)\\ & = & \frac{1}{a_1\cdot b_2 - a_2\cdot b_1}\left(\begin{array}{cc} b_2 & -a_2\\ b_1 & -a_1 \end{array}\right)\cdot\left(\begin{array}{c} x_2-x_1\\ y_2-y_1 \end{array}\right)\\ \end{array}\]

As \(L_1\) with \(s\) will lead to the same result as \(L_2\) with \(t\), we can decide for one:

\[s' = \frac{b_2\cdot (x_2 - x_1) - a_2 \cdot (y_2 - y_1) }{a_1\cdot b_2 - a_2\cdot b_1}\]

Plugging \(s'\) into the original equation of \(L_1\) gives us the desired point \(P\):

\[P =L_1(s') = \vec{v_1}+s'\cdot\vec{w_1}\]

Or as a copy and paste solution:

var intersection = function(v1, w1, v2, w2) {

  var det = w1[0] * w2[1] - w2[0] * w1[1];
  if (det === 0) {
    return null;
  }
  var s = (w2[1] * (v2[0] - v1[0]) - w2[0] * (v2[1] - v1[1])) / det;
  return [
     v1[0] + s * w1[0],
     v1[1] + s * w1[1]];
};