summaryrefslogtreecommitdiffstats
path: root/core/java/android/gesture/GestureUtilities.java
diff options
context:
space:
mode:
authorYang Li <liyang@google.com>2009-05-27 18:19:04 -0700
committerYang Li <liyang@google.com>2009-05-27 18:19:04 -0700
commit58b359041a29418876f12d37a7082ece9f8a38a4 (patch)
tree1bcdc590cc499afe5328b5b96276ee8a44fa85a1 /core/java/android/gesture/GestureUtilities.java
parentb082ceefdc877bda2159a8d66d854576e0511d15 (diff)
downloadframeworks_base-58b359041a29418876f12d37a7082ece9f8a38a4.zip
frameworks_base-58b359041a29418876f12d37a7082ece9f8a38a4.tar.gz
frameworks_base-58b359041a29418876f12d37a7082ece9f8a38a4.tar.bz2
Bug fixes and performance improvements
- Added affine transform functions in GestureUtilities to remove Matrix - Fixed a bug with Instance.createInstance - Updated letter recognition file
Diffstat (limited to 'core/java/android/gesture/GestureUtilities.java')
-rwxr-xr-xcore/java/android/gesture/GestureUtilities.java44
1 files changed, 35 insertions, 9 deletions
diff --git a/core/java/android/gesture/GestureUtilities.java b/core/java/android/gesture/GestureUtilities.java
index 4a3144c..3e8a3c8 100755
--- a/core/java/android/gesture/GestureUtilities.java
+++ b/core/java/android/gesture/GestureUtilities.java
@@ -17,7 +17,6 @@
package android.gesture;
import android.graphics.RectF;
-import android.graphics.Matrix;
import android.util.Log;
import java.util.ArrayList;
@@ -380,22 +379,17 @@ final class GestureUtilities {
}
static OrientedBoundingBox computeOrientedBoundingBox(float[] points, float[] centroid) {
- Matrix tr = new Matrix();
- tr.setTranslate(-centroid[0], -centroid[1]);
- tr.mapPoints(points);
+ translate(points, -centroid[0], -centroid[1]);
double[][] array = computeCoVariance(points);
double[] targetVector = computeOrientation(array);
float angle;
if (targetVector[0] == 0 && targetVector[1] == 0) {
- angle = -90;
+ angle = (float) -Math.PI/2;
} else { // -PI<alpha<PI
angle = (float) Math.atan2(targetVector[1], targetVector[0]);
- angle = (float) (180 * angle / Math.PI);
- Matrix trans = new Matrix();
- trans.setRotate(-angle);
- trans.mapPoints(points);
+ rotate(points, -angle);
}
float minx = Float.MAX_VALUE;
@@ -446,4 +440,36 @@ final class GestureUtilities {
}
return targetVector;
}
+
+
+ static float[] rotate(float[] points, double angle) {
+ double cos = Math.cos(angle);
+ double sin = Math.sin(angle);
+ int size = points.length;
+ for (int i = 0; i < size; i += 2) {
+ float x = (float) (points[i] * cos - points[i + 1] * sin);
+ float y = (float) (points[i] * sin + points[i + 1] * cos);
+ points[i] = x;
+ points[i + 1] = y;
+ }
+ return points;
+ }
+
+ static float[] translate(float[] points, float dx, float dy) {
+ int size = points.length;
+ for (int i = 0; i < size; i += 2) {
+ points[i] += dx;
+ points[i + 1] += dy;
+ }
+ return points;
+ }
+
+ static float[] scale(float[] points, float sx, float sy) {
+ int size = points.length;
+ for (int i = 0; i < size; i += 2) {
+ points[i] *= sx;
+ points[i + 1] *= sy;
+ }
+ return points;
+ }
}