Sunday, September 11, 2016

c++ - How to determine the point of intersection of two lines?




I have two lines say P1( 0, -1, 0, -1 ) and P2( -1, 0, 0, -1 ). Since I'm working in 2D, there is no Z component. The x,y,z components are normals and the w component is the distance from origin. I am not given the origin or any points on the line.


What method should I use to programmatically determine the point of intersection for these two lines?



Answer



This is a plane intersection problem. You have two plane definitions in the point-normal form. The normal is given, and the point is the distance value w multiplied by the normal.


Wikipedia says:



a point P with position vector r is in the plane if and only if the vector drawn from P_0 to P is perpendicular to (normal vector) n.



(P_0 is your plane's point, n is its normal)


If two vectors are perpendicular, their dot product is zero. Your solution is point P. So you have this equation twice, once for each plane:



n.x * (P.x - P_0.x) + n.y * (P.y - P_0.y) + n.z * (P.z - P_0.z) = 0;

So that leaves you with 3 unknowns and two equations. But lucky you, you happen to know that P.z is zero. Solve the remaining portion of the system of equations and you are done.


No comments:

Post a Comment

Simple past, Present perfect Past perfect

Can you tell me which form of the following sentences is the correct one please? Imagine two friends discussing the gym... I was in a good s...