Matlab中点形矩阵中心的定位

Matlab中点形矩阵中心的定位,matlab,matrix,geometry,Matlab,Matrix,Geometry,在Matlab中,我得到了一个简单的二维矩阵。我想计算一下,从同一个矩阵的中心开始,矩阵中某些点的方向。也许用一个简单的图表就更清楚了: 我得了好几分(蓝色、绿色、黄色和棕色)。我想计算每个点的方向角。因此p1(蓝色)为45度,黄色为180度,棕色为250-270度,绿色为0度。这看起来很简单,但是我已经被这个问题困扰了很长时间,我的代码并不是在所有情况下都能很好地工作 在这个例子中,我展示了一个具有成对行数和列数的矩阵(我的矩阵将始终是一个正方形矩阵),那么在矩阵具有奇数维的情况下应该怎么做

在Matlab中,我得到了一个简单的二维矩阵。我想计算一下,从同一个矩阵的中心开始,矩阵中某些点的方向。也许用一个简单的图表就更清楚了:

我得了好几分(蓝色、绿色、黄色和棕色)。我想计算每个点的方向角。因此p1(蓝色)为45度,黄色为180度,棕色为250-270度,绿色为0度。这看起来很简单,但是我已经被这个问题困扰了很长时间,我的代码并不是在所有情况下都能很好地工作

在这个例子中,我展示了一个具有成对行数和列数的矩阵(我的矩阵将始终是一个正方形矩阵),那么在矩阵具有奇数维的情况下应该怎么做呢? 提前感谢您

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

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

    0.7854
以弧度表示的角度

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

并以度为单位转换角度:

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

DegAngle =

   45.0000
         0
 -104.0362
  180.0000
  135.0000

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

只需制作一个函数,该函数接收两个点并给出它们之间的角度作为输出

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],pt2=[6.51.5]
),角度为45度。黄色和橙色分别为180度和262度。两个二维点之间的角度公式取自。这在数值上比
acos
公式更稳定。您可以阅读上述链接上的详细讨论。

是的,谢谢。为了获得更完整的代码,我编写了DegAngle=mod((angle/(2*pi))*360360);如果我没有平方矩阵呢?我如何确定中心并计算每个点的相对位置(我传递给cart2pol的参数)@karl71不客气。你是说如果像素不是正方形?如果矩阵不是正方形,则没有问题,仅当轴不是正交法线时。
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