首页 > 解决方案 > 找到一组 3D 线的最近点

问题描述

这个问题困扰了我好几天。

我有一组由一些数据形成的线,这些数据产生以下形式的 3D 线:

P = a + d t

其中a是位置向量,d是单位方向向量。

所以基本上我想使用最小二乘法找到离所有这些线最近的点。我一直无法在线找到算法或如何在 Java 中实现它。我使用 apache commons 数学库,使用 Vector3D 或 RealVectors 来计算线方程。因此,任何有关解决此问题的算法或示例代码的帮助都会有所帮助。

标签: javaalgorithmcomputational-geometryleast-squares

解决方案


假设您要最小化到线的距离平方和,并假设 WLOG 向量d为单位,则总平方距离为

Σ (( ap )² - ( ap . d )²)

其中总和接管所有 ( a , d ) 行。

这个表达式的梯度是

Σ (2 ap - 2 ( ap . d ) d )

通过取消它,我们在p中得到一个线性系统。


推荐阅读