Path: news.mathworks.com!not-for-mail
From: <HIDDEN>
Newsgroups: comp.soft-sys.matlab
Subject: Re: distance between point and line segment
Date: Wed, 2 Apr 2008 15:29:07 +0000 (UTC)
Organization: AGCO
Lines: 114
Message-ID: <ft08o3$pg8$1@fred.mathworks.com>
References: <4a2f4ac1-c21e-4ebf-8530-352f15098a47@41g2000hsc.googlegroups.com> <d122bed7-41d5-446a-8b0a-e786bdb938fb@a22g2000hsc.googlegroups.com> <fsrkeb$os2$1@fred.mathworks.com> <fsrvq5$5cu$1@fred.mathworks.com>
Reply-To: <HIDDEN>
NNTP-Posting-Host: webapp-03-blr.mathworks.com
Content-Type: text/plain; charset="ISO-8859-1"
Content-Transfer-Encoding: 8bit
X-Trace: fred.mathworks.com 1207150147 26120 172.30.248.38 (2 Apr 2008 15:29:07 GMT)
X-Complaints-To: news@mathworks.com
NNTP-Posting-Date: Wed, 2 Apr 2008 15:29:07 +0000 (UTC)
X-Newsreader: MATLAB Central Newsreader 1073303
Xref: news.mathworks.com comp.soft-sys.matlab:460583




Thanks Roger.
In the realm of GPS, latiudes and longitudes, the 
difference in the result is quite significant in terms of 
acuracy of distances in meters and centimeter.



Chuk

"Roger Stafford" 
<ellieandrogerxyzzy@mindspring.com.invalid> wrote in 
message <fsrvq5$5cu$1@fred.mathworks.com>...
> "Chukwuemeka Igwe" <chukigwe@yahoo.com> wrote in message 
<fsrkeb
> $os2$1@fred.mathworks.com>...
> > Yes thanks for your replies.
> > 
> > However if I  use the cross product and assume that 
the z 
> > axis  have zero components  I actually get some 
reuslts 
> > which are more than an order of magnitude bigger thant 
the 
> > case when I use the determinant to solve for two 
> > dimensions.
> > Please what is happening to cause such a difference in 
> > results.
> > 
> > Thanks 
> > 
> > Chuk
> --------
>   First of all, Chuk, let me apologize for the errors in 
the formulas I gave back 
> on Feb. 19, and for not noticing them this past 
Saturday.  I cannot imagine 
> what I was thinking of.  The 3D formula should read:
> 
>  d = norm(cross(Q2-Q1,P-Q1))/norm(Q2-Q1);
> 
> and the 2D versions ought to read:
> 
>  d = abs(det([Q2-Q1,P-Q1]))/norm(Q2-Q1); % for col. 
vectors
>  d = abs(det([Q2-Q1;P-Q1]))/norm(Q2-Q1); % for row 
vectors.
> 
>   In this corrected form the 3D formula is identical to 
the formula (9) of the 
> website:
> 
>  http://mathworld.wolfram.com/Point-LineDistance3-
Dimensional.html
> 
> which ImageAnalyst mentioned.
> 
>   A note of caution!  Formula (4) at that website, which 
ImageAnalyst also 
> mentioned, while being mathematically equivalent to its 
formula (9), is not as 
> computationally robust as (9) in cases where the 
triangle PQ1Q2 is nearly flat, 
> that is, where it has two angles nearly zero and one 
nearly pi.
> 
>   Here is a concrete example of such a loss of accuracy:
> 
>  Q1 = [0;0;0]; Q2 = [2;4;6]; P = 
[1.00001;1.99998;3.00001];
> 
> This point P will lie very close to the line Q1Q2 
(actually very near its 
> midpoint.)  We can then compare three different ways of 
computing the 
> orthogonal distance.  First, use formula (4)
> 
>  d1 = sqrt(norm(Q2-Q1)^2*norm(P-Q1)^2-dot(Q2-Q1,P-Q1)
^2)/norm(Q2-
> Q1);
> 
> Then use my cross product formula which is also formula 
(9):
> 
>  d2 = norm(cross(Q2-Q1,P-Q1))/norm(Q2-Q1);
> 
> and finally, as a check, directly compute the nearest 
point, R, on line Q1Q2 
> and then compute its distance from P:
> 
>  R = (dot(P-Q2,Q1-Q2)*Q1+dot(P-Q1,Q2-Q1)*Q2)/dot(Q2-
Q1,Q2-Q1);
>  d3 = norm(R-P);
> 
> Now compare the answers using 'format long':
> 
>  [d1;d2;d3]
>  ans =
> 
>    1.0e-04 *
> 
>    0.24494825921622
>    0.24494897427992
>    0.24494897427992
> 
> Formula (4) is off in the 7th place while the other two 
methods preserve 
> normal matlab accuracy.
> 
> Roger Stafford
> 
>