计算旋转矩形的调整大小 QTransform

Calculating resizing QTransform of a rotated rectangle

我正在尝试在我的 Qt 应用程序中实现一些行为,用户可以在其中调整和旋转出现在屏幕上的元素。我正在尝试找出如何使用 QTransform 旋转和调整矩形的大小。 首先,我实现了一个矩形(原点在其中心)的旋转,如下所示:

// Step 1
QRectF rect (100,100, 200, 300);
QTransform rotation;
rotation.translate(rect.center.x(), rect.center.y());
rotation.rotate(45);
rotation.translate(-rect.center.x(), -rect.center.y());

// get rotated polygon
auto polygon = rotation.mapPolygon(rect);

// draw using QPainter
painter->drawPolygon(polygon);

现在,我想做的是通过改变其宽度来沿其边缘之一调整旋转矩形的大小,但我不太确定如何去做。我想计算将调整矩形大小的 QTransform 矩阵(我唯一解决的问题是新变换的变换原点需要设置为旋转矩形的中间右边缘)。

如果你想沿着一些既不是水平也不是垂直,而是与轴成一定角度的线进行缩放,你需要先以相反的方向旋转变换该角度,然后按轴缩放,然后再旋转回来。

在你的情况下,你可以在旋转之前缩放。