繁体   English   中英

查找线上点的坐标

[英]Finding coordinates of a point on a line

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

我正在使用以下公式计算坐标(请注意,由于距离会变化,因此我无法使用中点公式)。

在此处输入图片说明

当斜率是负数时,我得到错误的结果。 您能否建议使用此公式需要考虑哪些条件? 也不知道其他公式。

对于如此简单的任务而言,这太复杂了。 使用直接向量计算:

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

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

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

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

向量ab是2x1 matlab矩阵:

ab = B-A 

abN是归一化向量

abN = ab/norm(ab) 

从a沿abN方向步进d的距离(在您的情况下为AP)为:

A + abN*d

希望能有所帮助。

奥哈德

解决方案没有问题,但是在使用反切线计算角度θ时,需要注意象限模糊度。

在大多数编程语言中,有一个很好的解决方案: 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,而其他解决方案在这里提出的矢量解决方案 因此,总的来说,我确实会建议您开始使用向量。 它不仅在许多情况下简单得多,而且用途更广。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM