summaryrefslogtreecommitdiffstats
path: root/media/mca/filterfw/java/android/filterfw/geometry/Rectangle.java
diff options
context:
space:
mode:
Diffstat (limited to 'media/mca/filterfw/java/android/filterfw/geometry/Rectangle.java')
-rw-r--r--media/mca/filterfw/java/android/filterfw/geometry/Rectangle.java95
1 files changed, 95 insertions, 0 deletions
diff --git a/media/mca/filterfw/java/android/filterfw/geometry/Rectangle.java b/media/mca/filterfw/java/android/filterfw/geometry/Rectangle.java
new file mode 100644
index 0000000..e4bd622
--- /dev/null
+++ b/media/mca/filterfw/java/android/filterfw/geometry/Rectangle.java
@@ -0,0 +1,95 @@
+/*
+ * 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.
+ //}
+
+}