旋转一个矩形

Rotating a rectangle

我正在尝试使用滑块旋转矩形。

滑块具有 -100 到 +100 的值。我想用它来旋转矩形。
我尝试了一些方法,包括计算矩形的角,然后弄乱矩阵,但没有成功。 (我更喜欢使用矩阵)

一个更简单的解决方案是从一开始就定义固定点,而不是只使用矩形的边。

在下面的代码中,我可以使用滑块调整矩形的大小。

    Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);

    a = 230; //positioning
    b = 150; //positioning
    c = 200; //size of drawing
    d = 150; //size of drawing

    connect(ui->horizontalSlider,SIGNAL(valueChanged(int)),this,SLOT(update()));
}

Dialog::~Dialog()
{
    delete ui;
}

void Dialog::paintEvent(QPaintEvent *e)
{
    QPainter painter(this);

    painter.fillRect(a - ui->horizontalSlider->value(),
                     b - ui->horizontalSlider->value(),
                     c + ui->horizontalSlider->value() * 2,
                     d + ui->horizontalSlider->value() * 2, Qt::green);

}





非常感谢任何形式的帮助。

首先是旋转矩阵,它将围绕 Z 轴(面向您)旋转 X-Y space 中的任意点 t 弧度:

R = [ cos(t), -sin(t);
      sin(t),  cos(t)]

要获得旋转点,您必须围绕 X-Y 平面上的特定点旋转。我假设您想围绕其中心旋转矩形。

c为中心的像素坐标:

c = [cx;
     cy]

那么旋转的点是:

P = R*(p-c) + c

其中P是旋转点,p是要旋转的矩形点,都是[2x1]向量,c。请注意,我使用的是矩阵代数,因此乘法是矩阵乘法,而不是标量乘法。 下一个问题是绘制矩形。我不熟悉 Qt 矩形绘图,但从文档中可以看出,用 fillRect 做你想做的事情是行不通的,因为它假定矩形是未旋转的。 当你有旋转坐标时,你可以使用 drawPolygon 做你想做的事。

你可以移动你的画家并旋转canvas来实现它:

void Dialog::paintEvent(QPaintEvent *e)
{
    QPainter painter(this);

    painter.save();
    painter.translate(a, b);//Move pen.
    painter.rotate(30);//rotate canvas.
    painter.fillRect(-ui->horizontalSlider->value(),
                     -ui->horizontalSlider->value(),
                     c + ui->horizontalSlider->value() * 2,
                     d + ui->horizontalSlider->value() * 2, Qt::green);
    painter.restore();
}

我通过使用“painter.drawLine( ax, ay, bx, by );” 绘制矩形解决了这个问题。之后我对每一行使用了以下公式:

double ax = MidPointWidth  + (-(Size + minWidth)) * cos(Angle) - (Size + minHeight) * sin(Angle);
double ay = MidPointHeight + (-(Size + minWidth)) * sin(Angle) + (Size + minHeight) * cos(Angle);



希望这会对某人有所帮助。