%plane_line_intersect computes the intersection of a plane and a segment (or a straight line)
% 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
% 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]);
Nassim Khaled (2021). straight line and plane intersection (https://www.mathworks.com/matlabcentral/fileexchange/17751-straight-line-and-plane-intersection), MATLAB Central File Exchange. Retrieved .
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;
plot3(I(:,1),I(:,2),I(:,3),'.r'); hold on;
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?
I think you should check whether P0 is coincide with P1.
Thanks a lot, very helpful function and very well implemented!
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).
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!!
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?
Find the treasures in MATLAB Central and discover how the community can help you!Start Hunting!