## c++ check if 2d line segments cross

very simple, posting it here is more or less needless. you can check which side of an infinite line a point is on using the cross product. so check to see if the points of segment A are on different sides of the line defined by segment B. if they are, check to see if the points of segment B are on different sides of the line defined by segment A.

this alg isn’t particularly concerned about if the segments are on the same line 🙂

bool segmentscross(point2 point00, point2 point01, point2 point10, point2 point11) {

bool check0 = 0;

bool check1 = 0;

point2 param00 = point00 – point10; point2 param01 = point01 – point10; point2 param11 = point11 – point10;

if (param00.cross(param11) > 0) check0 = 1;

if (param01.cross(param11) > 0) check1 = 1;

if (check0 == check1) return 0;

check0 = check1 = 0;

param00 = point10 – point00; param01 = point11 – point00; param11 = point01 – point00;

if (param00.cross(param11) > 0) check0 = 1;

if (param01.cross(param11) > 0) check1 = 1;

if (check0 == check1) return 0;

return 1;

}

## Leave a Reply