Sobre la base de la clase Graphics que proporciona varias figuras geométricas básicas, el lenguaje Java extiende la clase Graphics para proporcionar una clase Graphics2D, que tiene capacidades de procesamiento de gráficos bidimensionales más potentes y proporciona una conversión de coordenadas, gestión del color y diseño de texto más precisos. . control.
Propiedades de dibujo
Graphics2D define varios métodos para agregar o cambiar las propiedades de estado de los gráficos. Puede especificar el ancho del pincel y el método de conexión del pincel configurando y modificando las propiedades de estado; configurando la traducción, rotación, escala o recorte de gráficos de transformación y configurando el color y patrón de los gráficos rellenos, etc. Las propiedades del estado de los gráficos se almacenan mediante objetos específicos.
1. atributo de trazo
La propiedad de trazo controla el ancho de la línea, el estilo del lápiz, la forma en que se conectan los segmentos o el patrón de trazo. Para establecer esta propiedad, primero debe crear un objeto BasicStroke y luego llamar al método setStroke() para configurarlo. Los métodos para crear objetos BasicStroke son:
BasicStroke (float w): especifica el ancho de línea w.
BasicStroke(float w,int cap, int join):
cap es el punto final: CAP_BUTT (sin modificar), CAP_ROUND (extremo semicircular), CAP_SQUARE (extremo cuadrado, valor predeterminado).
Join define el método de conexión en la intersección de dos segmentos de línea: JOIN_BEVEL (sin modificar), JOIN_MTTER (extremo puntiagudo, valor predeterminado), JOIN_ROUND (extremo redondeado).
2. atributo de pintura
La propiedad de pintura controla el efecto de relleno. Primero llame al siguiente método para determinar el efecto de relleno y use el método setPaint() para configurarlo.
GradientPaint(flotante x1,flotante y1,Color c1,flotante x2,flotante y2,Color c2): De (x1,y1) a (x2,y2) degradado de color de c1 a c2. Entre ellos: los parámetros c1 y c2 determinan el color del degradado del color c1 al color c2. Los parámetros x1, y1, x2, y2 determinan la intensidad del gradiente, es decir, desde el punto (x1, y1) hasta el punto (x2, y2), el color cambia de c1 a c2.
GradientPaint (flotante x1, flotante y1, color c1, flotante x2, flotante y2, color c2, cíclico booleano): si desea que el degradado finalice y sea el color del punto inicial, cíclico debe establecerse en verdadero.
Tres, transformar atributo
El atributo de transformación se utiliza para implementar operaciones de transformación comunes, como traducción, escalado y biselado de gráficos. Primero cree un objeto AffineTransform y luego llame al método setTransform () para establecer el atributo de transformación. Finalmente, los gráficos se dibujan utilizando un objeto Graphics2D con propiedades específicas. Los métodos para crear objetos AffineTransform son:
También puede crear primero un objeto AffineTransform sin un atributo de transformación y luego usar los siguientes métodos para especificar los atributos de transformación de escala, rotación y traducción de gráficos.
Por ejemplo, cree un objeto AffineTransform:
AffineTransform trans = nuevo AffineTransform();
Especifique las propiedades de transformación de rotación alrededor del punto para el objeto AffineTransform:
Trans.rotate(50.0*3.1415927/180.0,90,80);
Luego configure el "pincel" con la función de transformación de rotación anterior para el objeto Graphics2D g2d:
Gráficos2D g2d = (Graphics2D)g;g2d.setTranstorm(trans);
Finalmente, se llama al método draw() del objeto Graphics2D con función de transformación con el objeto de gráficos como parámetro. Por ejemplo, suponiendo que hay un objeto de curva cuadrática, el siguiente código implementa el dibujo de esta curva cuadrática usando el objeto g2d con la función de rotación anterior:
g2d.draw(curva);
4. atributo de clip
El atributo de clip se utiliza para lograr efectos de recorte. Para establecer el atributo de recorte, puede llamar al método setClip() para determinar la forma del área de recorte. Se realizan varias operaciones setClip() consecutivamente para obtener el área de recorte donde se cruzan.
5. atributo compuesto
El atributo de composición establece el efecto del área superpuesta de los gráficos. Primero use el método AlphaComposite.getInstance (int rule, float alpha) para obtener el objeto AlphaComposite y luego establezca el efecto de mezcla mediante el método setComposite (). Los valores alfa oscilan entre 0,0f (completamente transparente) y 0,1f (completamente opaco).
Métodos de dibujo de la clase Graphics2D.
La clase Graphics2D aún conserva los métodos de dibujo de la clase Graphics, aunque agrega muchos métodos nuevos. El nuevo método dibuja formas geométricas (segmentos de línea, círculos, etc.) como un objeto. Se utiliza una serie de clases declaradas en el paquete java.awt.geom para crear varios objetos gráficos del cuerpo. Los principales son:
Clase de segmento de línea Line2D, clase de rectángulo redondeado RoundRectangle2D, clase de elipse Ellipse2D, clase de arco Arc2D, clase de curva cuadrática QuadCurve2D, clase de curva cúbica CubicCurve2D.
Dibujar un gráfico usando los nuevos métodos de la clase Graphics2D. Primero, en el método de redibujo paintComponent() o paint(), fuerce el objeto de parámetro g en un objeto Graphics2D, luego use el método estático Double() proporcionado por la clase de gráficos anterior para crear el objeto de los gráficos; el objeto de gráficos como parámetro Llame al método draw() del objeto Graphics2D para dibujar este gráfico. Por ejemplo, el siguiente código utiliza el nuevo método de Graphics2D para dibujar segmentos de línea y rectángulos redondeados:
Graphics2D g2d = (Graphics2D)g;//Convierte el tipo de objeto g de Graphics a Graphics2D Line2D line = new Line2D.Double(30.0,30.0,340.0,30.0); RoundRectangle2D.Double(13.0,30.0,100.0,70.0,40.0,20.0); g2d.draw(rRect);
También puede usar primero el objeto Shape proporcionado por el paquete java.awt.geom, crear un objeto Shape con coordenadas Float de precisión simple o coordenadas Double de doble precisión y luego dibujarlo usando el método draw(). Por ejemplo, el siguiente código crea un objeto de arco y luego dibuja el arco:
Arco de forma = new Arc2D.Float(30,30,150,150,40,100,Arc2D.OPEN); g2d.draw(arc)//Dibuja el arco del objeto gráfico creado anteriormente;
Clase de geometría de Graphics2D
segmento de recta
Line2D line = new Line2D.Double(2,3,200,300);//Declarar y crear un objeto de segmento de línea//El punto inicial es (2, 3) y el punto final es (200, 300)
rectángulo
Rectángulo2D rect = new Rectángulo2D.Double(20,30,80,40);// Declara y crea un objeto rectángulo La esquina superior izquierda del rectángulo es (20, 30), el ancho es 300 y la altura es 40.
rectángulo redondeado
RoundRectangle2D rectRound = new RoundRectangle2D.Double(20,30,130,100,18,15); // La esquina superior izquierda es (20, 30), el ancho es 130, la altura es 100, el eje largo de la esquina redondeada es 18, y el eje corto es 15.
oval
Ellipse2D elipse = new Ellipse2D.Double(20,30,100,50); //Esquina superior izquierda (20, 30), el ancho es 100, el alto es 50
Arco
Arc2D arc1 = new Arc2D.Double(8,30,85,60,5,90,Arc2D.OPEN); //La esquina superior izquierda del rectángulo circundante (10, 30), ancho 85, alto 60, ángulo inicial es 5 grados, el ángulo final es 90 grados Arc2D arc2 = nuevo Arc2D.Double(20,65,90,70,0,180,Arc2D.CHORD3 = nuevo Arc2D.Double(40,110,50,90,0,270,Arc2D.PIE);
Los parámetros Arc2D.OPEN, Arc2D.CHORD y Arc2D.PIE indican respectivamente si el arco es un arco abierto, un arco en arco o un arco circular.
Curva cuadrática Una curva cuadrática está representada por un polinomio de segundo orden:
y(x)=ax2+bx+c
Una curva cuadrática debe estar determinada por tres puntos: el punto inicial, el punto de control y el punto final.
QuadCurve2D curva1 = nueva QuadCurver2D.Double(20,10,90,65,55,115); QuadCurve2D curva2 = nueva QuadCurver2D.Double(20,10,15,63,55,115); QuadCurver2D.Doble(20,10,54,64,55,115);
Los seis parámetros del método Double() son el punto inicial, el punto de control y el punto final de la curva cuadrática. Los puntos iniciales y finales de las tres curvas cuadráticas anteriores son los mismos.
Curva cúbica Una curva cúbica está representada por un polinomio de tercer orden:
y(x)=ax3+bx2+cx+d
Una curva cúbica requiere cuatro puntos para determinarse: el punto inicial, dos puntos de control y el punto final.
CubicCurve2D curva1 = nueva CubicCurve2D.Double(12,30,50,75,15,15,115,93; CubicCurve2D curva2 = nueva CubicCurve2D.Double(12,30,15,70,20,25,35,94); = nuevo CubicCurve2D.Double(12,30,50,75,20,95,95,95);
Los ocho parámetros del método Double() son el punto inicial, dos puntos de control y el punto final de la curva cúbica.
El proceso de dibujo de curvas de ecuaciones generales está controlado por un bucle. Genere el valor de la variable independiente a través de un bucle, calcule el valor de la función de acuerdo con la ecuación y luego realice la transformación de coordenadas necesaria: transformación de traducción para posicionamiento de origen, transformación de escala para reducción o ampliación de imagen, obtenga el punto de imagen de la curva, y dibuja este punto. Tome el dibujo de la siguiente ecuación de curva como ejemplo:
Y=sin(x)+cos(x),x
Parte del código de dibujo se puede escribir de la siguiente manera:
doble x0,y0,x1,y1,x2,y2,escala;x0=100;y0=80;escala =20.0;for(x1=-3.1415926d;x1<=2*3.1415926d;x1+=0.01d){ y1 =Matemáticas.sin(x1)+Matemáticas.cos(x1); x2=x0+x1*scale;y2=y0+y1*scale;//(x2,y2) es el punto de la imagen g.fillOval((int)x2,(int)y2,1,1);//Dibuja un puntos circulares como puntos de imagen}