File Exchange

image thumbnail

Fast Line Segment Intersection

version 1.1 (3.5 KB) by

Finds the pairwise intersection points between line segments in 2D Cartesian space.

4.90909
11 Ratings

47 Downloads

Updated

View License

OUT = LINESEGMENTINTERSECT(XY1,XY2) generates intersection analysis between the line segment sets given in XY1 and XY2. Code can handle coincident and parallel lines.

The main emphasis is on speed. The code is fully vectorized and it runs pretty fast (orders of magnitude) compared to some of the previous postings.

Comments and Ratings (12)

Liwei Dai

Just checked your code, it seems that the entries in out.intMatrixX, out.intMatrixY are not correct. Many of the entries are filled with zeros which should be NaN if there is no intersection between two line segments, right?
Another thing is the link to the algorithm behind this just doesn't work anymore, could you please give me another link? I felt it's pretty awesome to learn this. :)

M. F.

M. F. (view profile)

Sam Murthy

Please consider changing the parallelism check to abs(denominator) < some small number. This will catch lines that are parallel to within some threshold.

Matthew Bays

Ulrik

Ulrik (view profile)

I've found your function very useful, thanks! However I recently wanted to squeeze out some additional performance and ended up rewriting the thing in MEX C code, which can be compiled and run from MATLAB... I posted my code at http://www.mathworks.it/matlabcentral/fileexchange/35492-segments-intersection-test-functions .

Brandon

piet fue

Maher HAMDI

Alex

Alex (view profile)

Quick and effective. However, I believe there is a typo in the documentation:

'intNormalizedDistance2To1' : N1xN2 matrix where the (i,j) entry is the normalized distance from the start point of line segment XY1(j,:) to the intersection point with XY2(i,:).

This description is the same as intNormalizedDistance1To2 except that i and j are swapped in the description, and that doesn't really make any sense. I believe XY1 and XY2 should also be swapped.

Alex

Alex (view profile)

Fabio Pinna

It worked fine and fast for me! Good work!
Good vectorization.
The complex output prevent further vectorization but it is already fast enough

Updates

1.1

Changed the input parameters and the output structure. Now the analysis can be done between two sets of line segments. Analysis also provides more information about the intersections.

Please see the CHANGELOG in the comments.

MATLAB Release
MATLAB 7.9 (R2009b)

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video