So wählen Sie eine Linie
So, ich bin versucht, herauszufinden, wie zu implementieren ist eine Methode der Auswahl der Linien oder Kanten in einer Zeichnung Gegend, aber mein Mathe ist ein bisschen fehlt. Dies ist, was ich so weit gekommen:
- Eine Sammlung von Zeilen, jede Zeile hat zwei Endpunkte (eine zum starten und eine zum Ende der Zeile)
- Die Linien sind korrekt gezeichnet auf einer Leinwand
- Mausklicks Ereignisse empfangen werden, wenn Sie auf den canvas-Bereich, also ich kann die x-und y-Koordinate des Mauszeigers
Ich weiß, ich kann die Iteration durch die Liste der Linien, aber ich habe keine Ahnung, wie man konstruiere einen Algorithmus, um eine Linie durch einen gegebenen Koordinate (d.h. mit der Maus klicken). Hat jemand irgendwelche Ideen oder zeigen Sie mir die richtige Richtung?
//import java.awt.Point
public Line selectLine(Point mousePoint) {
for (Line l : getLines()) {
Point start = l.getStart();
Point end = l.getEnd();
if (canSelect(start, end, mousePoint)) {
return l; //found line!
}
}
return null; //could not find line at mousePoint
}
public boolean canSelect(Point start, Point end, Point selectAt) {
//How do I do this?
return false;
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beste Weg, dies zu tun ist, um mit der intersects-Methode von der Linie. Wie ein anderer user bereits erwähnt, müssen Sie einen Puffer Gegend um, wo Sie geklickt haben. So erstellen Sie ein Rechteck zentriert um Ihre Maus zu koordinieren, dann testen Sie das Rechteck für den Schnittpunkt mit dieser Linie. Hier ist etwas code, der funktionieren sollte (nicht über einen compiler oder so etwas, aber sollte leicht änderbar)
}
Wenn Sie die 2D-api, dann ist dies bereits berücksichtigt.
Können Sie Line2D.Doppel Klasse zu repräsentieren, die Linien. Die Line2D.Doppel-Klasse hat eine contains () - Methode, die Ihnen sagt, wenn ein Punkt auf der Linie oder nicht.
contains()
immer false zurück, daLine2D
hat keine FlächeNun, zunächst einmal, seit einer mathematischen Linie hat keine Breite, es wird sehr schwierig für einen Benutzer, klicken Sie genau AUF der Linie. Als solche, Ihre beste Wette ist, um zu kommen mit einigen angemessenen Puffer (1 oder 2 Pixel, oder wenn Sie Ihre Linie grafisch hat eine Breite Verwendung,...) und berechnen Sie den Abstand von dem Punkt der Maus klicken Sie auf die Linie. Wenn der Abstand fällt in den Puffer, dann wählen Sie die Linie. Wenn Sie fallen in die Puffer für mehrere Zeilen, wählen Sie die eine, die am nächsten kamen.
Linie Mathematik hier:
http://mathworld.wolfram.com/Point-LineDistance2-Dimensional.html
Kürzeste Entfernung zwischen einem Punkt und einem Liniensegment
Sorry, in der Mathematik sind noch erforderlich... Dies ist aus java.das awt.geom.Line2D:
Empfehle ich Tojis Antwort