transforms ctm, 轉換矩陣
quartz轉換實現的原理:quartz把繪圖分成兩個部分,
使用者空間,即和裝置無關,
裝置空間,
使用者空間和裝置空間中間存在乙個轉換矩陣 : ctm
本章實質是講解ctm
quartz提供的3大功能
移動,旋轉,縮放
演示如下,首先載入一張
void cgcontextdrawimage (
cgcontextref c,
cgrect rect,
cgimageref image
);
移動函式
cgcontexttranslatectm (mycontext, 100, 50);
旋轉函式
include static inline double radians (double degrees)
cgcontextrotatectm (mycontext, radians(–45.));
縮放
cgcontextscalectm (mycontext, .5, .75);
翻轉, 兩種轉換合成後的效果,先把移動到右上角,然後旋轉180度
cgcontexttranslatectm (mycontext, w,h);cgcontextrotatectm (mycontext, radians(-180.));
組合幾個動作
cgcontexttranslatectm (mycontext, w/4, 0);cgcontextscalectm (mycontext, .25, .5);
cgcontextrotatectm (mycontext, radians ( 22.));
cgcontextrotatectm (mycontext, radians ( 22.));cgcontextscalectm (mycontext, .25, .5);
cgcontexttranslatectm (mycontext, w/4, 0);
上面是通過直接修改當前的ctm實現3大效果,下面是通過建立affine transforms,然後連線ctm實現同樣的3種效果這樣做的好處是可以重用這個affine transforms
應用affine transforms 到ctm的函式
void cgcontextconcatctm (
cgcontextref c,
cgaffinetransform transform
);creating affine transforms
移動效果
cgaffinetransform cgaffinetransformmaketranslation (
cgfloat tx,
cgfloat ty
);cgaffinetransform cgaffinetransformtranslate (
cgaffinetransform t,
cgfloat tx,
cgfloat ty
);旋轉效果
cgaffinetransform cgaffinetransformmakerotation (
cgfloat angle
);cgaffinetransform cgaffinetransformrotate (
cgaffinetransform t,
cgfloat angle
);縮放效果
cgaffinetransform cgaffinetransformmakescale (
cgfloat sx,
cgfloat sy
);cgaffinetransform cgaffinetransformscale (
cgaffinetransform t,
cgfloat sx,
cgfloat sy
);反轉效果
cgaffinetransform cgaffinetransforminvert (
cgaffinetransform t
);只對區域性產生效果
cgrect rect,
cgaffinetransform t
);判斷兩個affinetrans是否相等
bool cgaffinetransformequaltotransform (
cgaffinetransform t1,
cgaffinetransform t2
);獲得affine transform
cgaffinetransform cgcontextgetuserspacetodevicespacetransform (
cgcontextref c
);下面的函式只起到檢視的效果,比如看一下這個使用者空間的點,轉換到裝置空間去座標是多少
cgpoint cgcontextconvertpointtodevicespace (
cgcontextref c,
cgpoint point
);cgpoint cgcontextconvertpointtouserspace (
cgcontextref c,
cgpoint point
);cgsize cgcontextconvertsizetodevicespace (
cgcontextref c,
cgsize size
);cgsize cgcontextconvertsizetouserspace (
cgcontextref c,
cgsize size
);cgrect cgcontextconvertrecttodevicespace (
cgcontextref c,
cgrect rect
);cgrect cgcontextconvertrecttouserspace (
cgcontextref c,
cgrect rect
);ctm真正的數學行為
這個轉換矩陣其實是乙個 3x3的 舉證
如下圖
下面舉例說明幾個轉換運算的數學實現
x y 是原先點的座標
下面是從使用者座標轉換到裝置座標的計算公式
下面是乙個identity matrix,就是輸入什麼座標,出來什麼座標,沒有轉換
最終的計算結果是 x=x,y=y,
可以用函式判斷這個矩陣是不是乙個 identity matrix
bool cgaffinetransformisidentity ();
移動矩陣
縮放矩陣旋轉矩陣
旋轉加移動矩陣
transforms CTM,變換矩陣
quartz轉換實現的原理 quartz把繪圖分成兩個部分,使用者空間,即和裝置無關,裝置空間,使用者空間和裝置空間中間存在乙個轉換矩陣 ctm 本章實質是講解ctm quartz提供的3大功能 移動,旋轉,縮放 演示如下,首先載入一張 移動函式cgcontexttranslatectm mycon...
Oracle轉換(顯示轉換)
三種常用的轉換函式 1.to char number character date character 2.to number character number 3.to date character date 一 轉換函式 1.日期到字串的轉換中 to char 引數一,引數二 引數1 日期型值或...
資料轉換 強制轉換
1 2 強制型別轉換 3 1.特點 需要進行特殊的格式處理,不能自動完成。4 2.格式 範圍小的型別 範圍小的變數名 範圍小的型別 原本範圍大的資料 56 注意事項 7 1.強制型別轉換一般不推薦使用,因為有可能發生精度損失 資料溢位。8 2.byte short char這三種型別都可以發生數 算...