Index: content/public/android/java/src/org/chromium/content/browser/DeviceSensors.java |
diff --git a/content/public/android/java/src/org/chromium/content/browser/DeviceSensors.java b/content/public/android/java/src/org/chromium/content/browser/DeviceSensors.java |
index 76e77f4fef05590f73291705e359cd58f3b79b41..caa7b2e668071e2ee31f46d527ab563ee29265e0 100644 |
--- a/content/public/android/java/src/org/chromium/content/browser/DeviceSensors.java |
+++ b/content/public/android/java/src/org/chromium/content/browser/DeviceSensors.java |
@@ -271,7 +271,7 @@ class DeviceSensors implements SensorEventListener { |
* </ul> |
* <p> |
* |
- * @param R |
+ * @param matrixR |
* a 3x3 rotation matrix {@see SensorManager.getRotationMatrix}. |
* |
* @param values |
@@ -280,7 +280,8 @@ class DeviceSensors implements SensorEventListener { |
* @return the array values passed as argument. |
*/ |
@VisibleForTesting |
- public static double[] computeDeviceOrientationFromRotationMatrix(float[] R, double[] values) { |
+ public static double[] computeDeviceOrientationFromRotationMatrix( |
+ float[] matrixR, double[] values) { |
aurimas (slooooooooow)
2014/10/14 17:26:59
Renamed this to matrixR
|
/* |
* 3x3 (length=9) case: |
* / R[ 0] R[ 1] R[ 2] \ |
@@ -288,39 +289,39 @@ class DeviceSensors implements SensorEventListener { |
* \ R[ 6] R[ 7] R[ 8] / |
* |
*/ |
- if (R.length != 9) |
- return values; |
- |
- if (R[8] > 0) { // cos(beta) > 0 |
- values[0] = Math.atan2(-R[1], R[4]); |
- values[1] = Math.asin(R[7]); // beta (-pi/2, pi/2) |
- values[2] = Math.atan2(-R[6], R[8]); // gamma (-pi/2, pi/2) |
- } else if (R[8] < 0) { // cos(beta) < 0 |
- values[0] = Math.atan2(R[1], -R[4]); |
- values[1] = -Math.asin(R[7]); |
+ if (matrixR.length != 9) return values; |
+ |
+ if (matrixR[8] > 0) { // cos(beta) > 0 |
+ values[0] = Math.atan2(-matrixR[1], matrixR[4]); |
+ values[1] = Math.asin(matrixR[7]); // beta (-pi/2, pi/2) |
+ values[2] = Math.atan2(-matrixR[6], matrixR[8]); // gamma (-pi/2, pi/2) |
+ } else if (matrixR[8] < 0) { // cos(beta) < 0 |
+ values[0] = Math.atan2(matrixR[1], -matrixR[4]); |
+ values[1] = -Math.asin(matrixR[7]); |
values[1] += (values[1] >= 0) ? -Math.PI : Math.PI; // beta [-pi,-pi/2) U (pi/2,pi) |
- values[2] = Math.atan2(R[6], -R[8]); // gamma (-pi/2, pi/2) |
+ values[2] = Math.atan2(matrixR[6], -matrixR[8]); // gamma (-pi/2, pi/2) |
} else { // R[8] == 0 |
- if (R[6] > 0) { // cos(gamma) == 0, cos(beta) > 0 |
- values[0] = Math.atan2(-R[1], R[4]); |
- values[1] = Math.asin(R[7]); // beta [-pi/2, pi/2] |
- values[2] = -Math.PI / 2; // gamma = -pi/2 |
- } else if (R[6] < 0) { // cos(gamma) == 0, cos(beta) < 0 |
- values[0] = Math.atan2(R[1], -R[4]); |
- values[1] = -Math.asin(R[7]); |
+ if (matrixR[6] > 0) { // cos(gamma) == 0, cos(beta) > 0 |
+ values[0] = Math.atan2(-matrixR[1], matrixR[4]); |
+ values[1] = Math.asin(matrixR[7]); // beta [-pi/2, pi/2] |
+ values[2] = -Math.PI / 2; // gamma = -pi/2 |
+ } else if (matrixR[6] < 0) { // cos(gamma) == 0, cos(beta) < 0 |
+ values[0] = Math.atan2(matrixR[1], -matrixR[4]); |
+ values[1] = -Math.asin(matrixR[7]); |
values[1] += (values[1] >= 0) ? -Math.PI : Math.PI; // beta [-pi,-pi/2) U (pi/2,pi) |
- values[2] = -Math.PI / 2; // gamma = -pi/2 |
+ values[2] = -Math.PI / 2; // gamma = -pi/2 |
} else { // R[6] == 0, cos(beta) == 0 |
// gimbal lock discontinuity |
- values[0] = Math.atan2(R[3], R[0]); |
- values[1] = (R[7] > 0) ? Math.PI / 2 : -Math.PI / 2; // beta = +-pi/2 |
- values[2] = 0; // gamma = 0 |
+ values[0] = Math.atan2(matrixR[3], matrixR[0]); |
+ values[1] = (matrixR[7] > 0) ? Math.PI / 2 : -Math.PI / 2; // beta = +-pi/2 |
+ values[2] = 0; // gamma = 0 |
} |
} |
// alpha is in [-pi, pi], make sure it is in [0, 2*pi). |
- if (values[0] < 0) |
+ if (values[0] < 0) { |
values[0] += 2 * Math.PI; // alpha [0, 2*pi) |
+ } |
return values; |
} |