2011-02-01 96 views
8

私は3D点PとAとBで定義された線分を持っています(Aは線分の始点、Bは終点です)。3D点から線分までの距離を求める

私はPと線ABの間の最短距離を計算したいと思います。

無限の線との距離を計算するのは簡単で、Wolfram Mathworldの解決策でしたが、これを実装しましたが、これを有限長の線に対して行う必要があります。

多くの人を見回した後、私はこれを3dで信頼できる解決策に見出すことができませんでした。

浮動小数点数x、y、zを含む構造体を使用して、C++で内積、外積、大きさなどを計算するアルゴリズムを実装しました。

擬似コード、リンク、またはコードは、これに対応する言語はほとんどありません。

+0

ここにあなたが持っていますMathematicaの3D(または2D)のソリューションhttp://stackoverflow.com/questions/849211/shortest-distance-between-a-point-and-line-segment/4165840#4165840 –

+0

StackOverflowし、私たちが通常ここで行う3つのことを思い出させてください:1)あなたが助けを受けても、あなたの専門分野で**質問に答えるようにしてください** [[FAQを読む]](http://tinyurl.com/2vycnvr)3)良いQ&Aを見たら、システムの信頼性はその評判に基づいているので、それらを[灰色の三角形を使って]投票してください(http://i.imgur.com/kygEP.png)。ユーザーは自分の知識を共有することで利益を得ます。また、あなたの問題をよりよく解決する答えを受け入れることを覚えておいてください。(もしあれば、チェックマークを押してください。)(http://i.imgur.com/uqJeW.png) –

答えて

5

これはかなり簡単です。まず、あなたの線分を無限であるかのように扱い、Rの線から垂線があなたの点Pを通る線上の点Rを見つけます.Rが線のAとBの間にある場合、最短距離PRです。さもなければ、shorestest距離はPAとPBのlessorです。

4

Java関数

/** 
* Calculates the euclidean distance from a point to a line segment. 
* 
* @param v  the point 
* @param a  start of line segment 
* @param b  end of line segment 
* @return  distance from v to line segment [a,b] 
* 
* @author  Afonso Santos 
*/ 
public static 
double 
distanceToSegment(final R3 v, final R3 a, final R3 b) 
{ 
    final R3 ab = b.sub(a) ; 
    final R3 av = v.sub(a) ; 

    if (av.dot(ab) <= 0.0)   // Point is lagging behind start of the segment, so perpendicular distance is not viable. 
    return av.modulus() ;   // Use distance to start of segment instead. 

    final R3 bv = v.sub(b) ; 

    if (bv.dot(ab) >= 0.0)   // Point is advanced past the end of the segment, so perpendicular distance is not viable. 
    return bv.modulus() ;   // Use distance to end of the segment instead. 

    return (ab.cross(av)).modulus()/ab.modulus() ;  // Perpendicular distance of point to segment. 
} 

全体の要旨(自己完結)R3 3D代数パッケージ:私は知っているオープンソースライブラリのhttps://gist.github.com/reciprocum/4e3599a9563ec83ba2a63f5a6cdd39eb

一部https://sourceforge.net/projects/geokarambola/

関連する問題