個人Qtの理解のシステム変換処理を座標
QTは、変換個人的な理解機構座標
物理座標、論理座標系:所与の描画装置のため、図面はときに、2つの座標系があります。実際の物理はQTで、座標系の座標、描画装置上の単位長さ当たりの画素長、右のX軸成長、Y軸方向の成長である描画装置の左上隅に原点。システム論理は、その起源ない実用的な意義の単位長さ、右のX軸成長、Y軸方向の成長抽象座標系です。
場合、描画画像は、論理座標系に描かれ、その後窓を介して-ビューポートマッピング、マッピングロジックは、世界は、物理座標系に座標系を変換します。さらに、論理的、物理座標系にマッピングされた画像の座標系上にプロット。
注: -ビューポートマッピング、そして世界を変える個人的な理解では、ウィンドウを実施することです。(しかし、記述された文書は、世界の変換、その後、ウィンドウになることです-これは窓から初めてではない場合は、ビューポートマッピングを、把握することはできません-ビューポートマッピング抽象的論理座標系の特定、その世界を変換しています)座標系の具体的な意味と、論理単位長さの起源を決定するための論理的な座標系?の意味は何ですか。
最初のウィンドウ(窓)である-ビューポート(ビューポート)変換:
重要なことを理解する:物理ビューポートに基づいて論理的な座標系に基づいて、ウィンドウは、座標系が。次の2つの関数は、座標系矩形論理画面に基づいて、物理ビューポートの矩形座標に基づくことができます。
QPainterの:: SETWINDOWのボイド(int型のX、Yはint、int型の幅、高さint型)
のボイドQPainterの:: SETVIEWPORT(int型のX、Yはint、int型の幅、高さint型)
窓-ビューポートを物理座標に論理座標をマッピングし、2つの長方形によって変換される(論理座標系を具現化すると言うことができます)。論理座標系を描く、物理座標系を移動させる方法によって決定される、そのような論理座標系を介してウィンドウが長方形のビューポート矩形一致この場合動くことは、物理座標系上にマッピングされた延伸することにより得られます。
世界の変換が続きます。(現在私が知っている)は、世界を変換する4つの方法があります
(1)翻訳()翻訳が。
(2)スケール()ストレッチ、スケーリング。
(3)回転()回転します。
(4)剪断()ツイスト。
変換世界はすでにそのパン、ストレッチング、拡大縮小、回転、歪みや他の操作上のシステムロジックをベース座標に具現されます。世界の変換のそれぞれが世界の最後の変換に基づいて行われていることを注意してください。世界の変換プロセスは、ステートマシンの遷移過程です。従って翻訳を得並進及び回転に続い結果が異なっている、回転が続きます。
上記のマッピングを介して、論理座標系に描かれた画像は、物理座標系に画像を変換することができるであろう。
注:ウィンドウ-ビューポートのみ物理座標系のマッピング方法に論理座標系の変換を提供するために、論理座標系の画像ウィンドウ矩形にマッピングされる外描かれる切り出し領域において役割を果たしません物理上の座標系と表示されます。
何SETWINDOW窓タイルを指定しない場合、デフォルト設定では、デバイスを描画する矩形のウィンドウ矩形です。このデフォルト設定は、ビューポート矩形(のような描画装置のQWidget、QPixmapの何か)に適用されます。
例:論理座標(ウィンドウ)
1 QPainterのペインタ(この); 2点の // 論理座標(-50、-50)は、ビューポート(0,0)にマッピングされ、ウィンドウサイズが(100,100)である 3。 painter.setWindow( - 50 - 50、100、100 ); 4 painter.setBrush(Qtの::グリーン); 5 // のdrawRectパターンがちょうどビューポートのサイズ変更として、論理座標に描画され、論理座標は、適応形に、変更することができます効果; 6 painter.drawRect(0、0、20、20 ); 7 // フォームのデフォルトサイズ(400、300)、論理窓適応ビューポートマッピング座標(200、150)は、矩形のサイズ(80、60 );
例:物理座標(ビューポート)
1 QPainterのペインタ(この); 2 INTサイド= Qminを(幅()、高さ()); 3 INT X =(幅()/ 2 ) 。4 INT Y =(高さ()/ 2 ) 。5 // 意志、ビューポート(デバイスの物理座標を描く)は、最小の幅と高さの形の元のサイズ取り、元のフォーム、元の形の中心の開始座標値の半分に設定されている 。6 painter.setViewport(X、Y、側面、側) 。7 painter.setWindow(0、0、100、100 ) 。8 painter.setBrush(Qtの::グリーン) 。9 painter.drawRect(0、0、20、200);