根据 http://nl.mathworks.com/help/images/ref/affine2d-class.html
Matlab期望一个转置的仿射变换矩阵,并且它应用v T的变换,其中v作为行向量而不是标准T v,其中v是列向量。
他们说有效矩阵的形式是[a b 0; c d 0; e f 1]文献中常见形式的转置 - 以及当它们乘以v T而不是T v时的期望。
因此,他们的例子是顺时针旋转而不是逆时针旋转(即使他们说它应该以逆时针方式执行):
%Define 10-Degree Rotation in the Counter-Clockwise Direction
%Create an affine2d object that defines the transformation.
theta = 10;
tform = affine2d([cosd(theta) -sind(theta) 0; sind(theta) cosd(theta) 0; 0 0 1])
%Apply forward geometric transformation to an input (U,V) point (5,10).
[X,Y] = transformPointsForward(tform,5,10)
X = 6.6605
Y = 8.9798
他们使用文献矩阵进行ccw旋转,但是以相反的顺序相乘,所以他们得到一个cw旋转...如果他们将转置矩阵,它确实会做一个ccw旋转(也许他们忘了这样做例子)。
我测试了从左侧乘以矢量乘以矩阵乘以矢量乘以矩阵的速度 - 差异可以忽略不计。
我猜这是一个错误,他们保留它以实现向后兼容? 有人对此有任何见解吗?