我有一个仿射方程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));
使用this as a refernece
但是,这不起作用并返回奇怪的结果
最佳答案
如果您保持向量表示形式,可能会更容易。
我有一个示例代码,但仅在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);