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