如何使用Matlab旋转一条线?

时间:2015-05-16 15:22:14

标签: matlab rotation

假设我有一张图片I和一张h1行。使用Matlab,我可以像这样绘制线条(或线段)

h1 = plot( [l1 l1],[20 100], 'r');

现在我想以45°的角度旋转图像I。所以我用imrotate这样:

IR = imrotate(I,45);

现在,我想旋转线,如何使用Matlab做到这一点?

我找到了函数rotate。我正在尝试这个,但它不起作用!

rotate(h1,[1 1],45);

2 个答案:

答案 0 :(得分:4)

要旋转线条,您可以明确地"旋转"通过使用旋转矩阵定义线的点:

enter image description here

旋转中心由"偏移"定义。添加到线的坐标点:

在以下示例中,线条围绕:

旋转
  • 线的下点(偏移=线的下点的坐标)
  • 原点(0,0)(偏移= 0)
  • 原始线的一个点(偏移=线的一个点的坐标)

更新了代码

% Definition of the L1 parameter
L1=13;
% Definition of the points A and B
A=[L1,20]
B=[L1,100]
x=[A(1) B(1)];
y=[A(2) B(2)];
% Definition of the offset
x_offset=[x(1) 0 x(1)];
y_offset=[y(1) 0 50];
for k=1:3
   figure
   % Plot of the original line
   plot(x,y,'r','linewidth',2)
   grid on
   hold on
   for a=10:10:350
      % Definitin of the rotation angle
      % a=45;
      t=a*pi/180;
      % Definition of the rotation matrix
      mx=[ ...
         cos(t) -sin(t)
         sin(t) cos(t)
         ];
      % Traslation and rotation of the points A and B
      x1_y1=mx*[x - x_offset(k);y - y_offset(k)]
      x1=x1_y1(1,:);
      y1=x1_y1(2,:);
      % Plot of the rotated line
      ph=plot(x1+x_offset(k),y1+y_offset(k),'b','linewidth',2)
      daspect([1 1 1])
      % xlim([-100 30])
      % ylim([-80 120])
      plot(x1+x_offset(k),y1+y_offset(k),'o','markeredgecolor','b', ...
         'markersize',3,'markerfacecolor','b')
      pause(.05)
      % delete(ph)
   end
   legend('Original','Rotated',-1)
end

删除上一行(使用函数delete)并淹没新行。

在MatLab 2015上存在函数rotx

希望这有帮助。

围绕A点旋转 enter image description here

围绕原点旋转(0,0)

enter image description here

绕线点旋转 enter image description here

答案 1 :(得分:0)

这是一个围绕原点(0,0)旋转两个点并在绘图上显示结果的函数。

更新

[Af,Bf] = rotateTwoPoints(A,B,10)

A(13,20),B(13,100)和t = 10°

的图像旋转
Theme.AppCompat

enter image description here