diff options
| author | Yang Li <liyang@google.com> | 2009-05-27 18:19:04 -0700 |
|---|---|---|
| committer | Yang Li <liyang@google.com> | 2009-05-27 18:19:04 -0700 |
| commit | 58b359041a29418876f12d37a7082ece9f8a38a4 (patch) | |
| tree | 1bcdc590cc499afe5328b5b96276ee8a44fa85a1 /core/java/android/gesture/GestureUtilities.java | |
| parent | b082ceefdc877bda2159a8d66d854576e0511d15 (diff) | |
| download | frameworks_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-x | core/java/android/gesture/GestureUtilities.java | 44 |
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; + } } |
