Matlab中点形式矩阵中心的定位

时间:2014-03-18 16:34:36

标签: matlab matrix geometry

Matlab 中,我有一个简单的2D矩阵。我想从该相同矩阵的中心计算该矩阵的某些点的方向。也许用简单的图表就更清楚了: enter image description here

我有几个点(蓝色,绿色,黄色和棕色)。我想计算每个点的方向角。所以p1(蓝色)将是45度,黄色将是180度,棕色将是250-270并且绿色是0度。它看起来很容易但是我已经坚持了很长时间,而且我的代码在所有情况下都不能正常工作。

在这个例子中,我显示的是一个行数和列数对的矩阵(我的矩阵将始终是一个方阵),那么在矩阵具有奇数维的情况下应该做些什么呢? 提前谢谢

2 个答案:

答案 0 :(得分:1)

您可以使用cart2pol转换为极坐标,例如中心位置(3,3)的蓝点示例:

[angle, ~]=cart2pol(3,3);
angle=

    0.7854

是以弧度表示的角度。

您可以使用笛卡尔坐标(从蓝色坐标顺时针)创建数据集:

Coordinates=[3 3; 4 0; -1 -4; -4 0; -2, 2];
[angle, dist]=cart2pol(Coordinates(:, 1), Coordinates(:, 2));

并以度数转换角度:

DegAngle=(angle/(2*pi))*360;

DegAngle =

   45.0000
         0
 -104.0362
  180.0000
  135.0000

注意:要获取每个点相对于中心的位置,您可以使用CoordTopLeft -floor(size(YourMatrix)),其中CoordTopLeft是相对于左上角的标准坐标。

答案 1 :(得分:0)

只需创建一个接收两个点的函数,并将它们之间的角度作为输出。

function desiredAngle=findAngle2Points(centerPt,pt2)

x1=centerPt(1);x2=pt2(1);y1=centerPt(2);y2=pt2(2);
angle = mod(atan2(y2-y1,x2-x1),2*pi);
angleInD=angle*180/pi;
%or, alternatively use atan2d as follows
%angleInD = mod(atan2d(y2-y1,x2-x1),360);
desiredAngle=mod((360-angleInD),360); %Added mod to give 0 angle for the green 
                                      %point instead of 360.

end

对于蓝点(center=[4 4], pt2=[6.5 1.5]),角度为45度。对于黄色和橙色,它分别为180度和262度。两个2-D点之间的角度公式取自here。这在数值上比acos公式更稳定。您可以阅读上述链接的详细讨论。