java - 找到一条线上到另一个点的最近点
问题描述
我有一个仿射方程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));
以此为参考
但是,这不起作用并返回奇怪的结果
解决方案
如果你停留在矢量表示中,它可能会更容易。我有一个示例代码,但仅限于 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);
推荐阅读
- java - 单击imageView时如何显示项目
- javascript - 尝试在 React Native 中组织模块时无法解析模块
- r - RStudio:无法查看由 tree 和 rpart 函数生成的树
- c# - C# linq to sql 没有按顺序转换 string.join
- java - 如果它是另一个数组的子集,则查找数组
- reactjs - 为什么渲染延迟 > 5 秒?
- typescript - 如何在 typescript 中使用 reset()、.value 和其他 DOM 键?
- dart - FloatingActionButton 结束对齐剪切图标
- javascript - Vue:如何将变量名作为参数传递?
- google-cloud-platform - 如果我的 Google Cloud Scheduler 作业失败,如何发送电子邮件提醒?