這應該是一個簡單的方法。我試圖找到直線上一個點的座標。我在MATLAB中實現。我知道,端點的座標和距離其中一點的距離。查找線上點的座標
我使用下面的公式計算座標(請注意,我不能使用中點公式,因爲距離可能會有所不同)。
我得到錯誤的結果時,斜率爲負。您能否建議,使用這個公式需要考慮哪些條件?我也不知道任何其他公式。
這應該是一個簡單的方法。我試圖找到直線上一個點的座標。我在MATLAB中實現。我知道,端點的座標和距離其中一點的距離。查找線上點的座標
我使用下面的公式計算座標(請注意,我不能使用中點公式,因爲距離可能會有所不同)。
我得到錯誤的結果時,斜率爲負。您能否建議,使用這個公式需要考慮哪些條件?我也不知道任何其他公式。
您的解決方案沒有問題,但是當您採用反正切來計算角度θ時需要注意象限模糊。
在大多數編程語言中有一個很好的解決方案:atan2
。因此:
%// Your points (fill in any values)
A = [-10 0];
B = [-1 -1];
%// Use atan2!
th = atan2(B(2)-A(2) , B(1)-A(1));
%// Distance from A to the point of interest
AP = sqrt((B(2)-A(2))^2 + (B(1)-A(1))^2)/2;
%// The point of interest
C = [
A(1) + AP*cos(th)
A(2) + AP*sin(th)];
%// Verify correctness with plots
figure(1), clf, hold on
line([A(1); B(1)], [A(2); B(2)])
plot(...
A(1), A(2), 'r.',...
B(1), B(2), 'b.',...
C(1), C(2), 'k.', 'markersize', 20)
一般情況下,無論何時何地,你需要採取反正切,用atan2
而不是atan
。正常的atan
僅適用於您不知道部門y/x
的各個組件的情況。
請注意,您的解決方案不能擴展到3D,而其他人在這裏提出的矢量解決方案是。所以一般來說,我確實會建議你開始使用矢量。在許多情況下,它不僅簡單得多,而且功能更多。
這是解決方案的錯誤方法,因爲解決方案不是唯一的。與A點距離相同的AP有兩點:一個是左轉,另一個是右轉。
無限的方法來解決這個問題,我更喜歡矢量符號。
矢量AB是2×1的matlab矩陣:
ab = B-A
ABN是歸一化矢量
abN = ab/norm(ab)
在ABN方向從步進d的距離(在你的情況下,AP)爲:
A + abN*d
希望它有幫助。
轄
這對於這樣一個簡單的任務過於複雜的解決方案。使用直接矢量計算:
function P = point_on_line(A, B, AP)
D = B - A;
P = A + D/norm(D) * AP;
end
這樣調用:
P = point_on_line([x1 y1], [x2 y2], len);
x = P(1);
y = P(2);
詢問是否需要任何澄清。