⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 arc2d.java

📁 this gcc-g++-3.3.1.tar.gz is a source file of gcc, you can learn more about gcc through this codes f
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/* Arc2D.java -- represents an arc in 2-D space   Copyright (C) 2002 Free Software FoundationThis file is part of GNU Classpath.GNU Classpath is free software; you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation; either version 2, or (at your option)any later version.GNU Classpath is distributed in the hope that it will be useful, butWITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNUGeneral Public License for more details.You should have received a copy of the GNU General Public Licensealong with GNU Classpath; see the file COPYING.  If not, write to theFree Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA02111-1307 USA.Linking this library statically or dynamically with other modules ismaking a combined work based on this library.  Thus, the terms andconditions of the GNU General Public License cover the wholecombination.As a special exception, the copyright holders of this library give youpermission to link this library with independent modules to produce anexecutable, regardless of the license terms of these independentmodules, and to copy and distribute the resulting executable underterms of your choice, provided that you also meet, for each linkedindependent module, the terms and conditions of the license of thatmodule.  An independent module is a module which is not derived fromor based on this library.  If you modify this library, you may extendthis exception to your version of the library, but you are notobligated to do so.  If you do not wish to do so, delete thisexception statement from your version. */package java.awt.geom;import java.util.NoSuchElementException;/** * This class represents all arcs (segments of an ellipse in 2-D space). The * arcs are defined by starting angle and extent (arc length) in degrees, as * opposed to radians (like the rest of Java), and can be open, chorded, or * wedge shaped. The angles are skewed according to the ellipse, so that 45 * degrees always points to the upper right corner (positive x, negative y) * of the bounding rectangle. A positive extent draws a counterclockwise arc, * and while the angle can be any value, the path iterator only traverses the * first 360 degrees. Storage is up to the subclasses. * * @author Eric Blake <ebb9@email.byu.edu> * @since 1.2 * @status updated to 1.4, but still missing functionality */public abstract class Arc2D extends RectangularShape{  /**   * An open arc, with no segment connecting the endpoints. This type of   * arc still contains the same points as a chorded version.   */  public static final int OPEN = 0;  /**   * A closed arc with a single segment connecting the endpoints (a chord).   */  public static final int CHORD = 1;  /**   * A closed arc with two segments, one from each endpoint, meeting at the   * center of the ellipse.   */  public static final int PIE = 2;  /** The closure type of this arc. */  private int type;  /**   * Create a new arc, with the specified closure type.   *   * @param type one of {@link #OPEN}, {@link #CHORD}, or {@link #PIE}.   * @throws IllegalArgumentException if type is invalid   */  protected Arc2D(int type)  {    if (type < OPEN || type > PIE)      throw new IllegalArgumentException();    this.type = type;  }  /**   * Get the starting angle of the arc in degrees.   *   * @return the starting angle   * @see #setAngleStart(double)   */  public abstract double getAngleStart();  /**   * Get the extent angle of the arc in degrees.   *   * @return the extent angle   * @see #setAngleExtent(double)   */  public abstract double getAngleExtent();  /**   * Return the closure type of the arc.   *   * @return the closure type   * @see #OPEN   * @see #CHORD   * @see #PIE   * @see #setArcType(int)   */  public int getArcType()  {    return type;  }  /**   * Returns the starting point of the arc.   *   * @return the start point   */  public Point2D getStartPoint()  {    double angle = getAngleStart() * (-180 / Math.PI);    double x = (Math.cos(angle) * getWidth() + getX()) / 2;    double y = (Math.sin(angle) * getHeight() + getY()) / 2;    return new Point2D.Double(x, y);  }  /**   * Returns the ending point of the arc.   *   * @return the end point   */  public Point2D getEndPoint()  {    double angle = (getAngleStart() + getAngleExtent()) * (-180 / Math.PI);    double x = (Math.cos(angle) * getWidth() + getX()) / 2;    double y = (Math.sin(angle) * getHeight() + getY()) / 2;    return new Point2D.Double(x, y);  }  /**   * Set the parameters of the arc. The angles are in degrees, and a positive   * extent sweeps counterclockwise (from the positive x-axis to the negative   * y-axis).   *   * @param x the new x coordinate of the lower left of the bounding box   * @param y the new y coordinate of the lower left of the bounding box   * @param w the new width of the bounding box   * @param h the new height of the bounding box   * @param start the start angle, in degrees   * @param extent the arc extent, in degrees   * @param type one of {@link #OPEN}, {@link #CHORD}, or {@link #PIE}   * @throws IllegalArgumentException if type is invalid   */  public abstract void setArc(double x, double y, double w, double h,                              double start, double extent, int type);  /**   * Set the parameters of the arc. The angles are in degrees, and a positive   * extent sweeps counterclockwise (from the positive x-axis to the negative   * y-axis).   *   * @param p the lower left point of the bounding box   * @param d the dimensions of the bounding box   * @param start the start angle, in degrees   * @param extent the arc extent, in degrees   * @param type one of {@link #OPEN}, {@link #CHORD}, or {@link #PIE}   * @throws IllegalArgumentException if type is invalid   * @throws NullPointerException if p or d is null   */  public void setArc(Point2D p, Dimension2D d,                     double start, double extent, int type)  {    setArc(p.getX(), p.getY(), d.getWidth(), d.getHeight(),           start, extent, type);  }  /**   * Set the parameters of the arc. The angles are in degrees, and a positive   * extent sweeps counterclockwise (from the positive x-axis to the negative   * y-axis).   *   * @param r the new bounding box   * @param start the start angle, in degrees   * @param extent the arc extent, in degrees   * @param type one of {@link #OPEN}, {@link #CHORD}, or {@link #PIE}   * @throws IllegalArgumentException if type is invalid   * @throws NullPointerException if r is null   */  public void setArc(Rectangle2D r, double start, double extent, int type)  {    setArc(r.getX(), r.getY(), r.getWidth(), r.getHeight(),           start, extent, type);  }  /**   * Set the parameters of the arc from the given one.   *   * @param a the arc to copy   * @throws NullPointerException if a is null   */  public void setArc(Arc2D a)  {    setArc(a.getX(), a.getY(), a.getWidth(), a.getHeight(),           a.getAngleStart(), a.getAngleExtent(), a.getArcType());  }  /**   * Set the parameters of the arc. The angles are in degrees, and a positive   * extent sweeps counterclockwise (from the positive x-axis to the negative   * y-axis). This controls the center point and radius, so the arc will be   * circular.   *   * @param x the x coordinate of the center of the circle   * @param y the y coordinate of the center of the circle   * @param r the radius of the circle   * @param start the start angle, in degrees   * @param extent the arc extent, in degrees   * @param type one of {@link #OPEN}, {@link #CHORD}, or {@link #PIE}   * @throws IllegalArgumentException if type is invalid   */  public void setArcByCenter(double x, double y, double r,                             double start, double extent, int type)  {    setArc(x - r, y - r, r + r, r + r, start, extent, type);  }  /**   * Sets the parameters of the arc by finding the tangents of two lines, and   * using the specified radius. The arc will be circular, will begin on the   * tangent point of the line extending from p1 to p2, and will end on the   * tangent point of the line extending from p2 to p3.   *   * XXX What happens if the points are colinear, or the radius negative?   *   * @param p1 the first point   * @param p2 the tangent line intersection point   * @param p3 the third point   * @param r the radius of the arc   * @throws NullPointerException if any point is null   */  public void setArcByTangent(Point2D p1, Point2D p2, Point2D p3, double r)  {    // XXX Implement.    throw new Error("not implemented");  }  /**   * Set the start, in degrees.   *   * @param start the new start angle   * @see #getAngleStart()   */  public abstract void setAngleStart(double start);  /**   * Set the extent, in degrees.   *   * @param extent the new extent angle   * @see #getAngleExtent()   */  public abstract void setAngleExtent(double extent);  /**   * Sets the starting angle to the angle of the given point relative to   * the center of the arc. The extent remains constant; in other words,   * this rotates the arc.   *   * @param p the new start point   * @throws NullPointerException if p is null   * @see #getStartPoint()   * @see #getAngleStart()   */  public void setAngleStart(Point2D p)  {    double x = ((p.getX() * 2) - getX()) / getWidth();    double y = ((p.getY() * 2) - getY()) / getHeight();    setAngleStart(Math.atan2(y, x) * (-180 / Math.PI));  }  /**   * Sets the starting and extent angles to those of the given points   * relative to the center of the arc. The arc will be non-empty, and will   * extend counterclockwise.   *   * @param x1 the first x coordinate   * @param y1 the first y coordinate   * @param x2 the second x coordinate   * @param y2 the second y coordinate   * @see #setAngleStart(Point2D)   */  public void setAngles(double x1, double y1, double x2, double y2)  {    // Normalize the points.    double mx = getX();    double my = getY();    double mw = getWidth();    double mh = getHeight();    x1 = ((x1 * 2) - mx) / mw;    y1 = ((y1 * 2) - my) / mh;    x2 = ((x2 * 2) - mx) / mw;    y2 = ((y2 * 2) - my) / mh;    double start = Math.atan2(y1, x1) * (-180 / Math.PI);    double extent = Math.atan2(y2, x2) * (-180 / Math.PI) - start;    if (extent < 0)      extent += 360;    setAngleStart(start);    setAngleExtent(extent);  }  /**   * Sets the starting and extent angles to those of the given points   * relative to the center of the arc. The arc will be non-empty, and will   * extend counterclockwise.   *   * @param p1 the first point   * @param p2 the second point   * @throws NullPointerException if either point is null   * @see #setAngleStart(Point2D)   */  public void setAngles(Point2D p1, Point2D p2)  {    setAngles(p1.getX(), p1.getY(), p2.getX(), p2.getY());  }  /**   * Set the closure type of this arc.   *   * @param type one of {@link #OPEN}, {@link #CHORD}, or {@link #PIE}   * @throws IllegalArgumentException if type is invalid   * @see #getArcType()   */  public void setArcType(int type)  {    if (type < OPEN || type > PIE)      throw new IllegalArgumentException();    this.type = type;  }  /**   * Sets the location and bounds of the ellipse of which this arc is a part.   *   * @param x the new x coordinate   * @param y the new y coordinate   * @param w the new width   * @param h the new height   * @see #getFrame()   */  public void setFrame(double x, double y, double w, double h)  {    setArc(x, y, w, h, getAngleStart(), getAngleExtent(), type);  }  /**   * Gets the bounds of the arc. This is much tighter than   * <code>getBounds</code>, as it takes into consideration the start and   * end angles, and the center point of a pie wedge, rather than just the   * overall ellipse.   *   * @return the bounds of the arc   * @see #getBounds()   */  public Rectangle2D getBounds2D()  {    double extent = getAngleExtent();    if (Math.abs(extent) >= 360)      return makeBounds(getX(), getY(), getWidth(), getHeight());    // XXX Finish implementing.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -