Hi,

I've been trying to make a function that finds the distance between two lines (stored as a start point and an end point) in a 2-dimensional space, but I can't seem to be able to find a way of doing it. I managed to figure out a method of getting the distance between a point and a line but when I turn that point into a line I just can't figure it out.

I tried searching both on google and here but the closest thing I could find was the distance between two skew lines in 3d space.

I'll include the code I ended up with for my point-line function (mostly to "prove" that I actually tried before running in here asking for help), it's probably not the best way of doing it but at least it works. I tried modifying this function to get it to support 2 lines instead and also tried starting over, to no avail.

I don't necessarily need the solution, just a nudge in the right direction.

Code:`float linePointDistance( Vector3d l1, Vector3d l2, Vector3d p )`

{

// Get the distances between the start and end point on the line

float dx = l2.x - l1.x;

float dy = l2.y - l1.y;

// Get t, which represents how far along the line we have to move to

// get to the closest point. l1 + t[dx,dy] = closest.

// (found this by setting the derivative of the distance equal to 0)

float t = -((l1.x-p.x)*dx + (l1.y-p.y)*dy)

/ (dx*dx + dy*dy);

// If t isn't >= 0 and <= 1 then the closest point is outside of the

// line, we therefore use the end or start point instead.

Vector3d usevector;

if( t > 1 ) usevector = l2;

else if( t < 0 ) usevector = l1;

else usevector = l1+((l2-l1)*t);

return (usevector-p).magnitude();

}