Module java.desktop
Package java.awt.geom

Class CubicCurve2D

java.lang.Object
java.awt.geom.CubicCurve2D
所有已实现的接口:
Shape, Cloneable
直接已知的子类:
CubicCurve2D.Double, CubicCurve2D.Float

public abstract class CubicCurve2D extends Object implements Shape, Cloneable
CubicCurve2D类在(x,y)坐标空间中定义了一个立方参数曲线段。

这个类只是所有存储2D立方曲线段的对象的抽象超类。坐标的实际存储表示留给子类。

自从:
1.2
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    static class 
    使用double坐标指定的立方参数曲线段。
    static class 
    使用float坐标指定的立方参数曲线段。
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    protected
    这是一个抽象类,不能直接实例化。
  • Method Summary

    Modifier and Type
    Method
    Description
    clone()
    创建一个与此对象相同类的新对象。
    boolean
    contains(double x, double y)
    测试指定的坐标是否在Shape的边界内,如内部定义所述。
    boolean
    contains(double x, double y, double w, double h)
    测试Shape的内部是否完全包含指定的矩形区域。
    boolean
    测试指定的Point2D是否在Shape的边界内,如内部定义所述。
    boolean
    测试Shape的内部是否完全包含指定的Rectangle2D
    返回完全包围Shape的整数Rectangle
    返回Shape的高精度和更准确的边界框,比getBounds方法更精确。
    abstract Point2D
    返回第一个控制点。
    abstract Point2D
    返回第二个控制点。
    abstract double
    返回第一个控制点的X坐标,以双精度表示。
    abstract double
    返回第二个控制点的X坐标,以双精度表示。
    abstract double
    返回第一个控制点的Y坐标,以双精度表示。
    abstract double
    返回第二个控制点的Y坐标,以双精度表示。
    double
    返回此曲线的平坦度。
    static double
    getFlatness(double[] coords, int offset)
    返回指定数组中指定索引处存储的控制点所指定的立方曲线的平坦度。
    static double
    getFlatness(double x1, double y1, double ctrlx1, double ctrly1, double ctrlx2, double ctrly2, double x2, double y2)
    返回指定控制点指定的立方曲线的平坦度。
    double
    返回此曲线的平坦度的平方。
    static double
    getFlatnessSq(double[] coords, int offset)
    返回指定数组中指定索引处存储的控制点所指定的立方曲线的平坦度的平方。
    static double
    getFlatnessSq(double x1, double y1, double ctrlx1, double ctrly1, double ctrlx2, double ctrly2, double x2, double y2)
    返回指定控制点指定的立方曲线的平坦度的平方。
    abstract Point2D
    getP1()
    返回起始点。
    abstract Point2D
    getP2()
    返回结束点。
    返回定义形状边界的迭代对象。
    getPathIterator(AffineTransform at, double flatness)
    返回定义扁平化形状边界的迭代对象。
    abstract double
    getX1()
    返回起始点的X坐标,以双精度表示。
    abstract double
    getX2()
    返回结束点的X坐标,以双精度表示。
    abstract double
    getY1()
    返回起始点的Y坐标,以双精度表示。
    abstract double
    getY2()
    返回结束点的Y坐标,以双精度表示。
    boolean
    intersects(double x, double y, double w, double h)
    测试Shape的内部是否与指定矩形区域的内部相交。
    boolean
    测试Shape的内部是否与指定Rectangle2D的内部相交。
    void
    setCurve(double[] coords, int offset)
    将存储在src数组中的坐标指定的立方曲线细分为srcoff到(srcoff + 7)的两个细分曲线,并将结果存储到相应索引的两个结果数组中。
    abstract void
    setCurve(double x1, double y1, double ctrlx1, double ctrly1, double ctrlx2, double ctrly2, double x2, double y2)
    将此立方曲线的端点和控制点的位置设置为指定数组中指定偏移量处的双精度坐标。
    void
    将此曲线的端点和控制点的位置设置为指定的双精度坐标。
    void
    setCurve(Point2D[] pts, int offset)
    将此曲线的端点和控制点的位置设置为指定数组中指定偏移量处的Point2D对象的坐标。
    void
    setCurve(Point2D p1, Point2D cp1, Point2D cp2, Point2D p2)
    将此曲线的端点和控制点的位置设置为指定的Point2D坐标。
    static int
    solveCubic(double[] eqn)
    解决eqn数组中系数的立方方程,并将非复根放回同一数组,返回根数。
    static int
    solveCubic(double[] eqn, double[] res)
    解决eqn数组中系数的立方方程,并将非复根放入res数组,返回根数。
    static void
    subdivide(double[] src, int srcoff, double[] left, int leftoff, double[] right, int rightoff)
    src数组中存储的坐标指定的立方曲线细分为srcoff到(srcoff + 7)的曲线,并将结果存储到左右曲线参数中。
    void
    将此立方曲线细分,并将结果存储到左右曲线参数中。
    static void
    src参数指定的立方曲线细分,并将结果存储到leftright曲线参数中。

    Methods declared in class java.lang.Object

    equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • CubicCurve2D

      protected CubicCurve2D()
      这是一个抽象类,不能直接实例化。有特定类型的实现子类可供实例化,并提供多种格式来存储满足下面各种访问器方法所需信息。
      自从:
      1.2
      参见:
  • Method Details

    • getX1

      public abstract double getX1()
      返回起始点的X坐标,以双精度表示。
      返回:
      CubicCurve2D的起始点的X坐标。
      自从:
      1.2
    • getY1

      public abstract double getY1()
      返回起始点的Y坐标,以双精度表示。
      返回:
      CubicCurve2D的起始点的Y坐标。
      自从:
      1.2
    • getP1

      public abstract Point2D getP1()
      返回起始点。
      返回:
      CubicCurve2D的起始点Point2D
      自从:
      1.2
    • getCtrlX1

      public abstract double getCtrlX1()
      返回第一个控制点的X坐标,以双精度表示。
      返回:
      CubicCurve2D的第一个控制点的X坐标。
      自从:
      1.2
    • getCtrlY1

      public abstract double getCtrlY1()
      返回第一个控制点的Y坐标,以双精度表示。
      返回:
      CubicCurve2D的第一个控制点的Y坐标。
      自从:
      1.2
    • getCtrlP1

      public abstract Point2D getCtrlP1()
      返回第一个控制点。
      返回:
      CubicCurve2D的第一个控制点Point2D
      自从:
      1.2
    • getCtrlX2

      public abstract double getCtrlX2()
      返回第二个控制点的X坐标,以双精度表示。
      返回:
      CubicCurve2D的第二个控制点的X坐标。
      自从:
      1.2
    • getCtrlY2

      public abstract double getCtrlY2()
      返回第二个控制点的Y坐标,以双精度表示。
      返回:
      CubicCurve2D的第二个控制点的Y坐标。
      自从:
      1.2
    • getCtrlP2

      public abstract Point2D getCtrlP2()
      返回第二个控制点。
      返回:
      CubicCurve2D的第二个控制点Point2D
      自从:
      1.2
    • getX2

      public abstract double getX2()
      返回结束点的X坐标,以双精度表示。
      返回:
      CubicCurve2D的结束点的X坐标。
      自从:
      1.2
    • getY2

      public abstract double getY2()
      返回结束点的Y坐标,以双精度表示。
      返回:
      CubicCurve2D的结束点的Y坐标。
      自从:
      1.2
    • getP2

      public abstract Point2D getP2()
      返回结束点。
      返回:
      CubicCurve2D的结束点Point2D
      自从:
      1.2
    • setCurve

      public abstract void setCurve(double x1, double y1, double ctrlx1, double ctrly1, double ctrlx2, double ctrly2, double x2, double y2)
      将此曲线的端点和控制点的位置设置为指定的双精度坐标。
      参数:
      x1 - 用于设置此CubicCurve2D起始点的X坐标
      y1 - 用于设置此CubicCurve2D起始点的Y坐标
      ctrlx1 - 用于设置此CubicCurve2D第一个控制点的X坐标
      ctrly1 - 用于设置此CubicCurve2D第一个控制点的Y坐标
      ctrlx2 - 用于设置此CubicCurve2D第二个控制点的X坐标
      ctrly2 - 用于设置此CubicCurve2D第二个控制点的Y坐标
      x2 - 用于设置此CubicCurve2D结束点的X坐标
      y2 - 用于设置此CubicCurve2D结束点的Y坐标
      自从:
      1.2
    • setCurve

      public void setCurve(double[] coords, int offset)
      将此曲线的端点和控制点的位置设置为指定数组中指定偏移量处的双精度坐标。
      参数:
      coords - 包含坐标的双精度数组
      offset - coords 中开始设置此曲线的端点和控制点的索引,这些点的坐标包含在 coords
      自版本:
      1.2
    • setCurve

      public void setCurve(Point2D p1, Point2D cp1, Point2D cp2, Point2D p2)
      将此曲线的端点和控制点位置设置为指定的 Point2D 坐标。
      参数:
      p1 - 用于设置此曲线起始点的第一个指定 Point2D
      cp1 - 用于设置此曲线第一个控制点的第二个指定 Point2D
      cp2 - 用于设置此曲线第二个控制点的第三个指定 Point2D
      p2 - 用于设置此曲线结束点的第四个指定 Point2D
      自版本:
      1.2
    • setCurve

      public void setCurve(Point2D[] pts, int offset)
      将此曲线的端点和控制点位置设置为指定数组中指定偏移量处的 Point2D 对象的坐标。
      参数:
      pts - 一个 Point2D 对象数组
      offset - pts 中开始设置此曲线的端点和控制点的索引,这些点的坐标包含在 pts
      自版本:
      1.2
    • setCurve

      public void setCurve(CubicCurve2D c)
      将此曲线的端点和控制点位置设置为指定的 CubicCurve2D 中的位置。
      参数:
      c - 指定的 CubicCurve2D
      自版本:
      1.2
    • getFlatnessSq

      public static double getFlatnessSq(double x1, double y1, double ctrlx1, double ctrly1, double ctrlx2, double ctrly2, double x2, double y2)
      返回由指定控制点指定的三次曲线的平坦度的平方。平坦度是控制点到连接端点的线的最大距离。
      参数:
      x1 - 指定 CubicCurve2D 起始点的 X 坐标
      y1 - 指定 CubicCurve2D 起始点的 Y 坐标
      ctrlx1 - 指定 CubicCurve2D 第一个控制点的 X 坐标
      ctrly1 - 指定 CubicCurve2D 第一个控制点的 Y 坐标
      ctrlx2 - 指定 CubicCurve2D 第二个控制点的 X 坐标
      ctrly2 - 指定 CubicCurve2D 第二个控制点的 Y 坐标
      x2 - 指定 CubicCurve2D 结束点的 X 坐标
      y2 - 指定 CubicCurve2D 结束点的 Y 坐标
      返回:
      由指定坐标表示的 CubicCurve2D 的平坦度的平方。
      自版本:
      1.2
    • getFlatness

      public static double getFlatness(double x1, double y1, double ctrlx1, double ctrly1, double ctrlx2, double ctrly2, double x2, double y2)
      返回由指定控制点指定的三次曲线的平坦度。平坦度是控制点到连接端点的线的最大距离。
      参数:
      x1 - 指定 CubicCurve2D 起始点的 X 坐标
      y1 - 指定 CubicCurve2D 起始点的 Y 坐标
      ctrlx1 - 指定 CubicCurve2D 第一个控制点的 X 坐标
      ctrly1 - 指定 CubicCurve2D 第一个控制点的 Y 坐标
      ctrlx2 - 指定 CubicCurve2D 第二个控制点的 X 坐标
      ctrly2 - 指定 CubicCurve2D 第二个控制点的 Y 坐标
      x2 - 指定 CubicCurve2D 结束点的 X 坐标
      y2 - 指定 CubicCurve2D 结束点的 Y 坐标
      返回:
      由指定坐标表示的 CubicCurve2D 的平坦度。
      自版本:
      1.2
    • getFlatnessSq

      public static double getFlatnessSq(double[] coords, int offset)
      返回由指定数组中指定索引处存储的控制点指定的三次曲线的平坦度的平方。平坦度是控制点到连接端点的线的最大距离。
      参数:
      coords - 包含坐标的数组
      offset - coords 中开始获取曲线的端点和控制点的索引
      返回:
      由指定偏移量处的 coords 中的坐标表示的 CubicCurve2D 的平坦度的平方。
      自版本:
      1.2
    • getFlatness

      public static double getFlatness(double[] coords, int offset)
      返回由指定数组中指定索引处存储的控制点指定的三次曲线的平坦度。平坦度是控制点到连接端点的线的最大距离。
      参数:
      coords - 包含坐标的数组
      offset - coords 中开始获取曲线的端点和控制点的索引
      返回:
      由指定偏移量处的 coords 中的坐标表示的 CubicCurve2D 的平坦度。
      自版本:
      1.2
    • getFlatnessSq

      public double getFlatnessSq()
      返回此曲线的平坦度的平方。平坦度是控制点到连接端点的线的最大距离。
      返回:
      此曲线的平坦度的平方。
      自版本:
      1.2
    • getFlatness

      public double getFlatness()
      返回此曲线的平坦度。平坦度是控制点到连接端点的线的最大距离。
      返回:
      此曲线的平坦度。
      自版本:
      1.2
    • subdivide

      public void subdivide(CubicCurve2D left, CubicCurve2D right)
      将此三次曲线细分,并将结果的两个细分曲线存储到左侧和右侧曲线参数中。左侧和右侧对象中的一个或两个可能与此对象相同或为 null。
      参数:
      left - 用于存储细分曲线左侧或第一半的三次曲线对象
      right - 用于存储细分曲线右侧或第二半的三次曲线对象
      自版本:
      1.2
    • subdivide

      public static void subdivide(CubicCurve2D src, CubicCurve2D left, CubicCurve2D right)
      细分由 src 参数指定的三次曲线,并将结果的两个细分曲线存储到 leftright 曲线参数中。左侧和右侧对象中的一个或两个可能与 src 对象相同或为 null
      参数:
      src - 要细分的三次曲线
      left - 用于存储细分曲线左侧或第一半的三次曲线对象
      right - 用于存储细分曲线右侧或第二半的三次曲线对象
      自版本:
      1.2
    • subdivide

      public static void subdivide(double[] src, int srcoff, double[] left, int leftoff, double[] right, int rightoff)
      细分由 src 数组中索引 srcoff 到 (srcoff + 7) 处存储的坐标指定的三次曲线,并将结果的两个细分曲线存储到两个结果数组的相应索引中。左侧和右侧数组中的一个或两个可能为 null 或与 src 数组相同的数组。请注意,第一个细分曲线中的最后一个点与第二个细分曲线中的第一个点相同。因此,可以将相同的数组传递给 leftright,并使用偏移量,例如 rightoff 等于 (leftoff + 6),以避免为此公共点分配额外存储空间。
      参数:
      src - 包含源曲线坐标的数组
      srcoff - 源坐标数组中开始的偏移量,指向 6 个源坐标的开始
      left - 用于存储细分曲线第一半坐标的数组
      leftoff - 指向 6 个左侧坐标的开始的偏移量
      right - 用于存储细分曲线第二半坐标的数组
      rightoff - 指向 6 个右侧坐标的开始的偏移量
      自版本:
      1.2
    • solveCubic

      public static int solveCubic(double[] eqn)
      解决 eqn 数组中系数表示的三次方程,并将非复根放回相同数组,返回根的数量。解决的三次方程表示为:
           eqn = {c, b, a, d}
           dx^3 + ax^2 + bx + c = 0
       
      返回值 -1 用于区分常数方程(可能始终为 0 或永远不为 0)和没有零点的方程。
      参数:
      eqn - 包含三次方程系数的数组
      返回:
      根的数量,如果方程是常数则返回 -1。
      自版本:
      1.2
    • solveCubic

      public static int solveCubic(double[] eqn, double[] res)
      解决 eqn 数组中系数表示的三次方程,并将非复根放回 res 数组,返回根的数量。解决的三次方程表示为: eqn = {c, b, a, d} dx^3 + ax^2 + bx + c = 0 返回值 -1 用于区分常数方程(可能始终为 0 或永远不为 0)和没有零点的方程。
      参数:
      eqn - 用于解决三次方程的指定系数数组
      res - 包含解决三次方程后的非复根的数组
      返回:
      根的数量,如果方程是常数则返回 -1
      自版本:
      1.3
    • contains

      public boolean contains(double x, double y)
      测试指定坐标是否在 Shape 的边界内,如 内部定义 描述的那样。
      指定者:
      contains 在接口 Shape
      参数:
      x - 要测试的指定X坐标
      y - 要测试的指定Y坐标
      返回值:
      如果指定的坐标在Shape边界内,则返回true; 否则返回false
      自版本:
      1.2
    • contains

      public boolean contains(Point2D p)
      测试指定的Point2D是否在Shape的边界内,如内部定义所述。
      指定者:
      contains 在接口 Shape
      参数:
      p - 要测试的指定Point2D
      返回值:
      如果指定的Point2DShape的边界内,则返回true; 否则返回false
      自版本:
      1.2
    • intersects

      public boolean intersects(double x, double y, double w, double h)
      测试Shape的内部是否与指定矩形区域的内部相交。如果任何点同时包含在Shape的内部和指定矩形区域内,则认为矩形区域与Shape相交。

      Shape.intersects()方法允许Shape实现在以下情况下保守地返回true

      • 矩形区域和Shape有很高的可能性相交,但
      • 准确确定此交集的计算代价过高。
      这意味着对于某些Shapes,即使矩形区域与Shape不相交,此方法可能返回true。与大多数Shape对象相比,Area类执行更准确的几何相交计算,因此如果需要更精确的答案,则可以使用该类。
      指定者:
      intersects 在接口 Shape
      参数:
      x - 指定矩形区域左上角的X坐标
      y - 指定矩形区域左上角的Y坐标
      w - 指定矩形区域的宽度
      h - 指定矩形区域的高度
      返回值:
      如果Shape的内部和矩形区域的内部相交,或者两者高度可能相交且计算交集的代价过高,则返回true; 否则返回false
      自版本:
      1.2
      另请参阅:
    • intersects

      public boolean intersects(Rectangle2D r)
      测试Shape的内部是否与指定Rectangle2D的内部相交。Shape.intersects()方法允许Shape实现在以下情况下保守地返回true
      • 矩形区域和Shape有很高的可能性相交,但
      • 准确确定此交集的计算代价过高。
      这意味着对于某些Shapes,即使Rectangle2DShape不相交,此方法可能返回true。与大多数Shape对象相比,Area类执行更准确的几何相交计算,因此如果需要更精确的答案,则可以使用该类。
      指定者:
      intersects 在接口 Shape
      参数:
      r - 指定的Rectangle2D
      返回值:
      如果Shape的内部和指定的Rectangle2D的内部相交,或者两者高度可能相交且计算交集的代价过高,则返回true; 否则返回false
      自版本:
      1.2
      另请参阅:
    • contains

      public boolean contains(double x, double y, double w, double h)
      测试Shape的内部是否完全包含指定的矩形区域。所有位于矩形区域内部的坐标必须完全位于Shape内部,才能认为整个矩形区域包含在Shape内部。

      Shape.contains()方法允许Shape实现在以下情况下保守地返回false

      • intersect方法返回true
      • 确定Shape是否完全包含矩形区域的计算代价过高。
      这意味着对于某些Shapes,即使Shape包含矩形区域,此方法可能返回false。与大多数Shape对象相比,Area类执行更准确的几何计算,因此如果需要更精确的答案,则可以使用该类。
      指定者:
      contains 在接口 Shape
      参数:
      x - 指定矩形区域左上角的X坐标
      y - 指定矩形区域左上角的Y坐标
      w - 指定矩形区域的宽度
      h - 指定矩形区域的高度
      返回值:
      如果Shape的内部完全包含指定的矩形区域,则返回true; 否则返回false,或者如果Shape包含矩形区域且intersects方法返回true且包含计算代价过高,则返回false
      自版本:
      1.2
      另请参阅:
    • contains

      public boolean contains(Rectangle2D r)
      测试Shape的内部是否完全包含指定的Rectangle2DShape.contains()方法允许Shape实现在以下情况下保守地返回false
      • intersect方法返回true
      • 确定Shape是否完全包含Rectangle2D的计算代价过高。
      这意味着对于某些Shapes,即使Shape包含Rectangle2D,此方法可能返回false。与大多数Shape对象相比,Area类执行更准确的几何计算,因此如果需要更精确的答案,则可以使用该类。
      指定者:
      contains 在接口 Shape
      参数:
      r - 指定的Rectangle2D
      返回值:
      如果Shape的内部完全包含Rectangle2D,则返回true; 否则返回false,或者如果Shape包含Rectangle2Dintersects方法返回true且包含计算代价过高,则返回false
      自版本:
      1.2
      另请参阅:
    • getBounds2D

      public Rectangle2D getBounds2D()
      返回Shape的边界框比getBounds方法更高精度和更准确。请注意,返回的Rectangle2D不一定是包围Shape的最小边界框,只是Shape完全位于指示的Rectangle2D内部。此方法返回的边界框通常比getBounds方法返回的边界框更紧凑,并且不会因为溢出问题而失败,因为返回值可以是使用双精度值存储维度的Rectangle2D的实例。

      请注意,内部定义可能导致shape的定义轮廓上的点可能不被认为包含在返回的bounds对象中,但只有在这些点也不被认为包含在原始shape中的情况下才是如此。

      如果point根据contains(point)方法在shape内部,则根据boundscontains(point)方法,它必须在返回的Rectangle2D边界对象内部。具体来说:

      shape.contains(p)需要bounds.contains(p)

      如果point不在shape内部,则它可能仍包含在bounds对象中:

      bounds.contains(p)不意味着shape.contains(p)

      指定者:
      getBounds2D 在接口 Shape
      返回值:
      一个Rectangle2D的实例,它是Shape的高精度边界框。
      自版本:
      1.2
      参见:
    • getBounds

      public Rectangle getBounds()
      返回一个整数Rectangle,完全包围Shape。请注意,返回的Rectangle不一定是包围Shape的最小边界框,只是确保Shape完全位于指示的Rectangle内。如果Shape超出整数数据类型的有限范围,返回的Rectangle也可能无法完全包围Shape。由于getBounds2D方法在表示上更加灵活,通常返回一个更紧密的边界框。

      请注意,内部定义可能导致这样的情况:定义形状的轮廓上的点可能不被认为包含在返回的bounds对象中,但只有在这些点也不被认为包含在原始shape中的情况下才是如此。

      如果一个point根据contains(point)方法在shape内部,那么根据boundscontains(point)方法,它必须在返回的Rectangle边界对象内部。具体来说:

      shape.contains(x,y)要求bounds.contains(x,y)

      如果一个point不在shape内部,那么它可能仍然包含在bounds对象中:

      bounds.contains(x,y)不意味着shape.contains(x,y)

      指定者:
      getBounds 在接口 Shape
      返回值:
      一个整数Rectangle,完全包围Shape
      自版本:
      1.2
      参见:
    • getPathIterator

      public PathIterator getPathIterator(AffineTransform at)
      返回一个定义形状边界的迭代对象。该类的迭代器不是多线程安全的,这意味着这个CubicCurve2D类不能保证对该CubicCurve2D对象几何形状的修改不会影响已经在进行中的任何几何形状的迭代。
      指定者:
      getPathIterator 在接口 Shape
      参数:
      at - 一个可选的AffineTransform,用于在迭代返回坐标时应用,或者如果需要未转换的坐标,则为null
      返回值:
      返回PathIterator对象,以一段一段地返回该CubicCurve2D的轮廓几何形状。
      自版本:
      1.2
    • getPathIterator

      public PathIterator getPathIterator(AffineTransform at, double flatness)
      返回一个定义扁平化形状边界的迭代对象。该类的迭代器不是多线程安全的,这意味着这个CubicCurve2D类不能保证对该CubicCurve2D对象几何形状的修改不会影响已经在进行中的任何几何形状的迭代。
      指定者:
      getPathIterator 在接口 Shape
      参数:
      at - 一个可选的AffineTransform,用于在迭代返回坐标时应用,或者如果需要未转换的坐标,则为null
      flatness - 给定曲线的控制点在变化为共线之前可以变化的最大量,此时一个细分曲线将被连接端点的直线替换
      返回值:
      返回PathIterator对象,以一段一段地返回该CubicCurve2D的轮廓几何形状。
      自版本:
      1.2
    • clone

      public Object clone()
      创建一个与此对象相同类的新对象。
      覆盖:
      clone 在类 Object
      返回值:
      此实例的克隆。
      抛出:
      OutOfMemoryError - 如果内存不足
      自版本:
      1.2
      参见: