点到线段的最短距离与点到直线的最短距离存在区别,求点到线段的最短距离时要考虑参考点P沿线段方向的投影点Q是否在线段上如图所示:
点到线段的最短距离如下图所示:
解决点到线段的距离可以用面积法等,本文使用的是矢量的方法
vec line_vec = B - A; //AB
vec point_vec = - A; //AP
float project_angle = line_vec DOT point_vec;
if (project_angle <= 0)
{
continue;
}
double d = pow(dist(A, B),2); //|AB|^2 dist为两点间距离函数
if (project_angle >= d)
{
continue;
}
double r = project_angle / d; //相似三角形求出Q点的坐标
double px = A[0] + (B[0] - A[0])*r;
double py = A[1] + (B[1] - A[1])*r;
double pz = A[2] + (B[2] - A[2])*r;
vec Q = vec(px, py,pz); //投影点Q
double PQ=dist(P ,Q); //|PQ|
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)