Flutter 可以將部件用 Matrix4 包裝起來, 透過它將部件作旋轉, 位移, 放大等特效.可以參考文章:https://medium.com/flutter-community/advanced-flutter-matrix4-and-perspective-transformations-a79404a0d828
1. 旋轉 X 軸時, 使用的轉換矩陣是[1,0,0,0; 0, cos, sin, 0; 0,-sin, cos, 0; 0,0,0,1], 座標運算一下:
x' = x, y' = y * cos(θ) + z * sin(θ), z' = -y * sin(θ) + z * cos(θ)
因為畫面 z = 0 => x' = x, y' = y * cos(θ), 可以預見 X 軸不變, 但 Y 軸變短了, 因為|cos(θ)| <= 1
2. 旋轉 Y 軸時, 使用的轉換矩陣是[cos,0,-sin,0; 0, 1, 0, 0; sin,0,cos,0; 0,0,0,1], 座標運算一下:
x' = x * cos - z *sin, y' = y, z' = x * sin + z *cos
因為畫面 z = 0 => x' = x * cos, y' = y , 可以預見 Y 軸不變, 但 X 軸變短了, 因為|cos(θ)| <= 1
3.旋轉 Z 軸, 使用的轉換矩陣是[cos, sin,0, 0; -sin,cos,0,0; 0,0,1, 0; 0,0,0,1], 座標運算一下:
x' = x * cos(θ) + y *sin(θ), y' = -x * sin(θ) + y * cos(θ), z' = z
當所有座標點, 以左上角當原點 (0,0, 0)為參考點, 同時旋轉旋轉 Z 軸 θ 時, 各座標點相對位置將一如往常, 物體並不會變形
沒有留言:
張貼留言