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