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