Matlab 求直线上点的坐标

Matlab 求直线上点的坐标,matlab,math,Matlab,Math,这应该很容易。我试图找到直线上一点的坐标。我用MATLAB实现。我知道,端点的坐标和到其中一个点的距离 我使用以下公式计算坐标(请注意,我不能使用中点公式,因为距离可能会变化) 当斜率为负时,我得到了错误的结果。你能建议一下,使用这个公式需要考虑的条件是什么吗?我也不知道其他的配方 这是一种错误的解决方案,因为解决方案不是唯一的。线上有两个点与点A的距离AP相同:一个向左,另一个向右 解决这个问题的方法是无限的,我更喜欢向量表示法 向量ab是一个2x1 matlab矩阵: ab = B-A

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

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


当斜率为负时,我得到了错误的结果。你能建议一下,使用这个公式需要考虑的条件是什么吗?我也不知道其他的配方

这是一种错误的解决方案,因为解决方案不是唯一的。线上有两个点与点A的距离AP相同:一个向左,另一个向右

解决这个问题的方法是无限的,我更喜欢向量表示法

向量ab是一个2x1 matlab矩阵:

ab = B-A 
abN是归一化向量

abN = ab/norm(ab) 
在abN方向上从A步进,距离d(在您的情况下为AP)为:

希望有帮助


Ohad

对于这么简单的任务来说,这是一个太复杂的解决方案。使用直接向量计算:

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

询问您是否需要澄清。

您的解决方案没有问题,但在计算角θ时,您需要注意象限模糊性

在大多数编程语言中都有一个很好的解决方案:。因此:

一般来说,无论何时何地需要进行反正切,请使用
atan2
而不是
atan
。正常的
atan
仅适用于您不知道分区
y/x
的单个组件的情况

请注意,您的解决方案不可扩展到3D,而其他人提出的向量解决方案是。总的来说,我建议你们开始研究向量。它不仅在许多情况下简单得多,而且用途也更广泛

P = point_on_line([x1 y1], [x2 y2], len);
x = P(1);
y = P(2);
%// 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)