我在3D维空间中有一个点(x1,y1,z1) 和一条线(x2,y2,z2)(x3,y3,z3)
我想找到线和点之间的最短距离。 我已经为此找到了数学方程式,但我不是数学家,我无法理解方程中的不同变量并将它们应用于Java / Android。
我已经在这里和几乎所有地方搜索和查看了类似的问题,但是在任何编程语言中都没有示例。
答案 0 :(得分:1)
在过夜学习一些空间数学之后,我终于可以将方程式转换为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;
}
答案 1 :(得分: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;
}