matlab - Matlab 中的二维 body 变换和旋转

标签 matlab 2d transformation

我在 Matlab 中定义了以下矩形:

A = [-4,-4,4,4,-4;-2,2,2,-2,-2;]

然后我定义了一个变换矩阵(特殊欧几里德 (2)),如下所示:

function T = se2(x, y, theta)
T = [cosd(theta), -sind(theta), x;
     sind(theta), cosd(theta), y;
      0,        0,           1];

现在,我想将我的形状围绕其中心逆时针旋转 45 度,并相对于新坐标系中移动 2 个单位y方向。

第一个问题是:当像下面那样做时:...

B = se2(0,2,45)*[A;1 1 1 1 1]

...它会正确旋转但不正确地移动我的形状。
这是我的矩形(蓝色)、不正确的变换(红色)和正确的变换(绿色): The image

第二个问题是:假设我将形状在 y 方向上平移了 6 个方向。我只想将矩形围绕它的新中心 旋转 -30 度,但按照我所展示的那样,会产生围绕前一个中心的旋转。 enter image description here

如何在 Matlab 中解决这些问题?执行这些任务是否有预定义的功能?

我绘制形状的代码:

A =

    -4    -4     4     4    -4
    -2     2     2    -2    -2
plot(A(1,:),A(2,:),'blue')

最佳答案

关于您的第一个问题:

本质上,您想在旋转之前将 A 平移到它的质心。这是因为旋转假定您正在绕原点旋转。因此,在旋转之前,您需要将其“居中”在您计划旋转的点上。然后你需要在完成旋转后将其翻译回来。引用this reference了解详情。

% Define A
A = [-2,-2,6,6,-2; -2,2,2,-2,-2; 1 1 1 1 1];

% Define Translation Matrix
trans = @(x,y,z) repmat([x; y; z],[1 5]);

% Define Rotation Matrix
se2 = @(x, y, theta) [
    cosd(theta), -sind(theta), x;
    sind(theta), cosd(theta), y;
    0,        0,           1];

% Calculate Rotated Rect
B = se2(0,0,45) * (A - trans(2,0,0) ) + trans(2,0,0);

% Plot Rectangles
figure; plot(A(1,:),A(2,:),'b')
hold on;
plot(B(1,:),B(2,:),'r')
hold off;
axis equal

trans 函数将在旋转之前对其进行翻译。

结果:

>> A
A =
    -2    -2     6     6    -2
    -2     2     2    -2    -2
     1     1     1     1     1
>> B
B =
    0.5858   -2.2426    3.4142    6.2426    0.5858
   -4.2426   -1.4142    4.2426    1.4142   -4.2426
    1.0000    1.0000    1.0000    1.0000    1.0000

这是在中心旋转的 A/B。

enter image description here

这是带有偏移量的 A/B。

enter image description here

关于您的第二个问题:

与第一个问题的解决方案相同,只是您使用新的质心和 -30 度代替 B 的参数。

关于matlab - Matlab 中的二维 body 变换和旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29780903/

相关文章:

matlab - 如何在 MATLAB 中绘制一维绘图?

python - 如何有效地清除 pygame alpha 层?

c++ - 获取旋转顶点的当前顶点位置

matlab - 使用 repmat 在第一个维度之前创建一个维度

Matlab 快速数据类型转换 4x1byte 到 1x32byte

java - 2D 平台游戏中的碰撞错误

core-data - 如何让 mogenerator 识别 Transformable 属性的正确类型?

c# - Convert.ToDouble ("1.3") 返回 13

matlab - 如何在 RGB 空间中表示来自 PCA 空间的点

java - 一些 2D Java 代码问题