Windows GDI中的座標系 二

2021-08-21 22:44:50 字數 3018 閱讀 8214

windows gdi中的座標系(二)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

by leezy_2000

2003-10-21 16:13

一、邏輯空間的座標是如何轉化為裝置空間的座標的?

讓我們先來澄清邏輯座標空間內部是如何轉化的。

世界座標空間到頁面座標空間的變換(二維affine(註三)變換):

此過程中涉及到的各種變換,比如:相等、平移、縮放、映像、旋轉、剪下、合併等都是通過為affine矩陣的各個成員指定適當的值來實現的。

這個矩陣所對應的結構如下:

typedef struct _xform  xform, *pxform;
乙個世界座標空間的點轉換為頁面座標空間的點的公式為:

xpage=xworld*em11+yworld*em21+edx;

ypage=xworld*em12+yworld*em22+edy;(公式一)

其中xworld、yworld為世界座標空間的點。xpage、ypage為上述點在頁面座標空間中對應的位置。至於與affine變換的數學屬性及如何才能實現頁面的相等、平移、縮放、映像、旋轉、剪下、合併此處不進行詳細說明,因為那樣將使這篇文章的規模膨脹許多(註四)。

頁面座標空間到裝置座標空間的轉換:

這個過程涉及到幾個概念,他們分別是:

視口原點:當前頁面座標空間所認為的裝置座標空間的原點位置。用setviewportorgex、getviewportorgex分別進行設定和讀取。用這兩個函式進行操作時,所涉及的座標為裝置空間的座標。

視口範圍:視口範圍並不是乙個絕對的用於表示裝置座標空間大小的值。而是乙個相對值,它同視窗範圍的比例最終決定頁面座標空間到裝置座標空間是一種縮小還是放大的轉換。用setviewportextexgetviewportextex對視口範圍進行訪問。

視窗原點:頁面座標空間的原點。用setwindoworgex、getwindoworgex對視窗原點進行訪問,所涉及的座標為邏輯座標。

視窗範圍:見視口範圍的說明。用setwindowextexgetwindowextex進行訪問。

由了兩個座標空間的原點值和範圍的比例值,在這兩個座標空間間進行座標轉換也就不是什麼太難的事了。比較容易的可以得出下面的公式:

頁面座標空間到裝置座標空間:

xdevice=(xpage-worgx)*vextx /wextx+vorgx;

ydevice=(ypage-worgy)*vexty /wexty+vorgy;(公式二)

其中(worgx,worgy)為視窗原點。(vorgx vorgy,)為視口原點。(wextx, wexty)為視窗範圍。(vextx,vexty)為視口範圍。

裝置座標空間到頁面座標空間的轉換大家可以自己推導。

為了更好的理解座標空間的轉換,我們將利用上述兩組公式,動手來實現自己的lptodp。我們的這個函式將只適合nt類的平台。(9x沒有世界座標空間,會更簡單)具體實現見原始碼2。實現mylptodp的過程比較簡單,此處僅對要用到的幾個主要函式做些說明。

int getgraphicsmode(

hdchdc

// handle to device context

);

這個函式用來得到指定dc的圖形模式。圖形模式有兩種gm_compatible和gm_advanced
只有在gm_advanced才可能使用世界座標空間。可以用setgraphicsmode在兩者間切換。

bool getworldtransform(

hdchdc

,// handle to device context

lpxformlpxform

// transformation

);

此函式用來得到與當前dc相關聯的affine矩陣。通過公式一,
應該可以知道預設的affine矩陣具有的形式。

mylptodp雖然有返回值但此值無意義,並且實現過程中也並沒有進行任何出錯處理。

見原始碼2。

二、關於gdi+的補充說明

就各種座標空間而言gdi+的更新更多的體現在操作方式上而非在本質上。理解了上述概念再看gdi+的座標空間,會有一種一目了然感覺。而本文更側重於概念的樹立,因此就不單獨再對gdi+進行特別說明了。

註一:這裡僅是一種可能的情形,具體的轉換後數值要由當前的座標空間來具體確定。

註二:我個人認為gdi的座標空間其實就是座標系,但由於對應英文術語為coordinate space,並且大多書籍譯為座標空間,所以此處亦如是。

如下圖:

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />

如上這幾種變換被稱作linear transformations。但通過乘上2x2的矩陣你無法完成平移一類的操作。為達到平移的目的就還需要加上一組偏移量(分別對應於x軸和y軸)。乙個2x2矩陣和一組偏移量就構成了affine矩陣。

Windows GDI中的座標系 一

windows gdi中的座標系 一 by leezy 2000 2003 10 21 16 13 如果你用gdi輸出過文字 位圖 或者繪製過如直線 曲線的圖形,那麼你必然使用過座標系。螢幕解析度為96dpi dot per inch 印表機的解析度通常為600dpi,而你使用如 moveto hd...

大地座標系 地理座標系 投影座標系

大地座標系 是大地測量中以參考橢球面為基準面建立起來的座標系。地面點的位置用 大地經度 大地緯度和大地高度 表示。大地座標系的確立包括選擇乙個橢球 對橢球進行定位和確定大地起算資料。乙個形狀 大小和定位 定向都已確定的地球橢球叫參考橢球。參考橢球一旦確定,則標誌著大地座標系已經建立。大地座標系是一種...

gazebo中的座標系

1 gazebo中link和joint中都有origin的元素。弄了半天好像是明白了。link定義了各個部件的幾何模型,joint定義了各幾何模型直接的座標位置。joint中的origin就是這種連線關係建立的座標系的原點和朝向。比如,就是在世界座標系的 1,0,1 這個點建立了乙個子座標系。而li...