我正在使用我在互联网(here)上找到的一段代码来计算点与线段之间的距离。这是代码:
float
dist_Point_to_Segment( Point P, Segment S)
{
Vector v = S.P1 - S.P0;
Vector w = P - S.P0;
double c1 = dot(w,v);
if ( c1 <= 0 )
return d(P, S.P0);
double c2 = dot(v,v);
if ( c2 <= c1 )
return d(P, S.P1);
double b = c1 / c2;
Point Pb = S.P0 + b * v;
return d(P, Pb);
}
计算 double b = c1 / c2; 时,c2是 dot(v,v)(因此,v的范数平方)。我们不应该使用norm(v)吗?向量在另一个投影上的投影不是正确的定义吗?
谢谢。
答案 0 :(得分:2)
实际上,定义的定义是范数(v)的平方。所以dot(v,v)是正确的。
答案 1 :(得分:1)
如果将v
标准化,则投影的长度为w.v
,投影的矢量为(w.v) v
。
v
出现两次,未归一化向量的公式为
(w.(v/|v|)) v/|v| = (w.v/|v|²) v
这将保留平方根。