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 java.awt.Rectangle; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.awt.Shape; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.NoSuchElementException; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.apache.harmony.awt.internal.nls.Messages; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Class Line2D represents a line whose data is given in high-precision 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * values appropriate for graphical operations. 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @since Android 1.0 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic abstract class Line2D implements Shape, Cloneable { 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Class Float is the subclass of Line2D that has all of its data values 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * stored with float-level precision. 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @since Android 1.0 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class Float extends Line2D { 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The x coordinate of the starting point. 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public float x1; 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The y coordinate of the starting point. 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public float y1; 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The x coordinate of the end point. 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public float x2; 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The y coordinate of the end point. 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public float y2; 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Instantiates a new float-valued Line2D with its data values set to 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * zero. 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Float() { 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Instantiates a new float-valued Line2D with the specified endpoints. 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x1 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the x coordinate of the starting point. 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y1 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the y coordinate of the starting point. 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x2 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the x coordinate of the end point. 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y2 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the y coordinate of the end point. 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Float(float x1, float y1, float x2, float y2) { 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setLine(x1, y1, x2, y2); 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Instantiates a new float-valued Line2D with the specified endpoints. 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param p1 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the starting point. 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param p2 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the end point. 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Float(Point2D p1, Point2D p2) { 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setLine(p1, p2); 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public double getX1() { 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return x1; 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public double getY1() { 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return y1; 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public double getX2() { 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return x2; 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public double getY2() { 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return y2; 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Point2D getP1() { 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Point2D.Float(x1, y1); 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Point2D getP2() { 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Point2D.Float(x2, y2); 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setLine(double x1, double y1, double x2, double y2) { 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.x1 = (float)x1; 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.y1 = (float)y1; 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.x2 = (float)x2; 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.y2 = (float)y2; 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the data values that define the line. 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x1 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the x coordinate of the starting point. 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y1 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the y coordinate of the starting point. 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x2 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the x coordinate of the end point. 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y2 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the y coordinate of the end point. 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setLine(float x1, float y1, float x2, float y2) { 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.x1 = x1; 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.y1 = y1; 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.x2 = x2; 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.y2 = y2; 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Rectangle2D getBounds2D() { 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float rx, ry, rw, rh; 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (x1 < x2) { 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project rx = x1; 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project rw = x2 - x1; 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project rx = x2; 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project rw = x1 - x2; 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (y1 < y2) { 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ry = y1; 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project rh = y2 - y1; 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ry = y2; 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project rh = y1 - y2; 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Rectangle2D.Float(rx, ry, rw, rh); 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Class Double is the subclass of Line2D that has all of its data 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * values stored with double-level precision. 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @since Android 1.0 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class Double extends Line2D { 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The x coordinate of the starting point. 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public double x1; 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The y coordinate of the starting point. 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public double y1; 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The x coordinate of the end point. 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public double x2; 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The y coordinate of the end point. 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public double y2; 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Instantiates a new double-valued Line2D with its data values set to 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * zero. 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Double() { 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Instantiates a new double-valued Line2D with the specified endpoints. 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x1 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the x coordinate of the starting point. 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y1 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the y coordinate of the starting point. 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x2 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the x coordinate of the end point. 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y2 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the y coordinate of the end point. 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Double(double x1, double y1, double x2, double y2) { 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setLine(x1, y1, x2, y2); 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Instantiates a new double-valued Line2D with the specified endpoints. 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param p1 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the starting point. 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param p2 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the end point. 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Double(Point2D p1, Point2D p2) { 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setLine(p1, p2); 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public double getX1() { 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return x1; 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public double getY1() { 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return y1; 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public double getX2() { 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return x2; 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public double getY2() { 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return y2; 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Point2D getP1() { 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Point2D.Double(x1, y1); 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Point2D getP2() { 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Point2D.Double(x2, y2); 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setLine(double x1, double y1, double x2, double y2) { 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.x1 = x1; 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.y1 = y1; 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.x2 = x2; 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.y2 = y2; 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Rectangle2D getBounds2D() { 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project double rx, ry, rw, rh; 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (x1 < x2) { 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project rx = x1; 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project rw = x2 - x1; 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project rx = x2; 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project rw = x1 - x2; 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (y1 < y2) { 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ry = y1; 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project rh = y2 - y1; 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ry = y2; 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project rh = y1 - y2; 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Rectangle2D.Double(rx, ry, rw, rh); 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Line2D path iterator 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The subclass of PathIterator to traverse a Line2D. 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project class Iterator implements PathIterator { 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The x coordinate of the start line point. 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project double x1; 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The y coordinate of the start line point. 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project double y1; 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The x coordinate of the end line point. 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project double x2; 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The y coordinate of the end line point. 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project double y2; 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The path iterator transformation. 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AffineTransform t; 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The current segment index. 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int index; 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constructs a new Line2D.Iterator for given line and transformation. 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param l 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the source Line2D object. 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param at 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the AffineTransform object to apply rectangle path. 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Iterator(Line2D l, AffineTransform at) { 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.x1 = l.getX1(); 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.y1 = l.getY1(); 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.x2 = l.getX2(); 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.y2 = l.getY2(); 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.t = at; 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getWindingRule() { 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return WIND_NON_ZERO; 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isDone() { 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return index > 1; 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void next() { 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project index++; 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int currentSegment(double[] coords) { 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (isDone()) { 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // awt.4B=Iterator out of bounds 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new NoSuchElementException(Messages.getString("awt.4B")); //$NON-NLS-1$ 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int type; 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (index == 0) { 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project type = SEG_MOVETO; 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project coords[0] = x1; 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project coords[1] = y1; 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project type = SEG_LINETO; 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project coords[0] = x2; 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project coords[1] = y2; 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (t != null) { 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project t.transform(coords, 0, coords, 0, 1); 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return type; 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int currentSegment(float[] coords) { 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (isDone()) { 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // awt.4B=Iterator out of bounds 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new NoSuchElementException(Messages.getString("awt.4B")); //$NON-NLS-1$ 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int type; 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (index == 0) { 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project type = SEG_MOVETO; 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project coords[0] = (float)x1; 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project coords[1] = (float)y1; 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project type = SEG_LINETO; 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project coords[0] = (float)x2; 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project coords[1] = (float)y2; 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (t != null) { 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project t.transform(coords, 0, coords, 0, 1); 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return type; 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Instantiates a new Line2D. 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected Line2D() { 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the x coordinate of the starting point. 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the x coordinate of the starting point. 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract double getX1(); 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the y coordinate of the starting point. 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the y coordinate of the starting point. 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract double getY1(); 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the x coordinate of the end point. 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the x2. 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract double getX2(); 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the y coordinate of the end point. 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the y coordinate of the end point. 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract double getY2(); 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the p the starting point. 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the p the starting point. 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract Point2D getP1(); 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the p end point. 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the p end point. 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract Point2D getP2(); 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the line's endpoints. 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x1 4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the x coordinate of the starting point. 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y1 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the y coordinate of the starting point. 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x2 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the x coordinate of the end point. 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y2 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the y coordinate of the end point. 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract void setLine(double x1, double y1, double x2, double y2); 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the line's endpoints. 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param p1 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the starting point. 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param p2 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the end point. 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setLine(Point2D p1, Point2D p2) { 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setLine(p1.getX(), p1.getY(), p2.getX(), p2.getY()); 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the line's endpoints by copying the data from another Line2D. 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param line 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the Line2D to copy the endpoint data from. 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setLine(Line2D line) { 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setLine(line.getX1(), line.getY1(), line.getX2(), line.getY2()); 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Rectangle getBounds() { 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getBounds2D().getBounds(); 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Tells where the point is with respect to the line segment, given the 4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * orientation of the line segment. If the ray found by extending the line 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * segment from its starting point is rotated, this method tells whether the 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ray should rotate in a clockwise direction or a counter-clockwise 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * direction to hit the point first. The return value is 0 if the point is 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * on the line segment, it's 1 if the point is on the ray or if the ray 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * should rotate in a counter-clockwise direction to get to the point, and 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it's -1 if the ray should rotate in a clockwise direction to get to the 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * point or if the point is on the line determined by the line segment but 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not on the ray from the segment's starting point and through its end 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * point. 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x1 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the x coordinate of the starting point of the line segment. 5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y1 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the y coordinate of the starting point of the line segment. 5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x2 5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the x coordinate of the end point of the line segment. 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y2 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the y coordinate of the end point of the line segment. 5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param px 5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the x coordinate of the test point. 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param py 5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the p coordinate of the test point. 5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the value that describes where the point is with respect to the 5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * line segment, given the orientation of the line segment. 5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static int relativeCCW(double x1, double y1, double x2, double y2, double px, double py) { 5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A = (x2-x1, y2-y1) P = (px-x1, py-y1) 5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project x2 -= x1; 5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project y2 -= y1; 5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project px -= x1; 5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project py -= y1; 5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project double t = px * y2 - py * x2; // PxA 5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (t == 0.0) { 5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project t = px * x2 + py * y2; // P*A 5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (t > 0.0) { 5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project px -= x2; // B-A 5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project py -= y2; 5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project t = px * x2 + py * y2; // (P-A)*A 5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (t < 0.0) { 5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project t = 0.0; 5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return t < 0.0 ? -1 : (t > 0.0 ? 1 : 0); 5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Tells where the point is with respect to this line segment, given the 5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * orientation of this line segment. If the ray found by extending the line 5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * segment from its starting point is rotated, this method tells whether the 5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ray should rotate in a clockwise direction or a counter-clockwise 5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * direction to hit the point first. The return value is 0 if the point is 5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * on the line segment, it's 1 if the point is on the ray or if the ray 5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * should rotate in a counter-clockwise direction to get to the point, and 5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it's -1 if the ray should rotate in a clockwise direction to get to the 5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * point or if the point is on the line determined by the line segment but 5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not on the ray from the segment's starting point and through its end 5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * point. 5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param px 5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the x coordinate of the test point. 5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param py 5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the p coordinate of the test point. 5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the value that describes where the point is with respect to this 5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * line segment, given the orientation of this line segment. 5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int relativeCCW(double px, double py) { 5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return relativeCCW(getX1(), getY1(), getX2(), getY2(), px, py); 5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Tells where the point is with respect to this line segment, given the 5759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * orientation of this line segment. If the ray found by extending the line 5769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * segment from its starting point is rotated, this method tells whether the 5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ray should rotate in a clockwise direction or a counter-clockwise 5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * direction to hit the point first. The return value is 0 if the point is 5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * on the line segment, it's 1 if the point is on the ray or if the ray 5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * should rotate in a counter-clockwise direction to get to the point, and 5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it's -1 if the ray should rotate in a clockwise direction to get to the 5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * point or if the point is on the line determined by the line segment but 5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not on the ray from the segment's starting point and through its end 5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * point. 5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param p 5879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the test point. 5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the value that describes where the point is with respect to this 5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * line segment, given the orientation of this line segment. 5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int relativeCCW(Point2D p) { 5929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return relativeCCW(getX1(), getY1(), getX2(), getY2(), p.getX(), p.getY()); 5939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Tells whether the two line segments cross. 5979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x1 5999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the x coordinate of the starting point of the first segment. 6009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y1 6019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the y coordinate of the starting point of the first segment. 6029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x2 6039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the x coordinate of the end point of the first segment. 6049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y2 6059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the y coordinate of the end point of the first segment. 6069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x3 6079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the x coordinate of the starting point of the second segment. 6089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y3 6099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the y coordinate of the starting point of the second segment. 6109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x4 6119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the x coordinate of the end point of the second segment. 6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y4 6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the y coordinate of the end point of the second segment. 6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true, if the two line segments cross. 6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static boolean linesIntersect(double x1, double y1, double x2, double y2, double x3, 6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project double y3, double x4, double y4) { 6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A = (x2-x1, y2-y1) B = (x3-x1, y3-y1) C = (x4-x1, y4-y1) D = (x4-x3, 6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * y4-y3) = C-B E = (x1-x3, y1-y3) = -B F = (x2-x3, y2-y3) = A-B Result 6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is ((AxB) (AxC) <=0) and ((DxE) (DxF) <= 0) DxE = (C-B)x(-B) = 6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * BxB-CxB = BxC DxF = (C-B)x(A-B) = CxA-CxB-BxA+BxB = AxB+BxC-AxC 6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project x2 -= x1; // A 6269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project y2 -= y1; 6279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project x3 -= x1; // B 6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project y3 -= y1; 6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project x4 -= x1; // C 6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project y4 -= y1; 6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project double AvB = x2 * y3 - x3 * y2; 6339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project double AvC = x2 * y4 - x4 * y2; 6349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Online 6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (AvB == 0.0 && AvC == 0.0) { 6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (x2 != 0.0) { 6389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (x4 * x3 <= 0.0) 6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || ((x3 * x2 >= 0.0) && (x2 > 0.0 ? x3 <= x2 || x4 <= x2 : x3 >= x2 6409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || x4 >= x2)); 6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (y2 != 0.0) { 6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (y4 * y3 <= 0.0) 6449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || ((y3 * y2 >= 0.0) && (y2 > 0.0 ? y3 <= y2 || y4 <= y2 : y3 >= y2 6459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || y4 >= y2)); 6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 6489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project double BvC = x3 * y4 - x4 * y3; 6519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (AvB * AvC <= 0.0) && (BvC * (AvB + BvC - AvC) <= 0.0); 6539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Tells whether the specified line segments crosses this line segment. 6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x1 6599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the x coordinate of the starting point of the test segment. 6609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y1 6619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the y coordinate of the starting point of the test segment. 6629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x2 6639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the x coordinate of the end point of the test segment. 6649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y2 6659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the y coordinate of the end point of the test segment. 6669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true, if the specified line segments crosses this line segment. 6679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean intersectsLine(double x1, double y1, double x2, double y2) { 6699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return linesIntersect(x1, y1, x2, y2, getX1(), getY1(), getX2(), getY2()); 6709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Tells whether the specified line segments crosses this line segment. 6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param l 6769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the test segment. 6779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true, if the specified line segments crosses this line segment. 6789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws NullPointerException 6799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if l is null. 6809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean intersectsLine(Line2D l) { 6829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return linesIntersect(l.getX1(), l.getY1(), l.getX2(), l.getY2(), getX1(), getY1(), 6839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getX2(), getY2()); 6849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gives the square of the distance between the point and the line segment. 6889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x1 6909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the x coordinate of the starting point of the line segment. 6919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y1 6929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the y coordinate of the starting point of the line segment. 6939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x2 6949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the x coordinate of the end point of the line segment. 6959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y2 6969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the y coordinate of the end point of the line segment. 6979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param px 6989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the x coordinate of the test point. 6999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param py 7009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the y coordinate of the test point. 7019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the the square of the distance between the point and the line 7029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * segment. 7039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static double ptSegDistSq(double x1, double y1, double x2, double y2, double px, 7059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project double py) { 7069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 7079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A = (x2 - x1, y2 - y1) P = (px - x1, py - y1) 7089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project x2 -= x1; // A = (x2, y2) 7109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project y2 -= y1; 7119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project px -= x1; // P = (px, py) 7129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project py -= y1; 7139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project double dist; 7149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (px * x2 + py * y2 <= 0.0) { // P*A 7159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dist = px * px + py * py; 7169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 7179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project px = x2 - px; // P = A - P = (x2 - px, y2 - py) 7189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project py = y2 - py; 7199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (px * x2 + py * y2 <= 0.0) { // P*A 7209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dist = px * px + py * py; 7219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 7229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dist = px * y2 - py * x2; 7239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dist = dist * dist / (x2 * x2 + y2 * y2); // pxA/|A| 7249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (dist < 0) { 7279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dist = 0; 7289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return dist; 7309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gives the distance between the point and the line segment. 7349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x1 7369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the x coordinate of the starting point of the line segment. 7379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y1 7389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the y coordinate of the starting point of the line segment. 7399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x2 7409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the x coordinate of the end point of the line segment. 7419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y2 7429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the y coordinate of the end point of the line segment. 7439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param px 7449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the x coordinate of the test point. 7459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param py 7469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the y coordinate of the test point. 7479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the the distance between the point and the line segment. 7489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static double ptSegDist(double x1, double y1, double x2, double y2, double px, double py) { 7509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return Math.sqrt(ptSegDistSq(x1, y1, x2, y2, px, py)); 7519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gives the square of the distance between the point and this line segment. 7559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param px 7579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the x coordinate of the test point. 7589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param py 7599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the y coordinate of the test point. 7609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the the square of the distance between the point and this line 7619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * segment. 7629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public double ptSegDistSq(double px, double py) { 7649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ptSegDistSq(getX1(), getY1(), getX2(), getY2(), px, py); 7659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gives the square of the distance between the point and this line segment. 7699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param p 7719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the test point. 7729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the square of the distance between the point and this line 7739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * segment. 7749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public double ptSegDistSq(Point2D p) { 7769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ptSegDistSq(getX1(), getY1(), getX2(), getY2(), p.getX(), p.getY()); 7779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gives the distance between the point and this line segment. 7819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param px 7839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the x coordinate of the test point. 7849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param py 7859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the y coordinate of the test point. 7869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the distance between the point and this line segment. 7879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public double ptSegDist(double px, double py) { 7899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ptSegDist(getX1(), getY1(), getX2(), getY2(), px, py); 7909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gives the distance between the point and this line segment. 7949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param p 7969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the test point. 7979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the distance between the point and this line segment. 7989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public double ptSegDist(Point2D p) { 8009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ptSegDist(getX1(), getY1(), getX2(), getY2(), p.getX(), p.getY()); 8019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gives the square of the distance between the point and the line. 8059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x1 8079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the x coordinate of the starting point of the line segment. 8089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y1 8099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the y coordinate of the starting point of the line segment. 8109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x2 8119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the x coordinate of the end point of the line segment. 8129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y2 8139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the y coordinate of the end point of the line segment. 8149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param px 8159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the x coordinate of the test point. 8169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param py 8179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the y coordinate of the test point. 8189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the square of the distance between the point and the line. 8199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static double ptLineDistSq(double x1, double y1, double x2, double y2, double px, 8219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project double py) { 8229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project x2 -= x1; 8239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project y2 -= y1; 8249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project px -= x1; 8259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project py -= y1; 8269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project double s = px * y2 - py * x2; 8279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return s * s / (x2 * x2 + y2 * y2); 8289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gives the square of the distance between the point and the line. 8329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x1 8349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the x coordinate of the starting point of the line segment. 8359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y1 8369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the y coordinate of the starting point of the line segment. 8379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x2 8389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the x coordinate of the end point of the line segment. 8399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y2 8409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the y coordinate of the end point of the line segment. 8419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param px 8429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the x coordinate of the test point. 8439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param py 8449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the y coordinate of the test point. 8459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the square of the distance between the point and the line. 8469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static double ptLineDist(double x1, double y1, double x2, double y2, double px, double py) { 8489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return Math.sqrt(ptLineDistSq(x1, y1, x2, y2, px, py)); 8499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gives the square of the distance between the point and the line 8539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * determined by this Line2D. 8549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param px 8569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the x coordinate of the test point. 8579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param py 8589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the y coordinate of the test point. 8599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the square of the distance between the point and the line 8609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * determined by this Line2D. 8619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public double ptLineDistSq(double px, double py) { 8639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ptLineDistSq(getX1(), getY1(), getX2(), getY2(), px, py); 8649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gives the square of the distance between the point and the line 8689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * determined by this Line2D. 8699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param p 8719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the test point. 8729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the square of the distance between the point and the line 8739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * determined by this Line2D. 8749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public double ptLineDistSq(Point2D p) { 8769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ptLineDistSq(getX1(), getY1(), getX2(), getY2(), p.getX(), p.getY()); 8779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gives the distance between the point and the line determined by this 8819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Line2D. 8829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param px 8849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the x coordinate of the test point. 8859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param py 8869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the y coordinate of the test point. 8879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the distance between the point and the line determined by this 8889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Line2D. 8899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public double ptLineDist(double px, double py) { 8919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ptLineDist(getX1(), getY1(), getX2(), getY2(), px, py); 8929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gives the distance between the point and the line determined by this 8969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Line2D. 8979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param p 8999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the test point. 9009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the distance between the point and the line determined by this 9019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Line2D. 9029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public double ptLineDist(Point2D p) { 9049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ptLineDist(getX1(), getY1(), getX2(), getY2(), p.getX(), p.getY()); 9059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean contains(double px, double py) { 9089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 9099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean contains(Point2D p) { 9129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 9139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean contains(Rectangle2D r) { 9169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 9179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean contains(double rx, double ry, double rw, double rh) { 9209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 9219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean intersects(double rx, double ry, double rw, double rh) { 9249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return intersects(new Rectangle2D.Double(rx, ry, rw, rh)); 9259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean intersects(Rectangle2D r) { 9289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return r.intersectsLine(getX1(), getY1(), getX2(), getY2()); 9299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PathIterator getPathIterator(AffineTransform at) { 9329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Iterator(this, at); 9339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PathIterator getPathIterator(AffineTransform at, double flatness) { 9369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Iterator(this, at); 9379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 9409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Object clone() { 9419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 9429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return super.clone(); 9439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (CloneNotSupportedException e) { 9449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new InternalError(); 9459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 949