座標變換
world corrdinates
==>
window coordinates
==>
device coordinates
(邏輯座標)
世界變換
中間態座標
視窗視口變換
(物理座標)
在預設情況下,3個座標系是一致的。
世界變換
qpainter::setworldmatrixenabled
啟用、禁用世界變換
qpainter::setworldtransform
設定世界變換
qpainter::worldtransform
獲取當前
qpainter::resettransform
重置為qtransform()
4個常用的函式
qpainter::translate 平移
qpainter::scale 縮放
qpainter::rotate 旋轉
qpainter::shear 剪下
注:它們通過直接呼叫的qtransform的相應成員直接修改世界變換
void qpainter::scale(qreal sx, qreal sy)
世界變換的兩個馬甲:
qpainter::settransform
qpainter::transform
void qpainter::settransform(const qtransform &transform, bool combine )
廢棄的函式(從qt4.3開始,qtransform取代了qmatrix的位置,下列函式已不建議使用):
qpainter::setworldmatrix
qpainter::worldmatrix
...視窗視口變換
直接相關:
qpainter::setviewtransformenabled
啟用、禁用視口變換
qpainter::viewtransformenabled
返回 視口變換的狀態
qpainter::setviewport
設定視口(物理座標)
qpainter::setwindow
設定視窗(與視口是同一矩形,中間態座標)
該變換是簡單的線性變換。
復合變換
視窗視口變換和世界變換的復合:
qpainter::combinedtransform
qtransform qpainter::combinedtransform() const
典型應用:對滑鼠事件的響應中,將座標從物理座標變換成qpainter需要的邏輯座標
仿射變換、透射變換
qt4.3(包括)之前的qmatrix只支援仿射變換(affine transformation)。
平移(translation)
縮放(scale)
旋轉(rotation)
剪下(shear)
qtransform支援透射變換(perspective transformation)。
m11
m12
m13
m21
m22
m23
m31dx
m32dy
m33
變換關係:
x' = m11*x + m21*y + dx
y' = m22*y + m12*x + dy
if (is not affine)
射影幾何學、仿射幾何學、微分幾何學
參考
Qt 座標系統
1 move 移動位置 對於父視窗 主視窗 座標系統相對於螢幕 原點 相對於螢幕左上角 x 往右遞增 y 往下遞增 move 100,100 座標相對於螢幕 子視窗,座標系統相對于父視窗 原點 相對於視窗空白區域左上角 不包括邊框 x 往右遞增 y 往下遞增 qpushbutton b1 new q...
Qt座標系統
座標變換 world corrdinates window coordinates device coordinates 邏輯座標 世界變換 中間態座標 視窗視口變換 物理座標 在預設情況下,3個座標系是一致的。世界變換 qpainter setworldmatrixenabled 啟用 禁用世界變...
Qt 座標系統
以螢幕的左上角為原點即 0,0 點,從左向右為x軸正向,從上向下為y軸正向,這整個螢幕的座標系統就用來定位頂層視窗 此外,視窗內部也有自己的座標系統,它依然以左上角作為原點,從左向右為x軸正向,從上向下為y軸正向,原點 x軸 y軸圍成的區域叫做client area 客戶區 在客戶區的周圍則是標題欄...