在距离两个给定点

时间:2016-08-04 18:48:55

标签: matlab

我已经编写了这个函数来在某个距离找到(x1,y1)和(x2,y2)之间的点。如果斜率m变为负值,则我发现没有正确放置点。这是代码:

   function  [X,Y] = linE(x1,y1,x2,y2,d)
    m = (y2-y1)/(x2-x1);
    theta = atand(m);
    X = x1+cumsum(d)*cosd(theta);
    Y = y1+cumsum(d)*sind(theta);

2 个答案:

答案 0 :(得分:2)

计算的问题不是存在负斜率。

[X1, Y1] = linE(7, 10, 3, 1, 2);
[X2, Y2] = linE(7, 1, 3, 10, 2);

两者都产生正确的输出:

correct

问题在于你的轮换进入第二和第三笛卡尔象限(相对于你的第一点):

(3, 1), (7, 10)

incorrect

几何上,结果很有意义。查看我们的类似斜率线段对之一,线段(7, 10), (3, 1)2.25的斜率均为atand,因此66°将返回-114°左右两者,当后者实际上是if/else时。为了解决这个问题,您可以检查以确定使用function [X,Y] = linE(x1,y1,x2,y2,d) theta = atan2d((y2 - y1), (x2 - x1)); X = x1 + cumsum(d)*cosd(theta); Y = y1 + cumsum(d)*sind(theta); end 块操作的象限,或使用MATLAB的atand2d函数,即四象限反正切。

您的功能将变为:

{{1}}

这为我们的4个案例产生了正确的结果:

yay

答案 1 :(得分:-2)

i, j, k, and m

如果你不需要其他地方的实际坡度。