File Exchange

image thumbnail

straight line and plane intersection

version (1.75 KB) by Nassim Khaled
plane_line_intersect computes the intersection of a plane and a segment(or


Updated 27 Nov 2007

View License

%plane_line_intersect computes the intersection of a plane and a segment (or a straight line)
% Inputs:
% n: normal vector of the Plane
% V0: any point that belongs to the Plane
% P0: end point 1 of the segment P0P1
% P1: end point 2 of the segment P0P1
% I is the point of interection
% Check is an indicator:
% 0 => disjoint (no intersection)
% 1 => the plane intersects P0P1 in the unique point I
% 2 => the segment lies in the plane
% 3=>the intersection lies outside the segment P0P1
% Example:
% Determine the intersection of following the plane x+y+z+3=0 with the segment P0P1:
% The plane is represented by the normal vector n=[1 1 1]
% and an arbitrary point that lies on the plane, ex: V0=[1 1 -5]
% The segment is represented by the following two points
% P0=[-5 1 -1]
%P1=[1 2 3]
% [I,check]=plane_line_intersect([1 1 1],[1 1 -5],[-5 1 -1],[1 2 3]);

Cite As

Nassim Khaled (2021). straight line and plane intersection (, MATLAB Central File Exchange. Retrieved .

Comments and Ratings (24)



Shehryar Ashraf

How would I extend this to calculate intersection of multiple lines with multiple planes. I have done that, but with nested for loops, i wish to vectorize my problem, how would I go about it?


correction, i just relaised this script only tests if the line is interesecting the infiinite plane, not the bounded plane. - unfortunately i cant delte the previous comment!


warning - there is an error in this script, but i cant find it. The following test should return the check = 3 but instead returns check = 1.

A =[ -6.8756 9.9090 10.0000],B =[ -6.0096 10.4090 10.0000],C =[ -6.0096 10.4090 11.0000],D=[ -6.8756 9.9090 11.0000];
P0 =[ 1.3978 40.0000 6.1149],P1 =[ 4.3943 -4.8078 0.3551];

quad = [A; B ; C; D];
line = [P0; P1];

AB = B-A
AD = D-A

n = cross(AB,AD)/sqrt(dot(cross(AB,AD),cross(AB,AD)))

plot3(line(:,1),line(:,2),line(:,3),'.-'); hold on;
patch(quad(:,1),quad(:,2),quad(:,3), 'green');
plot3(I(:,1),I(:,2),I(:,3),'.r'); hold on;
grid on;
axis equal;

Very helpful in solving simple line and plane intersections
However, i'm having trouble implementing it to calculate intersection between a Gcode toolpath and 2 planes. That is multiple lines going through 2 planes.
Can anyone help?

Atle Aalerud

Sinéad Kearney

Lukas Hulinsky

Shugen Li

very helpful.

I think you should check whether P0 is coincide with P1.

Bashar Alsadik

Januka Attanayake

Vasileios Vlachakis

Thanks a lot, very helpful function and very well implemented!

Darian Viezzer

This solution works perfectly. If someone is interested, I extended it such that it calculates the intersection of multiple segments with multiple planes (no loops, but 3 dimensional matrices are used).

Alexander Heinz


James Grove



Bart Ribbens

Marwan N

thnx a lot man....i had a tough job battering my brains to get this job done....g8 work!!


I was using symbolic math toolbox earlier to solve this problem which doesnot get compiled when I use MCR. I used this code and it worked!!! Thanks so much!!

Chee Hou Kok

Dear Mr. Nassim Khaled,

Is it possible to find out whether a straight line is intersecting a rectangle using your file?

Say, I have a line made of points (0,0) and (5,5) and a rectangle of points (1,1) (3,1) (3,4) and (1,4). How do know that the line is intersecting the rectangle?

MATLAB Release Compatibility
Created with R14SP1
Compatible with any release
Platform Compatibility
Windows macOS Linux

Inspired: sliceDelaunay

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!