uiview有乙個transform屬性,cgaffinetransform 可以操控二維平面內控制項的平移、旋轉和縮放。
這三種型別的圖形變換可以使用 cgaffinetransformmake
(, , , , , )
通過設定引數實現(其實為矩陣中的引數設定)。但ios開發中,蘋果為我們提供了更加方便的介面,如下:
/*
cgaffinetransformmaketranslation:
以初始位置為基準進行平移變換
cgaffinetransformtranslate:
實現以乙個已經存在的形變為基準,在x軸方向上平移x單位,在y軸方向上平移y單位
初始化:
cgaffinetransform transform = cgaffinetransformidentity;
cgaffinetransformidentity是系統提供的乙個常量,
the identity transform: [1 0 0 1 0 0] (和原圖一樣的transform)
*/self.imgview.transform = cgaffinetransformmaketranslation(100, 100);
self.imgview.transform = cgaffinetransformtranslate(cgaffinetransformidentity, 100, 100);
// 在x、y軸平移100也可以這樣設定
self.imgview.transform = cgaffinetransformmake(1, 0, 0, 1, 100, 100);
cgaffinetransform transform = cgaffinetransformmakerotation(-m_pi_2);
self.imgview.transform = cgaffinetransformrotate(transform, m_pi_2);
self.imgview.transform = cgaffinetransformscale(cgaffinetransformidentity, 2.0, 2.0);
self.imgview.transform = cgaffinetransformmakescale(2.0, 2.0);
了解仿射變換矩陣計算原理,回顧一下線性代數:
參考文章:
初始化: cgaffinetransform transform = cgaffinetransformidentity;
cgaffinetransformidentity是系統提供的乙個常量,/* the identity transform: [ 1 0 0 1 0 0 ]. */(和原圖一樣的transform);
cgaffinetransform transform = cgaffinetransformmake(cgfloat a,cgfloat b,
cgfloat c,cgfloa td,cgfloat tx,cgfloat ty)
下面是原始的(預設的)transform
uiview預設的
引數結構
人後我們再來看它的計算公式:3 x 3矩陣合成得到(x`,y`,1)
(x`,y`,1)公式
矩陣演算法公式:
演算法公式
x' 和 y' 是我們轉換後的目標座標值,x、y是已知原始位置的座標值。
我們建立兩個大小和位置一樣的檢視,保持背景檢視恆定不變,並將上層的檢視做伸縮變換:
nslog(@"變換前座標----> x:%f y:%f w:%f h:%f", self.testview.frame.origin.x, self.testview.frame.origin.y, self.testview.frame.size.width, self.testview.frame.size.height);
[uiview animatewithduration:2 animations:^ completion:^(bool finished) ];
將設定的引數帶入方程可得:
x' = 0.2*x
y' = y
所以該引數是將testview檢視橫向x軸伸縮為原來的0.2倍:
檢視列印前後座標:
只有寬度和x座標點發生了變化。
仿射變換transform
void viewdidload void clickmeaction 2 仿射變換比例 uiview animatewithduration 1animations 3 仿射變換旋轉 uiview animatewithduration 1animations 4 三種變換的結合 1 transl...
剛性仿射變換演算法 仿射變換
哎慢慢來吧,感覺一大堆東西看不懂.仿射變換就是affine transformation 這是乙個跟影象相關的變換,影象變換是通過矩陣變換來實現的。影象的幾個基本變換有平移 縮放 旋轉 仿射 透視。剛性變換 就像這個題目這樣顯示的,就是非常強硬的變換,在這個二維平面上開始是怎麼樣,後來就是怎麼樣 仿...
warpAffine OPENCV 仿射變換原理
在opencv中,目前並沒有現成的函式直接用來實現影象旋轉,它是用仿射變換函式cv warpaffine來實現的,此函式目前支援4種插值演算法,最近鄰 雙線性 雙三次 蘭索斯插值,如果傳進去的引數為基於畫素區域關係插值演算法 inter area 則按雙線性插值。通常使用2 3矩陣來表示仿射變換 其...