坐標空間

坐標空間

Microsoft Windows下的程序運用坐標空間和轉換來對圖形輸出進行縮放、旋轉、平移、斜切和反射。

簡介


坐標空間
zuòbiāo kōngjiān
[coordinate space] 通常意義下三維幾何空間的名稱,以區別於各種符號相空間

VC中的坐標空間


一個坐標空間是一個平面的空間,通過使用兩個相互垂直並且長度相等的軸來定位二維對象。Win32應用程序設計介面(API)使用四種坐標空間:世界坐標系空間、頁面空間、設備空間、和物理設備空間。應用程序運用世界坐標系空間對圖形輸出進行旋轉、斜切或者反射。
Win32 API把世界坐標系空間和頁面空間稱為邏輯空間;最後一種坐標空間(即物理設備空間)通常指應用程序窗口的客戶區;但是它也包括整個桌面、完整的窗口(包括框架、標題欄和菜單欄)或印表機的一頁或繪圖儀的一頁紙。物理設備的尺寸隨顯示器、印表機或繪圖儀所設置的尺寸而變化。

轉換

如要在物理設備上繪製輸出,Windows把一個矩形區域從一個坐標空間拷貝到(或映射到)另一個坐標空間,直至最終完整的輸出呈現在物理設備上(通常是屏幕或印表機)。
如果該應用程序調用了SetWorldTransform函數,那麼映射就從應用程序的世界坐標系空間開始;否則,映射在頁面空間中進行。在Windows把矩形區域的每一點從一個空間拷貝到另一個空間時,它採用了一種被稱作轉換的演演算法,轉換是把對象從一個坐標空間拷貝到另一個坐標空間時改變(或轉變)這一對象的大小、方位、和形態,儘管轉換把對象看成一個整體,但它也作用於對象中的每一點或每條線。
頁面空間到設備空間的轉換
頁面空間到設備空間的轉換是原Windows介面的一部分。這種轉換確定與一特定設備描述表相關的所有圖形輸出的映射方式。
所謂映射方式是指確定用於繪圖操作的單位大小的一種量度轉換。映射方式是一種影響幾乎任何客戶區繪圖的設備環境屬性。另外還有四種設備環境屬性:窗口原點、視口原點、窗口範圍和視口範圍,這四種屬性與映射方式密切相關。
頁面空間到設備空間的轉換
頁面空間到設備空間的轉換所用的是兩個矩形的寬與高的比率,其中頁面空間中的矩形被稱為窗口,設備空間中的矩形被稱為視口,Windows把窗口原點映射到視口原點,把窗口範圍映射到視口範圍,就完成了這種轉換。

默認轉換

一旦應用程序建立了設備描述表,並立即開始調用GDI繪圖或輸出函數,則運用默認頁面空間到設備空間的轉換和設備空間到客戶區的轉換(在應用程序調用SetWorldTransform函數之前,不會出現世界坐標空間到頁面空間的轉換)。
默認頁面空間到設備空間的轉換結果是一對一的映射;即頁面空間上給出的一點映射到設備空間的一個點。正如前文講到的,這種轉換沒有以矩陣指定,而是通過把視口寬除以窗口寬,把視口高除以窗口高而得出的。在默認的情況下,視口尺寸為1x1個象素,窗口尺寸為1x1頁單位。
設備空間到物理設備(客戶區、桌面或印表機)的轉換結果總是一對一的;即設備空間的一個單位總是與客戶區、桌面、或印表機上的一個單位相對應。這一轉換的唯一用途是平移。無論窗口移到桌面的什麼位置,它永遠確保輸出能夠正確無誤地出現在窗口上。
默認轉換的一個獨特之處是設備空間和應用程序窗口的y軸方向。在默認的狀態下,y軸正向朝下,負y方向朝上。

邏輯坐標和設備坐標

幾乎在所有的GDI函數中使用的坐標值都是採用的邏輯單位。Windows必須將邏輯單位轉換為“設備單位”,即像素。這種轉換是由映射方式、窗口和視口的原點以及窗口和視口的範圍所控制的。
Windows對所有的消息(如WM_SIZE、WM_MOUSEMOVE、WM_LBUTTONDOWN、WM_LBUTTONUP),所有的非GDI函數和一些GDI函數(例如GetDeviceCaps函數),永遠使用設備坐標。
“窗口”是基於邏輯坐標的,邏輯坐標可以是象素、毫米、英寸等單位;“視口”是基於設備坐標(象素)的。通常,視口和客戶區是相同的。
預設的映射模式為MM_TEXT。在這種映射模式下,邏輯單位和設備單位相同。