亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

iPhone圖像拉伸(傾斜)

iPhone圖像拉伸(傾斜)

慕后森 2019-11-22 15:35:57
如何歪斜圖像?例如,每個角都有一個CGPoint,坐標為p1,p2,p3,p4。然后,我需要設置-p4.x + = 50,p4.y + = 30。因此,應在2D透視圖中拉伸此角(p4),并使圖像變形。替代文字(來源:polar-b.com)我嘗試使用CATransform3D,但是似乎不能以這種方式完成,因為這只是改變視角(旋轉,使一側更近/更遠)。也許CGAffineTransform有用嗎?如果您知道答案,請編寫示例代碼。
查看完整描述

3 回答

?
慕田峪7331174

TA貢獻1828條經驗 獲得超13個贊

我在Swift中嘗試了一個很棒的答案@KennyTM,并收到一個錯誤“表達式太復雜,無法在合理的時間內解決”。


因此,這是Swift的簡化版本:


let y21 = y2a - y1a

let y32 = y3a - y2a

let y43 = y4a - y3a

let y14 = y1a - y4a

let y31 = y3a - y1a

let y42 = y4a - y2a


let a = -H*(x2a*x3a*y14 + x2a*x4a*y31 - x1a*x4a*y32 + x1a*x3a*y42)

let b = W*(x2a*x3a*y14 + x3a*x4a*y21 + x1a*x4a*y32 + x1a*x2a*y43)

let c0 = -H*W*x1a*(x4a*y32 - x3a*y42 + x2a*y43)

let cx = H*X*(x2a*x3a*y14 + x2a*x4a*y31 - x1a*x4a*y32 + x1a*x3a*y42)

let cy = -W*Y*(x2a*x3a*y14 + x3a*x4a*y21 + x1a*x4a*y32 + x1a*x2a*y43)

let c = c0 + cx + cy


let d = H*(-x4a*y21*y3a + x2a*y1a*y43 - x1a*y2a*y43 - x3a*y1a*y4a + x3a*y2a*y4a)

let e = W*(x4a*y2a*y31 - x3a*y1a*y42 - x2a*y31*y4a + x1a*y3a*y42)

let f0 = -W*H*(x4a*y1a*y32 - x3a*y1a*y42 + x2a*y1a*y43)

let fx = H*X*(x4a*y21*y3a - x2a*y1a*y43 - x3a*y21*y4a + x1a*y2a*y43)

let fy = -W*Y*(x4a*y2a*y31 - x3a*y1a*y42 - x2a*y31*y4a + x1a*y3a*y42)

let f = f0 + fx + fy;


let g = H*(x3a*y21 - x4a*y21 + (-x1a + x2a)*y43)

let h = W*(-x2a*y31 + x4a*y31 + (x1a - x3a)*y42)

let i0 = H*W*(x3a*y42 - x4a*y32 - x2a*y43)

let ix = H*X*(x4a*y21 - x3a*y21 + x1a*y43 - x2a*y43)

let iy = W*Y*(x2a*y31 - x4a*y31 - x1a*y42 + x3a*y42)

var i = i0 + ix + iy



let epsilon = CGFloat(0.0001);

if fabs(i) < epsilon {

    i = epsilon * (i > 0 ? 1 : -1);

}


return CATransform3D(m11: a/i, m12: d/i, m13: 0, m14: g/i, m21: b/i, m22: e/i, m23: 0, m24: h/i, m31: 0, m32: 0, m33: 1, m34: 0, m41: c/i, m42: f/i, m43: 0, m44: 1.0)


查看完整回答
反對 回復 2019-11-22
  • 3 回答
  • 0 關注
  • 794 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號