首页 > 解决方案 > 找到一条线上到另一​​个点的最近点

问题描述

我有一个仿射方程y = ax + b,其中 a 是系数 ( coeff)。令 D 是一条穿过axis并由前面的方程描述的线。

我正在尝试使用这段代码来查找 D 上最近点的坐标position(忽略 y 坐标,因为 3D 中的 2D)

    double a = coeff;
    double b = position.getZ();
    double c = axis.getZ() - axis.getX() * coeff;
    double x0 = position.getX();
    double y0 = position.getZ();

    return new Vector((b * (b * x0 - a * y0) - a * c) / (a * a + b * b), position.getY(),
            (a * (-b * x0 + a * y0) - b * c) / (a * a + b * b));

以此为参考

但是,这不起作用并返回奇怪的结果

标签: java

解决方案


如果你停留在矢量表示中,它可能会更容易。我有一个示例代码,但仅限于 C++(和 Direct3D):

D3DXVECTOR3 ProjectOnLine (const D3DXVECTOR3 &point,
                           const D3DXVECTOR3 &linePoint,
                           const D3DXVECTOR3 &lineUnityDir)
{
  float t = D3DXVec3Dot(&(point-linePoint), &lineUnityDir);
  return linePoint + lineUnityDir*t;
}

如果我理解你,那么你的参数可以这样使用:

D3DXVECTOR3 point = position;
D3DXVECTOR3 linePoint = axis;
D3DXVECTOR3 lineUnityDir = D3DXVECTOR3(1, a, 0)/sqrt(1+a*a);

推荐阅读