2012-04-17 3 views
1

this question의 결과로 Qt의 QTransform::rotate 기능에 대해 더 알고 싶습니다. In the documentation, 그것은 말한다Qt의 QTransform 회전 기능 이해

QTransform & QTransform :: 회전 (qreal 각도 Qt는 :: 축 축 = Qt는 : Z 축)

지정된 축을 중심으로 소정의 각도만큼 반 시계 좌표계를 회전하며 행렬에 대한 참조를 반환합니다.

위젯 좌표에 정의 된 점에 QTransform을 적용하면 y 축이 아래쪽을 향하기 때문에 시계 방향으로 회전하는 것입니다.

각도는도 단위로 지정됩니다.

QPolygonF original = QPolygonF() << QPoint(0, 1) << QPoint(4, 1) << QPoint(4, 2) << QPoint(0, 2); 
QTransform transform = QTransform().translate(2, 2).rotate(90).translate(-2, -2); 
QPolygonF rotated = transform.map(original); 
qDebug() << rotated; 

출력 :

QPolygonF(QPointF(3, 0) QPointF(3, 4) QPointF(2, 4) QPointF(2, 0)) 
내 앞의 질문에서

, 나는 내가 실제로 rotate 기능에 따라, 90도 시계 반대 방향으로 회전해야하는 QPolygonF 시계 방향으로 회전하는 것을 배웠다

예 : 이 구형 :

original rectangle rotation

여기에 회전하려면 왜이

new rectangle rotation

입니까? 왜 문서에서 "widget coordinates"에 있지 않다고 믿을 때 QTransform::rotate에 대한 호출이 실제로 시계 방향으로 회전하고 있다고 말하는 이유는 무엇입니까? 여기에 관련된 위젯은 없습니다.

답변

5

QTransform은 수학적 데카르트 좌표계에서 작동합니다. 즉. 오른쪽 위 사분면은 양수 -x 및 양수 -Y 사분면입니다 (사분면 1). 차트가 Y 축 뒤집힌 위젯 좌표의 오른쪽 하단에 사분면 1로 표시됩니다.

회전이 반 시계 방향으로 회전합니다. 그러나 위젯 좌표에서 Y 축이 반전되므로 시계 방향으로 바뀝니다.

언급했듯이 폴리곤은 위젯과 아무 관련이 없습니다. CCW를 회전 시키지만 위젯 좌표로 시각화합니다.

+0

스티븐 감사합니다. – Mitch

3

실제로 문제는 함수가 좌표계를 회전한다는 것입니다. 객체가 아닙니다. 시계 방향으로 개체를 회전하려면 좌표계를 반 시계 방향으로 회전하는 것과 같습니다.