Testwiki:Reference desk/Archives/Mathematics/2024 September 6

From testwiki
Revision as of 01:58, 22 September 2024 by imported>Scsbot (edited by robot: archiving September 6)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Template:Error:not substituted

{| width = "100%"

|- ! colspan="3" align="center" | Mathematics desk |- ! width="20%" align="left" | < September 5 ! width="25%" align="center"|<< Aug | September | Oct >> ! width="20%" align="right" |Current desk > |}

Welcome to the Wikipedia Mathematics Reference Desk Archives
The page you are currently viewing is a transcluded archive page. While you can leave answers for any questions shown below, please ask new questions on one of the current reference desk pages.


September 6

Distance to a line segment

I am unsure if this is better in Maths or in Computing, but I've chosen Maths.

In a standard planar (x,y) world, a line segment is defined by two endpoints P1=(x1,y1) and P2=(x2,y2).

A third point (anywhere, not necessarily off the line segment extension) is A=(xa,ya).

It is easy to calculate the distance from A to P1 and from A to P2. Sometimes one will be the answer for which part of the line segment is closest to A.

But if A is "perpendicularly within P1~P2", then the closest part of P1~P2 will be somewhere on that line segment.

Is there a standard algorithm for determining the coordinates of the closest part of the line segment to A?

--SGBailey (talk) 22:59, 6 September 2024 (UTC)

I don't know if it's "standard", but it's not too hard to work out. Let D be the square distance between P1 and P2, so D = (x2-x1)2 + (y2-y1)2. Let E be twice the (signed) area of the triangle P1P2A, so E = x1y2 - x1ya - x2y1 + x2ya + xay1 - xay2. Note that if D=0 then the result is undefined, if E=0 then the result is just A, if x1=x2 then y=ya, and if y1=y2 then x=xa; these facts can be used as checks. Then, using Cramer's rule and a few tricks I'm pretty sure I wouldn't be able to fully explain, I get x = xa + (y2-y1)E/D, y = ya - (x2-x1)E/D. Geometrically, you know that the vector PA is perpendicular to P1P2, which means P can be written A + mP1P2, where P1P2 is normal to P1P2; we can take this as (-(y2-y1), x2-x1). You can then solve for m by finding the area of the triangle P1P2A in two ways. Note that if you just want the distance to the line it's a lot easier, just divide twice the area of the triangle, |E|, by the length of the segment P1P2. I'm assuming here that you want the closest point to the line P1P2, since there's no guarantee that the result P will be between P1 and P2, and if not it technically won't be on the segment P1P2. --RDBury (talk) 05:51, 7 September 2024 (UTC)
Here is an analytic approach. The line through the distinct points P1 and P2 can be parametrically represented by
(x,y)=(λx1+(1λ)x2,λy1+(1λ)y2).
(The usual equation for the line can be obtained by eliminating λ from this equation.)
The vector connecting a generic point (x,y) on the line to a point (xA,yA) not on the line is then given by
(λx1+(1λ)x2xA,λy1+(1λ)y2yA).
The length of this vector is minimized when its square is, which is given by the quantity
f(λ)=(λx1+(1λ)x2xA)2+(λy1+(1λ)y2yA)2.
Now solve ddλf(λ)=0 for λ and substitute the result in the parametric equation and you have the coordinates of the nearest point. Note: if A is on the line, this procedure may lead to division by zero.
(If done by hand, it helps to first rewrite the parametric equation as
(x,y)=(λ(x1x2)+x2,λ(y1y2)+y2).
Also, alternatively, to avoid differentiation, rewrite the equation for f(λ) in the form f(λ)=aλ2+bλ+c. The value of λ minimizing f(λ) is then given by λ=b2a.)
 --Lambiam 06:47, 7 September 2024 (UTC)
One advantage to this method is that it works just as well in multiple dimensions. A more general version is: Given k points P1, ... Pk, and l points Q1, ... Ql in Rn, with k+l≤n-1, find a formula for the points P and Q where P is on the affine space determined by the Pi's, Q is on the affine space determined by the Qi's, and P and Q are a close as possible to each other. It might be easier if the affine planes were given by systems of equations instead of as affine hulls. --RDBury (talk) 07:31, 7 September 2024 (UTC)
PS. It might be worth mentioning that when you solve for lambda, the resulting point P will be the one where AP⊥P1P2, so you're basically just proving what was assumed in the original question. This holds for any smooth curve and even smooth surfaces; if P is the closest point to A on a smooth curve/surface, then PA is perpendicular to the tangent line/plane at P. --RDBury (talk) 01:53, 9 September 2024 (UTC)

Thanks. That is probably resolved, but I need to study the replies. -- SGBailey (talk) 18:02, 8 September 2024 (UTC)