绘制几何图元
原文: 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
参数。
public void paint (Graphics g) {
Graphics2D g2 = (Graphics2D) g;
...
}
点
Point
类创建表示(x,y)坐标空间中的位置的点。子类Point2D.Float
和Point2D.Double
相应地提供浮点和双精度,用于存储点的坐标。
//Create Point2D.Double
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. Float
和Line2D.Double
子类以 float 和 double 精度指定行。例如:
// draw Line2D.Double
g2.draw(new Line2D.Double(x1, y1, x2, y2));
该类包括几个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.Float
和QuadCurve2D.Double
子类以 float 和 double 精度指定二次曲线。
几种setCurve
方法用于指定两个端点和曲线的控制点,其坐标可以通过其他点的坐标和使用给定的数组直接定义。
一种非常有用的方法setCurve(QuadCurve2D)
,将二次曲线设置为相同的端点,控制点设置为提供的曲线。例如:
// create new QuadCurve2D.Float
QuadCurve2D q = new QuadCurve2D.Float();
// draw QuadCurve2D.Float with set coordinates
q.setCurve(x1, y1, ctrlx, ctrly, x2, y2);
g2.draw(q);
立方曲线段
CubicCurve2D
类也实现 Shape
接口。此类表示(x,y)坐标空间中的三次参数曲线段。 CubicCurve2D.Float
和CubicCurve2D.Double
子类以 float 和 double 精度指定三次曲线。
CubicCurve2D
类具有类似的方法,用于将曲线设置为QuadraticCurve2D
类,除了第二个控制点。例如:
// create new CubicCurve2D.Double
CubicCurve2D c = new CubicCurve2D.Double();
// draw CubicCurve2D.Double with set coordinates
c.setCurve(x1, y1, ctrlx1,
ctrly1, ctrlx2, ctrly2, x2, y2);
g2.draw(c);
长方形
指定以下示例中表示的基元的类扩展了RectangularShape
类,该类实现Shape
接口并添加了一些自己的方法。
通过这些方法,您可以获取有关形状位置和大小的信息,检查矩形的中心点以及设置形状的边界。
Rectangle2D
类表示由位置(x,y)和尺寸(w×h)定义的矩形。 Rectangle2D.Float
和Rectangle2D.Double
子类以 float 和 double 精度指定矩形。例如:
// draw Rectangle2D.Double
g2.draw(new Rectangle2D.Double(x, y,
rectwidth,
rectheight));
RoundRectangle2D
类表示具有由位置(x,y),尺寸(w x h)以及角弧的宽度和高度定义的圆角的矩形。 RoundRectangle2D.Float
和RoundRectangle2D.Double
子类以 float 和 double 精度指定圆角矩形。
圆角矩形使用以下参数指定:
- 地点
- 宽度
- 高度
- 角弧的宽度
- 角弧的高度
要设置RoundRectangle2D
对象的位置,大小和弧,请使用方法setRoundRect(double a, double y, double w, double h, double arcWidth, double arcHeight)
。例如:
// draw RoundRectangle2D.Double
g2.draw(new RoundRectangle2D.Double(x, y,
rectwidth,
rectheight,
10, 10));
椭圆
Ellipse2D
类表示由边界矩形定义的椭圆。 Ellipse2D.Float
和Ellipse2D.Double
子类以 float 和 double 精度指定椭圆。
椭圆完全由位置,宽度和高度定义。例如:
// draw Ellipse2D.Double
g2.draw(new Ellipse2D.Double(x, y,
rectwidth,
rectheight));
弧
要绘制一个椭圆,请使用 Arc2D
类。此类表示由边界矩形,起始角度,角度范围和闭合类型定义的弧。 Arc2D.Float
和Arc2D.Double
子类以 float 和 double 精度指定椭圆。
Arc2D
类定义了以下三种类型的弧,由该类中的相应常量表示:OPEN,PIE 和 CHORD。
有几种方法可以设置弧的大小和参数:
- 直接,通过坐标
- 提供
Point2D
和Dimension2D
- 通过复制现有的
Arc2D
此外,您可以使用setArcByCenter
方法从中心点指定圆弧,由其坐标和半径指定。
// draw Arc2D.Double
g2.draw(new Arc2D.Double(x, y,
rectwidth,
rectheight,
90, 135,
Arc2D.OPEN));
ShapesDemo2D.java
代码示例包含所有描述的几何图元的实现。有关本节中介绍的类和方法的更多信息,请参阅 java.awt.geom
规范。