# Intersecting Lines

Finding where two lines intersect is a pretty common task in computing.

Suppose we've got $$y_1 = 2x + 3$$ and $$y_2 = -2x - 2$$.

If we want to know where these two lines intersect, it becomes a question of where is $$y_1 = y_2$$.

We just set $$y1$$ equal to $$y2$$,

$2x + 3 = -2x - 2 \,,$

and solve for $$x$$.

After some algebra, we find that $$x = -\frac{5}{4}$$.

using Plots

x = range(-5, 5, length=1000)

M = [ 2 ; -2 ]
B = [ 3 ; -2 ]
L1(x) = M[1]*x + B[1]
L2(x) = M[2]*x + B[2]

plot(x, L1.(x))
plot!(x, L2.(x))

From the graph, we can clearly see that $$-5/4$$ is the right answer.

To solve this programmatically we put the lines into standard form,

\begin{aligned} -2x + y &= 3 \\ 2x + y &= -2\,, \end{aligned}

which we put into matrix form.

$\begin{bmatrix}-2 & 1 \\ 2 & 1 \end{bmatrix}\begin{bmatrix}x_1 \\ x_2 \end{bmatrix} = \begin{bmatrix}3 \\ -2\end{bmatrix}$
using LinearAlgebra, RowEchelon

A = [ -2 1 ; 2 1 ]
b = [3 ; -2 ]

(x1, x2) = rref([ A b ])[:, 3]

@show x1, x2
> (x1, x2) = (-1.25, 0.5)

Or by $$A^{-1}\mathbf{b}$$,

A = [ -2 1 ; 2 1 ]
b = [3 ; -2 ]

(x1, x2) = inv(A)*b

@show x1, x2
> (x1, x2) = (-1.25, 0.5)

If we don't have access to easy row reduction or can't generate the inverse of a matrix easily (which is actually really easy for $$\mathbb{R}^2$$ any way you cut it), the next best option is for us to use Cramer's Rule.

using LinearAlgebra

x1 = det([ b A[:, 2] ]) / det(A)
x2 = det([ A[:, 1] b ]) / det(A)

@show x1, x2
> (x1, x2) = (-1.25, 0.5)

And this is equivalent to,

(a1, a2) = A[:, 1]
(b1, b2) = A[:, 2]
(c1, c2) = b

d = a1*b2 - a2*b1

x1 = (c1*b2 - b1*c2)/d
x2 = (a1*c2 - c1*a2)/d

@show a1, a2
> (a1, a2) = (-2, 2)

@show b1, b2
> (b1, b2) = (1, 1)

@show c1, c2
> (c1, c2) = (3, -2)

@show x1, x2
> (x1, x2) = (-1.25, 0.5)