1
我在Matlab中寫了一個函數,將點P投影到經過點V1和V2的線上。在Matlab中將點投影到線上,精度不高?
我們稱之爲投影點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。
爲什麼會發生?我如何改進它?
我也得到'DIST = 5.4783'用'V =(V2-V1)/標準(V2-V1); Q = dot(P-V1,v)* v + V1; dist = norm(P-Q)'。你的價值似乎是正確的 –
它不能解決你的精度問題,但可能能夠改善你的算法,看看這個[答案](http://stackoverflow.com/questions/31273991/finding-the-point-的交叉路口上-A-3D線垂直到一個目標點/ 31274489#comment50543389_31274489)。這與你正在做的事非常相似。 – Hoki