3维线上的最近点到另一点

时间:2015-01-01 18:54:46

标签: java geometry line point

我正在编写一个定义3D几何图形的小库,以及每个几何图形的许多有用函数。我将Point3D定义为具有3个双精度坐标,每个轴一个,并且Line3D具有2个Point3D。在Line3D类中,我想要一个方法,它将返回最接近作为参数传递的Point的一个点。

有谁知道怎么做?

(按方式我不是在寻找距离,而是在线上的实际点

3 个答案:

答案 0 :(得分:1)

让该行为P0P1和额外点Q

该线的参数方程是

P = P0 + t (P1 - P0)

平方距离PQ²

(P0 - Q + t (P1 - P0))² = t² (P1 - P0)² + 2 (P1 - P0)(P0 - Q) t + (P0 - Q)²

您可以通过取消t的第一个导数来找到最小值:

2 t (P1 - P0)² + 2 (P1 - P0)(P0 - Q) = 0

这会为您提供t,然后P

答案 1 :(得分:0)

从该点找到垂直于第一行的直线。然后你有两个未知数的方程,你可以求解。解决方案是交叉点。实现这一点。有关详细信息,请参阅this

答案 2 :(得分:0)

让我们的线由两个点P0和P1定义,并且某些点P. 查找归一化方向向量

d =( P1 - P0 )/长度( P1 - P0

和矢量

W = P - P0

该行的最近点P(b)是

Pb = d * ScalarProduct( W d

并非此方法适用于2D情况和3D情况。

enter image description here