Schönen guten Morgen!
Ich bin mal wieder am 'Malen nach Zahlen'. Inzwischen schon wieder viel zu lange, drum frag ich jetzt die klugen Köpfe:
Ich habe ein Dreieck - sogar ein gleichseitiges! - und einen Punkt. Das Dreieck existiert wirklich und der Punkt ist der Mauszeiger
Herausfinden, OB der Punkt im Dreieck liegt war bisher nicht schwer dank Canvas -> isPointInPath. Mein Problem betrifft nur den Fall: Punkt außerhalb des Dreiecks.
Wie komme ich an den Punkt des Dreiecks, der die kürzeste Distanz zu meinem Mauszeiger hat?
Mein doofer Ansatz:
Aus den Punkten des Dreiecks Geradengleichungen erstellen und noch eine gerade aus Dreiecksmittelpunkt und dem Mauszeigerpunkt. Danach jeweils Schnittpunkte berechnen und der mit der kürzesten Distanz ist es.
An sich nicht sooo doof, aber irgendwie ist es ungemein schwierig in Java solche Gleichungssysteme aufzustellen, umzuformen und zu lösen.
Folge Daten stehen bereit:
x,y - Position des Mauszeigers
x,y - Position -> Mittelpunkt des Dreiecks
x,y - Position -> 3 Eckpunkte des Dreiecks
natürlich auch Seitenlängen, etc. pp.
Das Dreieck hat eine standard-Ausrichtung. Ich habe auch die aktuelle Drehung parat, aber ich denke, das hilft nicht weiter...
Hoffentlich gibt's dafür 'ne einfache Lösung, die auch noch schnell Läuft. Die Rechnung wird grob 20x pro Sekunde durchgeführt... Wär schön, wenn am Ende noch Ressourcen für den Rest des Rechners übrig bleiben
Grüße und gut Code!!
EDIIITH!
Schritt weiter: Es gibt nur noch das ursprüngliche Dreieck
Ich nehme nun die Mausposition und dreh sie gegen die Drehung des Dreiecks zurück. Ich kann also jetzt mit dem 'normalen' Dreieck rechnen... Aber ich brauch immernoch irgendwelche Formeln. 
Mit 3 if-else weiß ich nun schonmal in welchem Bereich der Punkt liegt (links vom Dreieck, oder oben rechts oder unten rechts). Damit sollte man doch was anfangen können oder? Also irgendwie den Schnittpunkt mit dem Dreieck auf dem Weg zu dessen Mittelpunkt berechnen.
Ich bin mal wieder am 'Malen nach Zahlen'. Inzwischen schon wieder viel zu lange, drum frag ich jetzt die klugen Köpfe:
Ich habe ein Dreieck - sogar ein gleichseitiges! - und einen Punkt. Das Dreieck existiert wirklich und der Punkt ist der Mauszeiger
Wie komme ich an den Punkt des Dreiecks, der die kürzeste Distanz zu meinem Mauszeiger hat?
Mein doofer Ansatz:
Aus den Punkten des Dreiecks Geradengleichungen erstellen und noch eine gerade aus Dreiecksmittelpunkt und dem Mauszeigerpunkt. Danach jeweils Schnittpunkte berechnen und der mit der kürzesten Distanz ist es.
An sich nicht sooo doof, aber irgendwie ist es ungemein schwierig in Java solche Gleichungssysteme aufzustellen, umzuformen und zu lösen.
Folge Daten stehen bereit:
x,y - Position des Mauszeigers
x,y - Position -> Mittelpunkt des Dreiecks
x,y - Position -> 3 Eckpunkte des Dreiecks
natürlich auch Seitenlängen, etc. pp.
Das Dreieck hat eine standard-Ausrichtung. Ich habe auch die aktuelle Drehung parat, aber ich denke, das hilft nicht weiter...
Code:
so sieht's aus, wenn Drehung auf 0° steht:
|\
| \
| /
|/
Hoffentlich gibt's dafür 'ne einfache Lösung, die auch noch schnell Läuft. Die Rechnung wird grob 20x pro Sekunde durchgeführt... Wär schön, wenn am Ende noch Ressourcen für den Rest des Rechners übrig bleiben
Grüße und gut Code!!
EDIIITH!
Schritt weiter: Es gibt nur noch das ursprüngliche Dreieck
Mit 3 if-else weiß ich nun schonmal in welchem Bereich der Punkt liegt (links vom Dreieck, oder oben rechts oder unten rechts). Damit sollte man doch was anfangen können oder? Also irgendwie den Schnittpunkt mit dem Dreieck auf dem Weg zu dessen Mittelpunkt berechnen.
Zuletzt bearbeitet: