1

編集:より多くの情報を追加しました。

QPolygonF以下に示す原点を中心にa を回転させたいと思います。

ブロックの回転

このポリゴンが欲しいです(画像の中心は原点です - 0, 0):

最初のポリゴン

ここで終了するように時計回りに回転するには:

ここに画像の説明を入力

上のQPolygonF画像の最初のブロックと同じ位置にポイントがあります。

QPolygonF p1 =  QPolygonF() << QPointF(0, 1) << QPointF(4, 1) << QPointF(4, 2) << QPointF(0, 2);

2, 2次に、正しい原点 ( )と思われるものを中心に回転します。

QTransform t;
t.translate(2, 2);
t.rotate(-90);
t.translate(-2, -2);
QPolygonF p2 = t.map(p1);
qDebug() << p1 << "rotated = " << p2;

出力:

QPolygonF(QPointF(0, 1) QPointF(4, 1) QPointF(4, 2) QPointF(0, 2) ) rotated =  QPolygonF(QPointF(1, 4) QPointF(1, 0) QPointF(2, 0) QPointF(2, 4) )

私が望む出力が次の場合:

QPolygonF(QPointF(0, 1) QPointF(4, 1) QPointF(4, 2) QPointF(0, 2) ) rotated =  QPolygonF(QPointF(2, 0) QPointF(3, 0) QPointF(3, 4) QPointF(2, 4) )

しかし、上記の出力によると、ポリゴンは次のようになります。

間違った回転

どの時点で回転する必要がありますか?

4

2 に答える 2

2

編集

これを達成するための正しいコードを知った後、あなたが何であるかを理解した後:

QTransform t; 
t.translate(2, 2); 
t.rotate(90); 
t.translate(-2, -2); 
QPolygonF p2 = t.map(p1); 
qDebug() << p1 << "rotated = " << p2;

これにより、長方形が得られます。

QPolygonF(QPointF(3, 0) QPointF(3, 4) QPointF(2, 4) QPointF(2, 0) )

これはあなたが期待するものです(ただし、ローテーションにより順序が変更されます)。長方形の中央ではなく、長方形のを中心に回転しているため、同じ結果が得られないことにrotate(90)注意してください。rotate(-90)

QT 変換の概念化

qt回転関数の方向により、多少の混乱が生じる場合があります。これは反時計回りの回転を実行しますが、y 軸が反転して「見える」ため (少なくともこの場合)、時計回りに見えます。

例えとして、私が部屋にいて観察者がランプを左に倒した場合、天井にぶら下がっている誰かの視点からすると、ランプは右に「倒れた」ことになります。

于 2012-04-17T06:21:57.763 に答える
0

私はちょっと見ただけでしたが、これは間違っていると思います:

t.translate(2, 2);

変換を取得するには、次のようにする必要があります。

t.translate(2, 1);

私が理解している限り、長方形の下限はy = 1です...

于 2012-04-17T08:44:30.207 に答える