我在Matlab中定义了以下矩形:
A = [-4,-4,4,4,-4;-2,2,2,-2,-2;]
我定义了一个变换矩阵(Special Euclidean(2)),如下所示:
function T = se2(x, y, theta)
T = [cosd(theta), -sind(theta), x;
sind(theta), cosd(theta), y;
0, 0, 1];
现在,我想将我的形状绕其中心逆时针旋转45度,并将其相对于新坐标系在新y方向上移动2个单位。
- 第一个问题是**:在执行以下操作时:...
B = se2(0,2,45)*[A;1 1 1 1 1]
...它会正确旋转,但会错误移动我的形体。
下面是我的矩形(蓝色)、不正确的变换(红色)和正确的变换(绿色):
- 第二个问题是:假设我在y方向上将形状平移了6个方向。我只想将矩形绕着它的新中心旋转-30度**,但是按照我所示的方法,会产生绕着以前的中心旋转。
- 第二个问题是:假设我在y方向上将形状平移了6个方向。我只想将矩形绕着它的新中心旋转-30度**,但是按照我所示的方法,会产生绕着以前的中心旋转。
我如何在matlab中绕过这些问题?在做这些任务时有没有预定义的函数?
绘制形状的代码:
A =
-4 -4 4 4 -4
-2 2 2 -2 -2
plot(A(1,:),A(2,:),'blue')
1条答案
按热度按时间v8wbuo2f1#
基本上,在旋转之前,你需要将A平移到它的质心。这是因为旋转假设你是围绕原点旋转的。因此,在旋转之前,你需要将它"居中"在你计划旋转它的点上。然后,在完成旋转之后,你需要将它平移回来。有关详细信息,请参考this reference。
函数
trans
将在旋转之前对其进行平移。结果:
这是在中心旋转时的A/B。
这里是A/B与偏移。
与第一个问题的解决方案相同,不同之处在于使用新质心和-30度代替
B
的参数。