2016-07-13 30 views
0

3D空間内に点(x1、y1、z1)を持っています そして、線(x2、y2、z2)(x3、y3、z3)3D空間内の線と点との間の距離を求めるJavaコード

私は線とドットの間の最短距離を見つけたいと思っています。 私はすでにこれについて数学的方程式を見つけましたが、私は数学者ではないので、方程式のさまざまな変数を理解してJava/Androidに適用することができませんでした。

ここで、ほぼすべての場所で同様の質問を検索して見ましたが、どのプログラミング言語でも例はありませんでした。

+0

http://stackoverflow.com/questions/9368436/3d-perpendicular-point- on-line-from-3d-pointは、Javaに変換するためのほとんどの努力を必要としません。厳密には無限のラインです。 –

答えて

0

いくつかの空間的な数学を学ん晩過ごした後、私は最終的にJavaコードに式を変換することができます:

public static float betweenPointAndLine(float[] point, float[] lineStart, float[] lineEnd){ 
     float[] PointThing = new float[3]; 
     float[] TotalThing = new float[3]; 
     PointThing[0] = lineStart[0] - point[0]; 
     PointThing[1] = lineStart[1] - point[1]; 
     PointThing[2] = lineStart[2] - point[2]; 

     TotalThing[0] = (PointThing[1]*lineEnd[2] - PointThing[2]*lineEnd[1]); 
     TotalThing[1] = -(PointThing[0]*lineEnd[2] - PointThing[2]*lineEnd[0]); 
     TotalThing[2] = (PointThing[0]*lineEnd[1] - PointThing[1]*lineEnd[0]); 

    float distance = (float) (Math.sqrt(TotalThing[0]*TotalThing[0] + TotalThing[1]*TotalThing[1] + TotalThing[2]*TotalThing[2])/
        Math.sqrt(lineEnd[0] * lineEnd[0] + lineEnd[1] * lineEnd[1] + lineEnd[2] * lineEnd[2])); 


    return distance; 
} 
0
public static double distance(double x1, double y1, double z1, 
           double x2, double y2, double z2, 
           double x3, double y3, double z3) { 
    double b = Math.sqrt(Math.pow((x2 - x3), 2) 
      + Math.pow((y2 - y3), 2) 
      + Math.pow((z2 - z3), 2)); 

    double S = Math.sqrt(Math.pow((y2 - y1) * (z3 - z1) - (z2 - z1) * (y3 - y1), 2) + 
      Math.pow((z2 - z1) * (x3 - x1) - (x2 - x1) * (z3 - z1), 2) + 
      Math.pow((x2 - x1) * (y3 - y1) - (y2 - y1) * (x3 - x1), 2))/2; 

    return 2 * S/b; 
} 
+0

Zコンポーネントはどこですか? –

+1

ups、thats for 2D ...ごめんなさい – Sharpe

関連する問題