用MATLAB计算连接线段间的夹角

用MATLAB计算连接线段间的夹角,matlab,line,points,segments,angle,Matlab,Line,Points,Segments,Angle,我第一次使用MATLAB,我几乎没有编程经验 我有三个坐标点与线段连接在一起,以创建一种之字形路径。如果从原点到第一个点的线段延伸过第一个点,我需要找到从第一个点延伸的直线到从第一个点延伸到第二个点的直线的角度度量。第二点到第三点也需要这样做。我读过类似问题的解决方案,但我无法根据自己的情况解释和修改它们 假设您的坐标是: coord = [1 2; 2 4; 1.5 1; 4 2] coord = 1.0000 2.0000 2.0000 4.0000 1.

我第一次使用MATLAB,我几乎没有编程经验

我有三个坐标点与线段连接在一起,以创建一种之字形路径。如果从原点到第一个点的线段延伸过第一个点,我需要找到从第一个点延伸的直线到从第一个点延伸到第二个点的直线的角度度量。第二点到第三点也需要这样做。我读过类似问题的解决方案,但我无法根据自己的情况解释和修改它们


假设您的坐标是:

coord = [1 2; 2 4; 1.5 1; 4 2]
coord =
    1.0000    2.0000
    2.0000    4.0000
    1.5000    1.0000
    4.0000    2.0000
这将产生以下之字形图案:

要查找每条线段的角度,可以执行以下操作:

coord_diff = diff(coord) %// Find the difference between each 
                         %// coordinate (i.e. the line between the points)

%// Make use of complex numbers. A vector is 
%// given by x + i*y, where i is the imaginary unit
vector = coord_diff(:,1) + 1i * coord_diff(:,2);

line_angles = angle(vector) * 180/pi; %// Line angles given in degrees  
diff_line_angle = diff(line_angles)   %// The difference in angle between each line segment
这给出了以下角度,在检查图表时,这些角度似乎是合理的

line_angles =    
   63.4349
  -99.4623
   21.8014

diff_line_angle =
 -162.8973
  121.2637
评论后更新 我不确定你想如何对待不同的症状等,但像这样的事情应该是可行的:

[90-line_angles(1), arrayfun(@(n) line_angles(n+1)-line_angles(n), ...
    1:numel(line_angles)-1)].'
ans =
   36.8699
   90.0000
 -106.2602
这更简单,但更难适应,以防您需要更改标志或类似内容:

[90-line_angles(1); diff(line_angles)]

关于从坐标计算角度的相关答案非常感谢您的回复,但我认为这不是我想要的。这应该归咎于我的模糊问题。这里有一些更多的细节。第一段必须从原点开始,且每个连续点的Y值必须大于最后一个点,从而形成垂直之字形。然后,通过将每个线段延伸到Z字形中存在弯曲的点,并测量从突出线段到下一个坐标的角度。如果我有十个声誉,可以发布图片,我相信它会变得清晰。在pastebin、imgur或类似的网站上发布一个图片链接,有人可以帮你上传。但现在有了新的信息就更清楚了。我相信我的答案只是一些微小的改变,而不是你想要的。如果矩阵中的第一行是
[0 0]
,您可以通过获取
直线角度(n)-直线角度(n-1)
来查找。稍后我会更新我的答案:-)这是一个图片链接。蓝色弧是我需要的角度度量。谢谢你的帮助!我并不想打扰你,但我似乎仍然无法将代码输出到我手工解决问题时得到的解决方案中。如果你能看看我发布的图片的链接,并给我更多的建议,我非常感谢!谢谢你的帮助@用户1,我不确定您希望如何处理不同的迹象,但我认为更新将帮助您。=)
[90-line_angles(1); diff(line_angles)]