transforms CTM,變換矩陣

2021-06-22 18:23:27 字數 2161 閱讀 6541

quartz轉換實現的原理:quartz把繪圖分成兩個部分,

使用者空間,即和裝置無關,

裝置空間,

使用者空間和裝置空間中間存在乙個轉換矩陣 : ctm

本章實質是講解ctm

quartz提供的3大功能

移動,旋轉,縮放

演示如下,首先載入一張

移動函式
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的函式
creating affine transforms
移動效果
旋轉效果
縮放效果
反轉效果
只對區域性產生效果
判斷兩個affinetrans是否相等
獲得affine transform
下面的函式只起到檢視的效果,比如看一下這個使用者空間的點,轉換到裝置空間去座標是多少
ctm真正的數學行為
這個轉換矩陣其實是乙個 3x3的 舉證
如下圖

下面舉例說明幾個轉換運算的數學實現

x y 是原先點的座標

下面是從使用者座標轉換到裝置座標的計算公式

下面是乙個identity matrix,就是輸入什麼座標,出來什麼座標,沒有轉換

最終的計算結果是 x=x,y=y,

可以用函式判斷這個矩陣是不是乙個 identity matrix

移動矩陣
縮放矩陣

旋轉矩陣

旋轉加移動矩陣

Transforms CTM, 轉換矩陣

transforms ctm,轉換矩陣 quartz轉換實現的原理 quartz把繪圖分成兩個部分,使用者空間,即和裝置無關,裝置空間,使用者空間和裝置空間中間存在乙個轉換矩陣 ctm 本章實質是講解ctm quartz提供的3大功能 移動,旋轉,縮放 演示如下,首先載入一張 void cgcont...

仿射變換和射影變換 等距變換 相似變換

參考 射影變換組成了乙個群,這個群被稱為射影變換群,n n可逆實矩陣稱為一般線性群gl n 當把相差非零純量因子的矩陣都視為等同時,便得到射影對映群,記為pl n 在平面,射影變換為pl 3 射影變換在平面的變換矩陣形式如下,也就是乙個3 3的矩陣。其中當上面矩陣的最後一行為 0,0,1 時的變換就...

基變換與座標變換

近來正在看 3d math primer for graphics and game development 3d數學基礎 圖形與遊戲開發 清華大學出版社,當看到第八章 矩陣與線性變換時,不禁產生疑問 當繞x軸旋轉時,求出旋轉後的基向量矩陣rx 1 0 0 rx p q r 0 cos sin 0 ...