Bạn sử dụng ứng dụng mẫu này theo định hướng nào? Từ những gì được viết là mã này, hướng duy nhất được hỗ trợ là Chân dung hoặc căn hộ trên bàn, nó phụ thuộc vào thiết bị. Bạn có ý nghĩa gì bởi "tốt"?
Bình thường giá trị không phải là "tốt" khi xoay thiết bị, hệ tọa độ thiết bị được cho là hoạt động ở Chân dung hoặc không phẳng (Trục Y dọc dọc theo màn hình hướng lên, Z trục chỉ ra khỏi màn hình đến từ trung tâm của màn hình, trục X vuông góc với trục Y đi bên phải dọc theo màn hình). Có điều này, xoay thiết bị sẽ không xoay hệ tọa độ thiết bị, bạn sẽ phải remap nó.
Nhưng nếu bạn muốn tiêu đề của thiết bị theo hướng dọc, đây là một đoạn mã mà làm việc tốt cho tôi:
@Override
public void onSensorChanged(SensorEvent event)
{
// It is good practice to check that we received the proper sensor event
if (event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR)
{
// Convert the rotation-vector to a 4x4 matrix.
SensorManager.getRotationMatrixFromVector(mRotationMatrix,
event.values);
SensorManager
.remapCoordinateSystem(mRotationMatrix,
SensorManager.AXIS_X, SensorManager.AXIS_Z,
mRotationMatrix);
SensorManager.getOrientation(mRotationMatrix, orientationVals);
// Optionally convert the result from radians to degrees
orientationVals[0] = (float) Math.toDegrees(orientationVals[0]);
orientationVals[1] = (float) Math.toDegrees(orientationVals[1]);
orientationVals[2] = (float) Math.toDegrees(orientationVals[2]);
tv.setText(" Yaw: " + orientationVals[0] + "\n Pitch: "
+ orientationVals[1] + "\n Roll (not used): "
+ orientationVals[2]);
}
}
Bạn sẽ nhận được tiêu đề (hoặc góc phương vị) trong:
orientationVals[0]
Nguồn
2013-02-11 15:49:36
Ok, vậy có ví dụ nào về cách làm việc với cảm biến này không? Tôi nhận các giá trị cho x * sin (θ/2), y * sin (θ/2) và z * sin (θ/2). Nhưng làm thế nào để có được giá trị, tôi cần phải xây dựng la bàn của tôi. Tôi có nên sử dụng getRotationMatrix nữa không? Cảm ơn bạn đã giúp đỡ. –
"X được định nghĩa là sản phẩm vectơ Y.Z (Nó tiếp tuyến với mặt đất tại vị trí hiện tại của thiết bị và gần điểm phía đông). Y tiếp tuyến với mặt đất tại vị trí hiện tại của thiết bị và hướng về phía bắc từ tính. Z chỉ về phía bầu trời và vuông góc với mặt đất. " Bụi ra khỏi sách lớp hình học của bạn, hoặc google nó :), và bạn sẽ có thể tìm ra nó. –