2010-07-08 29 views
6

tôi đang gặp rắc rối làm việc ra các giá trị trở lại của mã dưới đây pMeasure = PathMeasure, m = Matrix, distCount là khoảng cách dọc theo con đườngMa trận Android, getValues ​​() trả về cái gì?

pMeasure.getMatrix(distCount, m, 0x01 | 0x02); 
m.getValues(float[] values) 

phao [2] & float [5] được vị trí x & y tương ứng nhưng tôi không thể tìm ra phần còn lại

bất kỳ trợ giúp nào một lần nữa được đánh giá cao.

Trả lời

12

Taken từ Matrix class documentation:

public static thức int MPERSP_0
Giá trị không đổi: 6 (0x00000006)

public static thức int MPERSP_1
Giá trị không đổi: 7 (0x00000007)

static static final int MPERSP_2
Giá trị không đổi: 8 (0x00000008)

public static thức int MSCALE_X
Giá trị không đổi: 0 (0x00000000)

public static thức int MSCALE_Y
Giá trị không đổi: 4 (0x00000004)

public static thức int MSKEW_X
Giá trị không đổi: 1 (0x00000001)

cuối cùng tĩnh công cộng int MSKEW_Y
Giá trị không đổi: 3 (0x00000003)

public static thức int MTRANS_X
Giá trị không đổi: 2 (0x00000002)

public static thức int MTRANS_Y
Giá trị không đổi: 5 (0x00000005)

+0

Cảm ơn bạn nhưng quan điểm có ý nghĩa gì trong vấn đề này? – Matt

+3

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 –

+2

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 –

6

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ó.

Các vấn đề liên quan