關於座標空間和轉換的說明

一、座標空間
1、Win32應用程序設計接口(API)使用四種座標空間:世界座標系空間、頁面空間、設備空間和物理設備空間。應用程序運用世界座標系空間對圖形輸出進行旋轉,斜切或者反射。
2、Win32 API把世界座標系空間和頁面空間稱爲邏輯空間,最後一種座標空間(即物理設備空間)通常指應用程序窗口的客戶區。但是它也包括整個桌面、完整的窗口(包括框架、標題欄和菜單欄)或打印機的一頁或繪圖儀的一頁紙。物理設備的尺寸隨顯示器、打印機或繪圖儀所設置的尺寸而變化。
 
二、轉換
1、如要在物理設備上繪製輸出,Windows把一個矩形區域從一個座標空間拷貝到(或映射到)另一個座標空間,直至最終完整的輸出呈現在物理設備上(通常是屏幕或打印機)。
2、如果該應用程序調用了SetWorldTransform函數,那麼映射就從應用程序的世界座標系空間開始。否則,映射在頁面空間中進行.在Windows把矩形區域的每一點從一個空間拷貝到另一個空間,它採用了一種被稱作轉換的算法,轉換是把對象從一個座標系空間拷貝到另一個座標系空間時改變(或轉變)這一對象的大小、方位、和形態。儘管轉換把對象看成一個整體,但它也作用於對象中的每一點或每一條線。
下面是運用SetWorldTransform函數而進行的一個典型轉換
 
三、頁面空間到設備空間的轉換
1、頁面空間到設備空間的轉換是原Windows接口的一部分,這種轉換確定與一特定設備描述表相關的所有圖形輸出的映射方式。
2、所謂映射方式是指確定用於繪圖操作的單位大小的一種量度轉換。映射方式是一種影響幾乎任何客戶區繪圖的設備環境屬性。另外還有四種設備環境屬性:窗口原點、視口原點、窗口範圍和視口範圍,這四種屬性與映射方式密切相關。
3、頁面空間到設備空間的轉換所用的是兩個矩形的寬與高的比率(稱爲轉換因子),其中頁面空間中的矩形被稱爲窗口,設備空間中的矩形被稱爲視口。Windows把窗口原點映射到視口原點,把窗口範圍映射到視口範圍,就完成了這種轉換。如下圖所示:
 
 
四、設備空間到物理空間轉換
1、設備空間到物理空間的轉換有幾個獨特之處:它只限於平移,並由Windows的窗口管理部分控制。這種轉換的唯一用途是確保設備空間的原點被映射到時物理設備上的適當點上。沒有函數能設置這種轉換,也沒有函數可以獲取有關數據。
 
五、默認轉換
1、一旦應用程序建立了設備描述表,並立即開始調用GDI繪圖或輸出函數,則運用默認頁面空間到設備空間的轉換和設備空間到時客戶區的轉換(在應用程序調用
SetWorldTransform函數之前,不會出現世界座標空間到頁面空間的轉換)
2、默認頁面空間到設備空間的轉換結果是一對一的映射,即頁面空間上給出的一點映射到設備空間的一個點。這種轉換沒有以矩陣指定,而是通過把視口寬除以窗口寬,把視口高除以窗口高而得到的。在默認的情況下,視口尺寸爲1x1個象素,窗口尺寸爲1x1頁單位。
3、設備空間到時物理設備(客戶區、桌面或打印機)的轉換結果總是一對一的。即設備空間的一個單位總是與客戶區、桌面、或打印機上的一個單位相對應。這一轉換的唯一用途是平移。無論窗口移到桌面的什麼位置,它永遠確保輸出能夠正確無誤地出現在窗口上。
4、默認轉換的一個獨特之處是設備空間的應用程序窗口的y軸方向。在默認的狀態
下,y軸正向朝下,負y方向朝下。
 
六、邏輯座標與設備座標
1、幾乎所有的GDI函數中使用的座標值都是採用的邏輯單位,Windows必須將邏輯單位轉換爲"設備單位",即像素。這種轉換是由映射方式,窗口和視口的原點以及窗口和視口的範圍所控制的。
2、Windows對所有的消息(如WM_SIZE,WM_MOUSEMOVE,WM_LBUTTONDOWN,WM_LBUTTONUP),所有的非GDI函數和一些GDI函數(例如GetDeviceCaps函數),永遠使用設備座標。
3、"窗口"是基於邏輯座標的,邏輯座標可以是象素、毫米、英寸等單位;"視口"是基於設備座標(象素)的。通常,視口和客戶區是相同的。
4、缺省的映射模式爲MM_TEXT。在這種映射模式下,邏輯單位和設備單位相同。
 
七、邏輯座標和設備座標的相互轉換
1、窗口(邏輯)座標轉換爲視口(設備)座標的兩個公式:
2、視口(設備)座標轉換爲窗口(邏輯)座標的兩個公式:
 
八、在MM_TEXT映射方式下邏輯座標和設備座標的相互轉換
1、窗口(邏輯)座標轉換爲視口(設備)座標的兩個公式:
2、視口(設備)座標轉換爲窗口(邏輯)座標的兩個公式:
 
九、視口和窗口原點的改變
1、CDC中提供了兩個成員函數SetViewportOrg和SetWindowOrg,用來改變視口和窗口的原點。
2、如果將視口原點設置爲(xViewOrg,yViewOrg),則邏輯點(0,0)被映射爲設備點
(xviewOrg,yViewOrg)。如果將窗口原點改變爲(xWinOrg,yWinOrg),則邏輯點
(xWinOrg,yWinOrg)將會被映射爲設備點(0,0),即左上角。
3、不管對窗口和視口原點作什麼改變,設備點(0,0)始終是客戶區的左上角。
 
 
注:以上資料及圖片是根據孫鑫老師VC++視頻教程而作的筆記,所有權歸孫鑫老師所有,轉載請註明所有權!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章