我已经编写了这个函数来在某个距离找到(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);
答案 0 :(得分:2)
计算的问题不是存在负斜率。
[X1, Y1] = linE(7, 10, 3, 1, 2);
[X2, Y2] = linE(7, 1, 3, 10, 2);
两者都产生正确的输出:
问题在于你的轮换进入第二和第三笛卡尔象限(相对于你的第一点):
(3, 1), (7, 10)
几何上,结果很有意义。查看我们的类似斜率线段对之一,线段(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个案例产生了正确的结果:
答案 1 :(得分:-2)
i, j, k, and m
如果你不需要其他地方的实际坡度。