c++ - 从一组最接近直线的点中找到点的最快算法是什么?

标签 c++ performance linear-algebra computational-geometry

我有:
- 一组已知大小的点(在我的例子中,只有 6 个点)
- 以 x = s + t * r 为特征的线,其中 x、s 和 r 是 3D vector

我需要找到最接近给定线的点。实际距离对我来说并不重要。

我查看了几个看似相关的不同问题(包括 this 一个),并知道如何在我的高中数学课上解决这个问题。但是我无法在不计算每个距离的情况下找到解决方案,而且我确信必须有更好/更快的方法。性能在我的应用程序中绝对至关重要。

还有一件事:所有数字都是整数(点的坐标以及 s 和 r vector 的元素)。同样,出于性能原因,我希望将 float 学运算保持在最低限度。

最佳答案

您必须至少处理每个点一次才能知道它们的距离。除非你想用不同的线多次重复这个过程,否则简单地计算每个点的距离是不可避免的。所以算法必须是 O(n)。

既然你不关心实际距离,我们可以对点距计算做一些简化。确切距离由 ( source ) 计算:

d^2 = |r⨯(p-s)|^2 / |r|^2

其中 是叉积,|r|^2 是 vector r 的平方长度。由于 |r|^2 对所有点都是常数,我们可以在不改变结果的情况下从距离计算中省略它:

d^2 = |r⨯(p-s)|^2

比较近似平方距离并保持最小值。这个公式的优点是你可以用整数做任何事情,因为你提到所有坐标都是整数。

关于c++ - 从一组最接近直线的点中找到点的最快算法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56791082/

相关文章:

c++ - 有没有办法在 GDI+ 中实现图层?

没有参数名称的C++构造函数

c# - 如何让 BigInteger 正确地看到这个十六进制字符串的二进制表示?

c# - 动态WPF表单创建方法

C++ - 如何编写代码来找到两个超平面的交集

python-3.x - BicGStab 产生意外故障标志

c++ - 神秘的海森堡?

c++ - KD-Tree 构建例程中的严重错误

java - 提高性能一致性的方法

python - Numpy Cholesky 分解 LinAlgError