| /* |
| * Copyright (C) 2011 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| |
| package android.filterfw.geometry; |
| |
| import android.filterfw.geometry.Point; |
| import android.filterfw.geometry.Quad; |
| |
| /** |
| * @hide |
| */ |
| public class Rectangle extends Quad { |
| |
| public Rectangle() { |
| } |
| |
| public Rectangle(float x, float y, float width, float height) { |
| super(new Point(x, y), |
| new Point(x + width, y), |
| new Point(x, y + height), |
| new Point(x + width, y + height)); |
| } |
| |
| public Rectangle(Point origin, Point size) { |
| super(origin, |
| origin.plus(size.x, 0.0f), |
| origin.plus(0.0f, size.y), |
| origin.plus(size.x, size.y)); |
| } |
| |
| public static Rectangle fromRotatedRect(Point center, Point size, float rotation) { |
| Point p0 = new Point(center.x - size.x/2f, center.y - size.y/2f); |
| Point p1 = new Point(center.x + size.x/2f, center.y - size.y/2f); |
| Point p2 = new Point(center.x - size.x/2f, center.y + size.y/2f); |
| Point p3 = new Point(center.x + size.x/2f, center.y + size.y/2f); |
| return new Rectangle(p0.rotatedAround(center, rotation), |
| p1.rotatedAround(center, rotation), |
| p2.rotatedAround(center, rotation), |
| p3.rotatedAround(center, rotation)); |
| } |
| |
| private Rectangle(Point p0, Point p1, Point p2, Point p3) { |
| super(p0, p1, p2, p3); |
| } |
| |
| public static Rectangle fromCenterVerticalAxis(Point center, Point vAxis, Point size) { |
| Point dy = vAxis.scaledTo(size.y / 2.0f); |
| Point dx = vAxis.rotated90(1).scaledTo(size.x / 2.0f); |
| return new Rectangle(center.minus(dx).minus(dy), |
| center.plus(dx).minus(dy), |
| center.minus(dx).plus(dy), |
| center.plus(dx).plus(dy)); |
| } |
| |
| public float getWidth() { |
| return p1.minus(p0).length(); |
| } |
| |
| public float getHeight() { |
| return p2.minus(p0).length(); |
| } |
| |
| public Point center() { |
| return p0.plus(p1).plus(p2).plus(p3).times(0.25f); |
| } |
| |
| @Override |
| public Rectangle scaled(float s) { |
| return new Rectangle(p0.times(s), p1.times(s), p2.times(s), p3.times(s)); |
| } |
| |
| @Override |
| public Rectangle scaled(float x, float y) { |
| return new Rectangle(p0.mult(x, y), p1.mult(x, y), p2.mult(x, y), p3.mult(x, y)); |
| } |
| |
| //public Rectangle rotated(float radians) { |
| // TODO: Implement this. |
| //} |
| |
| } |