Hi, i think that this algorithm can be improved by looking for the x coordinate of the intersection if it exist (if the lines aren't parallels). Then you need no more than a test to see if it belongs to one of the lines. I would give something like:

```bool vec2LinesIntersect ( Vector2 l1s, Vector2 l1f, Vector2 l2s, Vector2 l2f )
{
// the two lines are defined by the following equations
// (L1) y = m1*x + p1
// (L2) y = m2*x + p2

Real m1 = (l1f.y - l1s.y) / (l1f.x - l1s.x),
m2 = (l2f.y - l2s.y) / (l2f.x - l2s.x);

if ( m1 == m2)
// the two lines are parallels
return false;

// now calculates the x coordinate of the intersection point (which exist m1 != m2)
Real interX = ( (l2s.y - m2*l1s.x) - (l1s.y - m1*l1s.x) ) / (m1 - m2);

// the intercection belongs to the first line so a real k such as
// the vector [l1s,l1f] equals k*[l1s,inter] exists
if ( interX == l1s.x )
// the intersection point is the l1s point
return true;

Real k = (l1f.x - l1s.x) / (interX - l1s.x);

// now verify if the intersection belong to the line area
return ( k >= 0 && k<=1 );
}```

## Proposal doesn't work

1. m1 and m2 can be invalid due to division by zero problems.

2. interX doesn't always fit

3. probably some more (not sure though)

33 online users