效果
计算点到线段的最短位置,效果如下:
代码
1 | /** |
算法解析
点到直线的最短距离为点到直线的垂线段的长度,所以点到直线的最短位置即为垂足的位置。
所以,当垂足在线段内时,垂足即为所求的点,否则为线段两端点中距离最近的点,问题转化为求垂足的位置。
使用解析式求垂足计算量巨大,这里采用向量运算求解。
求垂足
如图,已知点 P 和线段 p1p2 可知,垂足 T 的坐标即为向量 P1P 在向量 P1P2 上投影的点的坐标。
判断点是否在线段内
由于已知 p1、t、p2共线,故当线段 p1t 长度 + 线段 tp2 长度大于线段 p1p2 长度时,点 T 不在线段内。