查找线上某点的坐标

时间:2014-03-05 06:24:16

标签: matlab math

这应该很简单。我试图在一条直线上找到一个点的坐标。我在MATLAB中实现。我知道,端点的坐标和距其中一个点的距离。

我使用以下公式计算坐标(请注意,我不能使用中点公式,因为距离可能会有所不同)。

enter image description here

当斜率为负时,我得到错误的结果。您能否建议使用此配方需要考虑的条件是什么?我也不知道任何其他公式。

3 个答案:

答案 0 :(得分:5)

这对于这么简单的任务来说太复杂了。使用直接向量计算:

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);

询问您是否需要任何澄清。

答案 1 :(得分:3)

这是解决方案的错误方法,因为解决方案不是唯一的。从A点开始,您有两个点与相同的距离AP:一个向左走,另一个向右走。

这是解决这个问题的无限方法,我更喜欢矢量符号。

向量ab是2x1 matlab矩阵:

ab = B-A 

abN是标准化向量

abN = ab/norm(ab) 

在abN方向从A步进距离d(在你的情况下为AP)是:

A + abN*d
希望它有所帮助。

答案 2 :(得分:2)

您的解决方案没有任何问题,但是当您采用反正切来计算角度θ时,您需要注意象限模糊度。

在大多数编程语言中都有一个很好的解决方案: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,而其他人提出的矢量解决方案。所以一般来说我确实建议你开始使用矢量。它不仅在许多情况下更简单,而且更通用。