Android Matrix sử dụng skia và nó hàng-lớn có nghĩa là chỉ số như sau
0 1 2
3 4 5
6 7 8
tôi phản OpenGL sử dụng các chỉ số như vậy
0 3 6
1 4 7
2 5 8
"Ý nghĩa" giống hệt nhau về vị trí ma trận.
a b tx
c d ty
0 0 1
a, b, c, d mã hóa quy mô & xoay cùng một lúc. tx/ty mã hóa dịch. Nếu bạn làm m.getValues (vals); sau đó vals [2] == tx, vals [5] == ty, và phần còn lại là thẳng về phía trước. Cách tốt nhất để trích xuất bản dịch là tạo một vectơ
float[] point = {0, 0};
Sau đó ánh xạ nó và xem nó kết thúc ở đâu và đó là bản dịch của bạn (chính xác là (tx, ty).Trong những trường hợp hiếm hoi của nó không
để có được bản đồ quy mô một điểm thứ hai
float[] point2 = {1, 0};
Bây giờ lấy sự khác biệt rel = (điểm - Point2) và nhận được chiều dài của vector đó và đó là quy mô của bạn. Để trích xuất xoay, bình thường hóa rel và nó đơn giản để có được góc tiêu chuẩn của nó.
Nguồn
2013-03-22 15:01:09
Cảm ơn bạn nhưng quan điểm có ý nghĩa gì trong vấn đề này? – Matt
Honesly, tôi không biết .. Tôi đặt cược những giá trị này được dành riêng, và lý do tại sao họ có mặt có lẽ là để hoàn thành ma trận. Ở đây bạn sẽ tìm thấy thêm thông tin về chủ đề này: http://mobiledevelop.blogspot.com/2009/02/android-canvas-translation-discussion.html –
Android sử dụng skia và tôi đã kiểm tra mã nguồn cho lớp ma trận androids, trong đó C++ lõi, nó chỉ đơn giản là dán Ma trận, với SkMatrix. Ma trận là hàng 3x3 lớn. Bởi vì MSCALE_X/Y này không thực sự là tỷ lệ. Chừng nào không có phép quay thì nó là quy mô. Nếu ma trận mã hóa một vòng quay, bạn cần phải làm thêm phép tính để tính tỷ lệ. MPERSP được sử dụng để tính toán tọa độ "z", theo mặc định z = 1. Nếu z! = 1 thì x = x/z; y = y/z; z = z/z = 1. Nói chung bạn không cần phải lo lắng về nó z. Nó giống như opengl 4x4 cho 3D, ngoại trừ trên android 3x3 của nó cho 2D –