Let’s define line segment \(l\) and ray \(r\) as follows: $$ l: a + u\vec{s},\space\space r: o + t\vec{d} $$ where $$ \vec{s} = b - a,\space\space 0\le u \le 1,\space\space 0 \le t $$ Define $$ \vec{s{\prime}} = (s_y, -s_x),\space\space \vec{d{\prime}} = (d_y, -d_x) $$ \(s . s{\prime} = 0\). This geometric perpendicularity allows for nice algebric cancellations next.
Dot product is commutative and is distributive over vector addition. We find \(t\): $$ a + u\vec{s} = o + t\vec{d} $$ $$ (a + u\vec{s}) . \vec{s{\prime}} = (o + t\vec{d}) . \vec{s{\prime}} $$ $$ a . \vec{s{\prime}} + u(s . \vec{s{\prime}}) = (o + t\vec{d}) . \vec{s{\prime}} $$ $$ a . \vec{s{\prime}} = (o + t\vec{d}) . \vec{s{\prime}} $$ $$ t = {\vec{s{\prime}} . (a - o) \over \vec{d} . \vec{s{\prime}}} $$ In a similar way we find \(u\): $$ u = {\vec{d{\prime}} . (o - a) \over \vec{s} . \vec{d{\prime}}} $$ To simplify things let’s define the following operation for vectors \(v\) and \(w\): $$ v \times w = v_x w_y - v_y w_x $$ We can see that: $$ \vec{d} . \vec{s{\prime}} = \vec{d} \times \vec{s}, \space\space\space\space \vec{s{\prime}} . (a - o) = (a - o) \times \vec{s} $$ $$ \vec{s} . \vec{d{\prime}} = \vec{s} \times \vec{d}, \space\space\space\space \vec{d{\prime}} . (o - a) = (o - a) \times \vec{d} $$ Therefore: $$ t = {(a - o) \times \vec{s} \over \vec{d} \times \vec{s}}, \space\space\space\space u = {(o - a) \times \vec{d} \over \vec{s} \times \vec{d}} $$ since $$ v \times w = -w \times v $$ $$ t = {(a - o) \times \vec{s} \over \vec{d} \times \vec{s}}, \space\space\space\space u = {(a - o) \times \vec{d} \over \vec{d} \times \vec{s}} $$ A solution (intersection) exists only if \(\vec{d} \times \vec{s} \ne 0\), \(t \ge 0 \) and \( 0\le u \le 1\).