【发布时间】:2015-07-21 20:30:46
【问题描述】:
我在 Matlab 中编写了一个函数,它将点 P 投影到穿过点 V1 和 V2 的线上。
我们称投影点为 P'。 P' = 阿尔法*V1 + (1-阿尔法)*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。
为什么会这样?我该如何改进它?
【问题讨论】:
-
我也得到了
dist = 5.4783和v = (V2-V1)/norm(V2-V1); Q = dot(P-V1,v)*v+V1; dist = norm(P-Q)。您的值似乎是正确的 -
它不能解决您的精度问题,但可以通过查看 answer 来改进您的算法。这与您正在做的事情非常相似。
标签: matlab geometry linear-algebra