19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  this work for additional information regarding copyright ownership.
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  (the "License"); you may not use this file except in compliance with
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  the License.  You may obtain a copy of the License at
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  See the License for the specific language governing permissions and
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  limitations under the License.
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @author Denis M. Kishenko
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @version $Revision$
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage java.awt.geom;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.apache.harmony.misc.HashCode;
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Class Point2D represents a point whose data is given in high-precision
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * values appropriate for graphical operations.
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @since Android 1.0
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic abstract class Point2D implements Cloneable {
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The Class Float is the subclass of Point2D that has all of its data
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * values stored with float-level precision.
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @since Android 1.0
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static class Float extends Point2D {
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The x coordinate.
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public float x;
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The y coordinate.
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public float y;
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Instantiates a new float-valued Point2D with its data set to zero.
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public Float() {
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Instantiates a new float-valued Point2D with the specified
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * coordinates.
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         *
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * @param x
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         *            the x coordinate.
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * @param y
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         *            the y coordinate.
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public Float(float x, float y) {
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            this.x = x;
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            this.y = y;
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        @Override
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public double getX() {
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return x;
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        @Override
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public double getY() {
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return y;
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Sets the point's coordinates.
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         *
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * @param x
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         *            the x coordinate.
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * @param y
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         *            the y coordinate.
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void setLocation(float x, float y) {
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            this.x = x;
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            this.y = y;
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        @Override
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void setLocation(double x, double y) {
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            this.x = (float)x;
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            this.y = (float)y;
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        @Override
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public String toString() {
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return getClass().getName() + "[x=" + x + ",y=" + y + "]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The Class Double is the subclass of Point2D that has all of its data
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * values stored with double-level precision.
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @since Android 1.0
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static class Double extends Point2D {
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The x coordinate.
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public double x;
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The y coordinate.
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public double y;
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Instantiates a new double-valued Point2D with its data set to zero.
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public Double() {
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Instantiates a new double-valued Point2D with the specified
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * coordinates.
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         *
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * @param x
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         *            the x coordinate.
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * @param y
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         *            the y coordinate.
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public Double(double x, double y) {
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            this.x = x;
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            this.y = y;
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        @Override
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public double getX() {
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return x;
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        @Override
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public double getY() {
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return y;
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        @Override
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void setLocation(double x, double y) {
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            this.x = x;
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            this.y = y;
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        @Override
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public String toString() {
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return getClass().getName() + "[x=" + x + ",y=" + y + "]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Instantiates a new Point2D.
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    protected Point2D() {
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets the x coordinate.
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the x coordinate.
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract double getX();
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets the y coordinate.
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the y coordinate.
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract double getY();
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Sets the point's coordinates.
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param x
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the x coordinate.
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param y
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the y coordinate.
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract void setLocation(double x, double y);
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Sets the point's coordinates by copying them from another point.
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param p
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the point to copy the data from.
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setLocation(Point2D p) {
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        setLocation(p.getX(), p.getY());
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Finds the square of the distance between the two specified points.
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param x1
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the x coordinate of the first point.
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param y1
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the y coordinate of the first point.
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param x2
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the x coordinate of the second point.
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param y2
2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the y coordinate of the second point.
2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the square of the distance between the two specified points.
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static double distanceSq(double x1, double y1, double x2, double y2) {
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        x2 -= x1;
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        y2 -= y1;
2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return x2 * x2 + y2 * y2;
2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Finds the square of the distance between this point and the specified
2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * point.
2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param px
2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the x coordinate of the point.
2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param py
2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the y coordinate of the point.
2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the square of the distance between this point and the specified
2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         point.
2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public double distanceSq(double px, double py) {
2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return Point2D.distanceSq(getX(), getY(), px, py);
2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Finds the square of the distance between this point and the specified
2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * point.
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param p
2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the other point.
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the square of the distance between this point and the specified
2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         point.
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public double distanceSq(Point2D p) {
2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return Point2D.distanceSq(getX(), getY(), p.getX(), p.getY());
2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Finds the distance between the two specified points.
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param x1
2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the x coordinate of the first point.
2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param y1
2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the y coordinate of the first point.
2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param x2
2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the x coordinate of the second point.
2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param y2
2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the y coordinate of the second point.
2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the distance between the two specified points.
2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static double distance(double x1, double y1, double x2, double y2) {
2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return Math.sqrt(distanceSq(x1, y1, x2, y2));
2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Finds the distance between this point and the specified point.
2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param px
2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the x coordinate of the point.
2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param py
2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the y coordinate of the point.
2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the distance between this point and the specified point.
2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public double distance(double px, double py) {
2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return Math.sqrt(distanceSq(px, py));
2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Finds the distance between this point and the specified point.
2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param p
2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the other point.
2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the distance between this point and the specified point.
2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public double distance(Point2D p) {
2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return Math.sqrt(distanceSq(p));
2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Object clone() {
2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return super.clone();
2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (CloneNotSupportedException e) {
3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            throw new InternalError();
3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int hashCode() {
3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        HashCode hash = new HashCode();
3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        hash.append(getX());
3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        hash.append(getY());
3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return hash.hashCode();
3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean equals(Object obj) {
3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (obj == this) {
3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return true;
3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (obj instanceof Point2D) {
3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Point2D p = (Point2D)obj;
3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return getX() == p.getX() && getY() == p.getY();
3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return false;
3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
324