点到线段的最短距离
起因:在shadertoy看到有人这样画一个线段:
float DistLine(vec2 p, vec2 a, vec2 b) {
vec2 pa = p-a;
vec2 ba = b-a;
float t = clamp(dot(pa, ba)/dot(ba, ba), 0.,1.);
//float t = dot(pa, ba)/dot(ba, ba);
return length(pa - ba*t);
}
对计算距离这一段百思不得,思考后明白核心是求出uv到这条线段的距离,自己换了些方法但似乎总没这里写的优美,发现这里是用了矢量解法
点到线段最短距离的运算与点到直线的最短距离的运算二者之间存在一定的差别,即求点到线段最短距离时需要考虑参考点在沿线段方向的投影点是否在线段上,若在线段上才可采用点到直线距离公式,如图1所示。
图1 (a)最短距离为点P与其在线段AB上投影C之间的线段PC
(b)最短距离为点P与端点B(或A)所构成的线段PB(或PA)
具体算法主要有以下三种:
1、方法——经典算法
该算法直接用高中时所学习到的解析几何知识对点到线段的距离进行求解。其基本