# 推導兩條線相交的算法
$$
line\_a\ 由\ (u_a, u_a + v_a)\ 構成,而\ p_a = u_a + sv_a \\
line\_b\ 由\ (u_b, u_b + v_b)\ 構成,而\ p_b = u_b + tv_b \\
其中\ u, v, p\ 都是\ 2d\ vector,且\ s, t \in [0, 1] \\
如果\ line\_a\ 與\ line\_b\ 相交的話,則 \\
p_a = p_b \\
\Rightarrow u_a + sv_a = u_b + tv_b \\
\Rightarrow u_a - u_b = -sv_a + tv_b \\
\Rightarrow
\begin{vmatrix}
u_{ax} - u_{bx} \\
u_{ay} - u_{by}
\end{vmatrix}
= -s
\begin{vmatrix}
v_{ax} \\
v_{ay}
\end{vmatrix}
+ t
\begin{vmatrix}
v_{bx} \\
v_{by}
\end{vmatrix} \\
\Rightarrow
\begin{vmatrix}
\Delta u_x \\
\Delta u_y
\end{vmatrix}
=
\begin{vmatrix}
v_{ax} & v_{bx} \\
v_{ay} & v_{by}
\end{vmatrix}
\begin{vmatrix}
-s \\
t
\end{vmatrix}
= \mathbf{M}
\begin{vmatrix}
-s \\
t
\end{vmatrix} \\
如果矩陣\ \mathbf{M}\ 是可逆的,則\ s, t\ 有解,即 \\
\begin{vmatrix}
-s \\
t
\end{vmatrix} = \mathbf{M}^{-1}
\begin{vmatrix}
\Delta u_x \\
\Delta u_y
\end{vmatrix} \\
令\ d = \det(\mathbf{M}) = v_{ax}v_{by} - v_{bx}v_{ay} \\
則\ \mathbf{M}^{-1} = \frac{1}{d}
\begin{vmatrix}
v_{by} & -v_{bx} \\
-v_{ay} & v_{ax}
\end{vmatrix} \\
所以\ \begin{vmatrix}
-s \\
t
\end{vmatrix} =
\frac{1}{d}
\begin{vmatrix}
v_{by} & -v_{bx} \\
-v_{ay} & v_{ax}
\end{vmatrix}
\begin{vmatrix}
\Delta u_x \\
\Delta u_y
\end{vmatrix} \\
於是可以得到\ s, t\ 的算式 \\
s = \frac{1}{d}(-v_{by}\Delta u_x + v_{bx}\Delta u_y) \\
t = \frac{1}{d}(-v_{ay}\Delta u_x + v_{ax}\Delta u_y) \\
如果\ d\ 為\ 0\ 代表這兩條線平行,\\
如果\ d\ 不為\ 0\ 且\ s, t \in [0, 1]\ 則兩條線相交,\\
其中\ s, t\ 可以代回對應的算式求交點座標。
$$