# Pfeil zeichnen am Ende einer Linie



## irgendetwas (25. Okt 2014)

Das ist eher eine mathematisch, geometrische Frage aber wie berechne ich wie der Pfeil am Ende einer Linie ausgerichtet werden soll, sodass er egal in welcher Richtung er schaut richtig aussieht. 
Bsp: (drücken und ziehen um einen Pfeil zu erstellen)

```
import java.awt.Color;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.*;

public class GUI extends JFrame
{
	private Linie linie = null;
	private final int obererRand = 25;
	private final int linkerRand = 3;

	public GUI() {
		setTitle("Travelling Salesman");
		final int hoehe = Toolkit.getDefaultToolkit().getScreenSize().height
				- Toolkit.getDefaultToolkit().getScreenSize().height / 5;
		final int breite = Toolkit.getDefaultToolkit().getScreenSize().width
				- Toolkit.getDefaultToolkit().getScreenSize().width / 5;
		setBounds(breite / 10, hoehe / 10, breite, hoehe);
		getContentPane().setBackground(Color.white);
		setLayout(null);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setResizable(false);

		addMouseMotionListener(new MouseMotionAdapter()
		{
			@Override
			public void mouseDragged(MouseEvent e) {
				if (linie == null) {
					linie = new Linie();
					GUI.this.add(linie);
					linie.setLocation(0, 0);
					linie.setSize(breite, hoehe);

					linie.setStartX(e.getX() - linkerRand);
					linie.setStartY(e.getY() - obererRand);

				} else {
					linie.setZielX(e.getX() - linkerRand - linie.getX());
					linie.setZielY(e.getY() - obererRand - linie.getY());

					repaint();
				}
			}
		});

		setVisible(true);
	}

	public static void main(String[] args) {
		new GUI();
	}
}
```


----------



## irgendetwas (25. Okt 2014)

Sieht nur bei 45° nach unten korrekt aus.
Klasse Linie:


```
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Polygon;

import javax.swing.JComponent;

public class Linie extends JComponent
{	
	private int startX = 0;
	private int startY = 0;
	private int zielX = 0;
	private int zielY = 0;

	public void setStartX(int startX) {
		this.startX = startX;
	}

	public void setStartY(int starty) {
		this.startY = starty;
	}

	public void setZielX(int zielX) {
		this.zielX = zielX;
	}

	public void setZielY(int zielY) {
		this.zielY = zielY;
	}

	@Override
	public void paintComponent(Graphics g) {
	
		super.paintComponents(g);
		Graphics2D g2 = (Graphics2D) g;
		g2.setStroke(new BasicStroke(2));
		g2.drawOval(startX, startY, 3, 3);
		g2.drawLine(startX + 1, startY + 1, zielX, zielY);

		int[] x = { zielX, zielX, zielX - 10 };
		int[] y = { zielY, zielY - 10, zielY };
		Polygon p = new Polygon(x, y, 3);
		g2.fillPolygon(p);
		g2.drawPolygon(p);		
	}
}
```


----------

