绘制几何图元

原文: https://docs.oracle.com/javase/tutorial/2d/geometry/primitives.html

Java 2D API 提供了几个定义常见几何对象的类,如点,线,曲线和矩形。这些几何类是 java.awt.geom 包的一部分。 PathIterator 接口定义了从路径中检索元素的方法。 Shape 接口提供了一组用于描述和检查几何路径对象的方法。该接口由 GeneralPath 类和其他几何类实现。

本节中表示的所有示例都使用java.awt.geom包创建几何,然后使用 Graphics2D 类进行渲染。首先获取Graphics2D对象,例如通过转换paint()方法的Graphics参数。

  1. public void paint (Graphics g) {
  2. Graphics2D g2 = (Graphics2D) g;
  3. ...
  4. }

Point 类创建表示(x,y)坐标空间中的位置的点。子类Point2D.FloatPoint2D.Double相应地提供浮点和双精度,用于存储点的坐标。

  1. //Create Point2D.Double
  2. Point2D.Double point = new Point2D.Double(x, y);

要创建坐标为 0,0 的点,请使用默认构造器Point2D.Double()。 您可以使用setLocation方法设置点的位置,如下所示:

  • setLocation(double x, double y) - 将点定义坐标的位置设置为双精度值。
  • setLocation(Point2D p) - 使用另一个点的坐标设置点的位置。

此外,Point2D类具有计算当前点与具有给定坐标的点之间的距离或两点之间的距离的方法。

线

Line2D 类表示(x,y)坐标空间中的线段。 Line2D. FloatLine2D.Double子类以 float 和 double 精度指定行。例如:

  1. // draw Line2D.Double
  2. g2.draw(new Line2D.Double(x1, y1, x2, y2));

Line

该类包括几个setLine()方法来定义该行的端点。 或者,可以使用Line2D.Float类的构造器指定行的端点,如下所示:

  • Line2D.Float(float X1, float Y1, float X2, float Y2)
  • Line2D.Float(Point2D p1, Point2D p2)

使用Graphics2D类中的 Stroke 对象定义线路径的笔划。

曲线

java.awt.geom包使您可以创建二次或三次曲线段。

二次曲线段

QuadCurve2D 类实现Shape接口。此类表示(x,y)坐标空间中的二次参数曲线段。 QuadCurve2D.FloatQuadCurve2D.Double子类以 float 和 double 精度指定二次曲线。

几种setCurve方法用于指定两个端点和曲线的控制点,其坐标可以通过其他点的坐标和使用给定的数组直接定义。 一种非常有用的方法setCurve(QuadCurve2D),将二次曲线设置为相同的端点,控制点设置为提供的曲线。例如:

  1. // create new QuadCurve2D.Float
  2. QuadCurve2D q = new QuadCurve2D.Float();
  3. // draw QuadCurve2D.Float with set coordinates
  4. q.setCurve(x1, y1, ctrlx, ctrly, x2, y2);
  5. g2.draw(q);

Quadratic parametric curve segment

立方曲线段

CubicCurve2D 类也实现 Shape 接口。此类表示(x,y)坐标空间中的三次参数曲线段。 CubicCurve2D.FloatCubicCurve2D.Double子类以 float 和 double 精度指定三次曲线。

CubicCurve2D类具有类似的方法,用于将曲线设置为QuadraticCurve2D类,除了第二个控制点。例如:

  1. // create new CubicCurve2D.Double
  2. CubicCurve2D c = new CubicCurve2D.Double();
  3. // draw CubicCurve2D.Double with set coordinates
  4. c.setCurve(x1, y1, ctrlx1,
  5. ctrly1, ctrlx2, ctrly2, x2, y2);
  6. g2.draw(c);

Cubic Curve Segment

长方形

指定以下示例中表示的基元的类扩展了RectangularShape类,该类实现Shape接口并添加了一些自己的方法。

通过这些方法,您可以获取有关形状位置和大小的信息,检查矩形的中心点以及设置形状的边界。

Rectangle2D 类表示由位置(x,y)和尺寸(w×h)定义的矩形。 Rectangle2D.FloatRectangle2D.Double子类以 float 和 double 精度指定矩形。例如:

  1. // draw Rectangle2D.Double
  2. g2.draw(new Rectangle2D.Double(x, y,
  3. rectwidth,
  4. rectheight));

Rectangle

RoundRectangle2D 类表示具有由位置(x,y),尺寸(w x h)以及角弧的宽度和高度定义的圆角的矩形。 RoundRectangle2D.FloatRoundRectangle2D.Double子类以 float 和 double 精度指定圆角矩形。

圆角矩形使用以下参数指定:

  • 地点
  • 宽度
  • 高度
  • 角弧的宽度
  • 角弧的高度

要设置RoundRectangle2D对象的位置,大小和弧,请使用方法setRoundRect(double a, double y, double w, double h, double arcWidth, double arcHeight)。例如:

  1. // draw RoundRectangle2D.Double
  2. g2.draw(new RoundRectangle2D.Double(x, y,
  3. rectwidth,
  4. rectheight,
  5. 10, 10));

Rounded Rectangle

椭圆

Ellipse2D 类表示由边界矩形定义的椭圆。 Ellipse2D.FloatEllipse2D.Double子类以 float 和 double 精度指定椭圆。

椭圆完全由位置,宽度和高度定义。例如:

  1. // draw Ellipse2D.Double
  2. g2.draw(new Ellipse2D.Double(x, y,
  3. rectwidth,
  4. rectheight));

Ellipse

要绘制一个椭圆,请使用 Arc2D 类。此类表示由边界矩形,起始角度,角度范围和闭合类型定义的弧。 Arc2D.FloatArc2D.Double子类以 float 和 double 精度指定椭圆。

Arc2D类定义了以下三种类型的弧,由该类中的相应常量表示:OPEN,PIE 和 CHORD。

Arc

有几种方法可以设置弧的大小和参数:

  • 直接,通过坐标
  • 提供Point2DDimension2D
  • 通过复制现有的Arc2D

此外,您可以使用setArcByCenter方法从中心点指定圆弧,由其坐标和半径指定。

  1. // draw Arc2D.Double
  2. g2.draw(new Arc2D.Double(x, y,
  3. rectwidth,
  4. rectheight,
  5. 90, 135,
  6. Arc2D.OPEN));

Arc

ShapesDemo2D.java 代码示例包含所有描述的几何图元的实现。有关本节中介绍的类和方法的更多信息,请参阅 java.awt.geom 规范。