135aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li/* 235aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li * Copyright (C) 2008-2009 The Android Open Source Project 335aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li * 435aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li * Licensed under the Apache License, Version 2.0 (the "License"); 535aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li * you may not use this file except in compliance with the License. 635aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li * You may obtain a copy of the License at 735aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li * 835aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li * http://www.apache.org/licenses/LICENSE-2.0 935aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li * 1035aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li * Unless required by applicable law or agreed to in writing, software 1135aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li * distributed under the License is distributed on an "AS IS" BASIS, 1235aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1335aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li * See the License for the specific language governing permissions and 1435aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li * limitations under the License. 1535aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li */ 1635aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li 17db567c390bd56c05614eaa83c02dbb99f97ad9ccRomain Guypackage android.gesture; 1835aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li 1935aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Liimport android.graphics.Matrix; 2035aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Liimport android.graphics.Path; 2135aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li 2235aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li/** 2335aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li * An oriented bounding box 2435aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li */ 2535aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Lipublic class OrientedBoundingBox { 2635aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li public final float squareness; 2735aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li 2835aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li public final float width; 2935aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li public final float height; 3035aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li 3135aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li public final float orientation; 3235aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li 3335aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li public final float centerX; 3435aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li public final float centerY; 3535aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li 3635aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li OrientedBoundingBox(float angle, float cx, float cy, float w, float h) { 3735aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li orientation = angle; 3835aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li width = w; 3935aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li height = h; 4035aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li centerX = cx; 4135aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li centerY = cy; 4235aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li float ratio = w / h; 4335aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li if (ratio > 1) { 4435aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li squareness = 1 / ratio; 4535aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li } else { 4635aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li squareness = ratio; 4735aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li } 4835aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li } 4935aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li 50db567c390bd56c05614eaa83c02dbb99f97ad9ccRomain Guy /** 51db567c390bd56c05614eaa83c02dbb99f97ad9ccRomain Guy * Currently used for debugging purpose only. 52db567c390bd56c05614eaa83c02dbb99f97ad9ccRomain Guy * 53db567c390bd56c05614eaa83c02dbb99f97ad9ccRomain Guy * @hide 54db567c390bd56c05614eaa83c02dbb99f97ad9ccRomain Guy */ 5535aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li public Path toPath() { 5635aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li Path path = new Path(); 5735aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li float[] point = new float[2]; 5835aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li point[0] = -width / 2; 5935aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li point[1] = height / 2; 6035aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li Matrix matrix = new Matrix(); 6135aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li matrix.setRotate(orientation); 6235aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li matrix.postTranslate(centerX, centerY); 6335aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li matrix.mapPoints(point); 6435aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li path.moveTo(point[0], point[1]); 6535aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li 6635aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li point[0] = -width / 2; 6735aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li point[1] = -height / 2; 6835aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li matrix.mapPoints(point); 6935aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li path.lineTo(point[0], point[1]); 7035aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li 7135aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li point[0] = width / 2; 7235aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li point[1] = -height / 2; 7335aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li matrix.mapPoints(point); 7435aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li path.lineTo(point[0], point[1]); 7535aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li 7635aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li point[0] = width / 2; 7735aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li point[1] = height / 2; 7835aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li matrix.mapPoints(point); 7935aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li path.lineTo(point[0], point[1]); 8035aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li 8135aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li path.close(); 8235aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li 8335aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li return path; 8435aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li } 8535aa84b1f9f5e42dd00cb66df993ed1628c8963bYang Li} 86