在Matlab中将点投射到线上,精度不好?

时间:2015-07-21 12:14:25

标签: matlab geometry linear-algebra

我在Matlab中编写了一个函数,它将点P投影到通过点V1和V2的线上。

让我们调用预测点P'。 P' = alfa * V1 +(1-alfa)* V2

该函数返回alfa以及P和P'之间的距离。

function [alfa, dist] = ProjectPoint(P, V2, V1)

d1 = pdist2(P, V1);
d2 = pdist2(P, V2);
d  = pdist2(V1, V2);

t = ((d1*d1 - d2*d2)/d) + d;
t = t/2;

alfa = t/d;
dist = sqrt( d1*d1 - t*t );

该函数看起来正确并返回简单输入的正确结果。

但有时候结果有一个不可接受的错误。例如,对于

V1 = [40.1587, 50.7355, 36.00];
V2 = [36.5079, 45.0980, 33.00];
P  = [36.5079, 45.0980, 39.00]; 

我的结果是:alfa = 0.6673,dist = 5.4783。

正确的结果是:alfa = 0.6064,dist = 5.4966。

为什么会这样?我怎么能改进它?

1 个答案:

答案 0 :(得分:1)

您的价值观似乎是正确的。这是一个独立的计算:

V1 = [40.1587, 50.7355, 36.00];
V2 = [36.5079, 45.0980, 33.00];
P  = [36.5079, 45.0980, 39.00];
v = (V2-V1)/norm(V2-V1); %// normalized vector from V1 to V2
Q = dot(P-V1,v)*v+V1; %// projection of P onto line from V1 to V2
dist = norm(P-Q);
alfa = (Q(1)-V1(1))/(V2(1)-V1(1));

结果:

dist =
    5.4783
alfa =
    0.6673