Hallo zusammen,
ich habe immer noch ein Problem mit Linien vom Typ
In der Skizze weiter unten ist der Anker als schwarzer Punkt dargestellt. Wie man sieht, wird die Linie nicht direkt durch den Anker gezeichnet (ich weiß nicht wieso, es stört mich aber eigentlich auch nicht so wirklich), allerdings nutze ich den Anker auch um Text zu positionieren. Kann ich während dem Zeichnen der Linie den Punkt bekommen, durch den die Linie wirklich geht, sodass der Text am Ende an der Linie und nicht so weit weg steht?
Das zweite Problem ist das Erkennen, ob ein Mausklick auf der Linie ist oder nicht, was ich bisher wie folgt bestimme:
Wobei x und y für die Koordinaten des Klicks stehen. Bei einer geraden Linie funktioniert das auch einwandfrei, bei einer Kurve hingegen, wird auch bei einem Klick auf die Fläche unter der Linie (In der Abbildung unten grün) true zurückgegeben. Wie kann ich das so umschreiben, dass wirklich nur bei einem Klick auf die Linie true zurück geliefert wird?
ich habe immer noch ein Problem mit Linien vom Typ
Path2D.Double
. Dabei zeichne ich jede Linie durch 3 Punkte: Anfangspunkt, Endpunkt und Anker (Mittelpunkt):
Java:
line.moveTo(from.x(), from.y());
line.curveTo(from.x(), from.y(), anchor.x, anchor.y, to.x(), to.y());
line.moveTo(to.x(), to.y());
line.closePath();
g2.drawString(String.valueOf(Arrays.toString(letters)), anchor.x + 2, anchor.y + 2);
g2.draw(line);
In der Skizze weiter unten ist der Anker als schwarzer Punkt dargestellt. Wie man sieht, wird die Linie nicht direkt durch den Anker gezeichnet (ich weiß nicht wieso, es stört mich aber eigentlich auch nicht so wirklich), allerdings nutze ich den Anker auch um Text zu positionieren. Kann ich während dem Zeichnen der Linie den Punkt bekommen, durch den die Linie wirklich geht, sodass der Text am Ende an der Linie und nicht so weit weg steht?
Das zweite Problem ist das Erkennen, ob ein Mausklick auf der Linie ist oder nicht, was ich bisher wie folgt bestimme:
Java:
final int HIT_BOX_SIZE = 10;
Rectangle2D rectangle = new Rectangle(x - HIT_BOX_SIZE / 2, y - HIT_BOX_SIZE / 2, HIT_BOX_SIZE, HIT_BOX_SIZE);
return line.intersects(rectangle);