Tôi đang cố gắng lập trình một la bàn với Android bằng cách sử dụng bộ cảm biến và cảm biến từ trường, giờ đây tôi tự hỏi làm thế nào để có được góc đúng cho la bàn của tôi.La bàn trong Android
Tôi đọc các giá trị của gia tốc kế và cảm biến từ trường trong "accele" và "magne" tương ứng. Để có được góc, tôi thực hiện như sau:
float R[] = new float[9];
float I[] = new float[9];
boolean success = SensorManager.getRotationMatrix(R, I, accele, magne);
if(success) {
float orientation[] = new float[3];
SensorManager.getOrientation(R, orientation);
azimuth = orientation[0]; // contains azimuth, pitch, roll
....
Sau đó, tôi sử dụng một ma trận xoay để đưa kim của tôi:
rotation.setRotate(azimuth, compass.getWidth()/2, compass.getHeight()/2);
canvas.drawBitmap(needle, rotation, null);
Bây giờ, tài liệu của getOrientation nói, định hướng đó [0] nên xoay vòng quanh trục z. Tài liệu cho TYPE_ORIENTATION quy định rằng "Phương vị, góc giữa hướng bắc từ và trục y, xung quanh trục z (0 đến 359). 0 = North, 90 = East, 180 = South, 270 = West".
Phương vị của tôi tuy nhiên không nằm trong khoảng từ 0 đến 359, nhưng đúng khoảng -2 đến 2. Độ phương vị chính xác từ getOrientation là gì và làm cách nào để chuyển đổi góc sang góc?
thanks :) Chính xác thì câu lệnh if cuối cùng là gì? – user1809923
Math.toDegrees() sẽ cho bạn góc từ -180 đến 180 từ góc radi -PI và + PI. Điều này chỉ đặt mọi thứ theo hướng tích cực. – rgrocha
Đây là câu trả lời đúng. –