1.计算线段的方向向量
2.将待测点与线段起点作差,得到一个向量
3.计算向量点积,判断点是否在直线上
4.判断点是否在线段上(可选)
bool IsPtOnLine(vtkVector3d pt1, vtkVector3d pt2, vtkVector3d ptTest, bool bIncludeEndPt)
{
// 计算线段方向向量
vtkVector3d lineDir = pt2 - pt1;
// 将待测点与线段起点作差,得到一个向量
vtkVector3d ptDiff = ptTest - pt1;
// 计算向量点积,判断点是否在直线上
double dotProduct = vtkMath::Dot(ptDiff, lineDir);
double lineLength = lineDir.Norm();
if (dotProduct < 0 || dotProduct > lineLength * lineLength)
{
return false;
}
// 判断点是否在线段上
if (!bIncludeEndPt && (dotProduct == 0 || dotProduct == lineLength * lineLength))
{
return false;
}
return true;
}