sirve que para ovalo fillroundrect fillpolygon example ejemplo drawpolygon drawoval clase java graphics awt

que - Dibujando una línea con flecha en Java



graphics java example (2)

¿Alguien puede guiarme a cómo codificar la línea de flecha en una dirección diferente? wa y wl es positivo, el rectángulo estará en la parte superior del eje x. El ejemplo siguiente se muestra si wl es negativo y wa es positivo. El siguiente código muestra cómo codigo la forma del rectángulo. x1 es el vaiverable de indicar dónde comenzar en el eje x. e1 es la longitud de la forma, wa1 y wl1 es la altura. wsign para determinar la altura wa1 o wl1 debe mostrar en el lado negativo o positivo.

if (Math.abs(wl1) > Math.abs(wa1)) { y_scale = (load_y0 - 40) / (double) Math.abs(wl1); } else { y_scale = (load_y0 - 40) / (double) Math.abs(wa1); } g.drawLine((int) ((double) x0 + x1 * x_scale), (int) (load_y), (int) ((double) x0 + x1 * x_scale), (int) (load_y + (wa1 * y_scale) * -1)); g.drawLine((int) ((double) x0 + (x1 + e1) * x_scale), (int) (load_y), (int) ((double) x0 + (x1 + e1) * x_scale), (int) (load_y + (wl1 * y_scale) * -1)); g.drawLine((int) ((double) x0 + x1 * x_scale), (int) (load_y + (wa1 * y_scale * -1)), (int) ((double) x0 + (x1 + e1) * x_scale), (int) (load_y + (wl1 * y_scale) * -1));


Muestra de flecha simple

/** * @param fromPoint end of the arrow * @param rotationDeg rotation angle of line * @param length arrow length * @param wingsAngleDeg wingspan of arrow * @return Path2D arrow shape */ public static Path2D createArrowForLine( Point2D fromPoint, double rotationDeg, double length, double wingsAngleDeg) { double ax = fromPoint.getX(); double ay = fromPoint.getY(); double radB = Math.toRadians(-rotationDeg + wingsAngleDeg); double radC = Math.toRadians(-rotationDeg - wingsAngleDeg); Path2D resultPath = new Path2D.Double(); resultPath.moveTo(length * Math.cos(radB) + ax, length * Math.sin(radB) + ay); resultPath.lineTo(ax, ay); resultPath.lineTo(length * Math.cos(radC) + ax, length * Math.sin(radC) + ay); return resultPath; }


Aquí hay una rutina simple (adoptada desde aquí ) para dibujar flechas arbitrarias:

import static java.awt.geom.AffineTransform.*; import java.awt.*; import java.awt.geom.AffineTransform; import javax.swing.*; public class Main { public static void main(String args[]) { JFrame t = new JFrame(); t.add(new JComponent() { private final int ARR_SIZE = 4; void drawArrow(Graphics g1, int x1, int y1, int x2, int y2) { Graphics2D g = (Graphics2D) g1.create(); double dx = x2 - x1, dy = y2 - y1; double angle = Math.atan2(dy, dx); int len = (int) Math.sqrt(dx*dx + dy*dy); AffineTransform at = AffineTransform.getTranslateInstance(x1, y1); at.concatenate(AffineTransform.getRotateInstance(angle)); g.transform(at); // Draw horizontal arrow starting in (0, 0) g.drawLine(0, 0, len, 0); g.fillPolygon(new int[] {len, len-ARR_SIZE, len-ARR_SIZE, len}, new int[] {0, -ARR_SIZE, ARR_SIZE, 0}, 4); } public void paintComponent(Graphics g) { for (int x = 15; x < 200; x += 16) drawArrow(g, x, x, x, 150); drawArrow(g, 30, 300, 300, 190); } }); t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); t.setSize(400, 400); t.setVisible(true); } }

Resultado: