HOME

## Line segment intersection formula

Given the lines segment a and b.

`````` line a
(ax0, ay0)--------(ax1, ay1)

line b
(bx0, by0)--------(bx1, by1)
``````

And the parametric equation for line a and b.

``````
ax(ta) = ax0 + (ax1 - ax0) * ta;
ay(ta) = ay0 + (ay1 - ay0) * ta;

bx(tb) = bx0 + (bx1 - bx0) * tb;
by(tb) = by0 + (by1 - by0) * tb;

``````

Renaming ``` (ax1 - ax0) for adx (ay1 - ay0) for ady (bx1 - bx0) for bdx (by1 - by0) for bdy ```

``````  ax(ta) = ax0 + adx * ta;
ay(ta) = ay0 + ady * ta;

bx(tb) = bx0 + bdx * tb;
by(tb) = by0 + bdy * tb;
``````

Making

``````  ax(ta) = bx(tb);
ay(ta) = by(tb);
``````
``````  ax0 + adx * ta = bx0 + bdx * tb;  #1
ay0 + ady * ta = by0 + bdy * tb;  #2
``````

Isolating ta in #1 ``` (bx0 + (bdx*tb) - ax0) ta = ---------------------- adx ```

Now replace ta in #2 ``` ady*(bx0 + (bdx*tb) - ax0) ay0 + -------------------------- = by0 + (bdy*tb) adx ```

Isolation tb

``````         ((adx*(by0 - ay0)) + (ady*(ax0 - bx0)))
tb = ---------------------------------------
``````

Now we have everthing.

The lines will intercept if 0 >= ta <= 1 and 0 >= tb <= 1

``````
var adx = (ax1 - ax0);
var ady = (ay1 - ay0);

var bdx = (bx1 - bx0);
var bdy = (by1 - by0);

{
//no intersection
}