geraden Linie zwischen zwei Punkten
Auf einem HTML-canvas-ich habe mehrere Punkte, beginnend von 1 bis N, das ist im Grunde eine Verbindung herstellen Anwendung und aktiviert ist, auf touchstart.
Es ist Validierung so, dass Sie nur verbinden Sie die Punkte von 1 und gehe zu 2 (.. n). Das Problem ist, dass jetzt gibt es keine Bestätigung, dass die Linie eine gerade Linie ist, und ich bin auf der Suche nach einem Algorithmus, um dies zu tun, Hier ist, was ich dachte, so weit
- Für 2 Punkte (x1,y1) nach (x2,y2) erhalten alle Koordinaten durch das finden der Steigung und mit Hilfe der Formel y = mx + b
- auf touchmove Holen Sie sich die x -, y-co-oridnates und stellen Sie sicher, es ist einer der Punkte aus dem vorherigen Schritt und ziehen Sie eine Linie sonst nicht die Grenze ziehen.
Gibt es einen besseren Weg, dies zu tun, oder sind es verschiedene Ansätze, die ich nehmen kann ?
- Zu klären: wollen Sie die Punkte verbinden sich, oder wollen Sie, um sicherzustellen, dass der Benutzer hat die Punkte verbunden, richtig?
- Jelvis ich möchte sicherstellen, dass der Nutzer hat die Punkte verbunden
- Gut, das zu tun, können Sie einfach meine Antwort, gehen durch alle Koordinaten und ruft
isValid
auf Sie. Möglicherweise möchten Sie den Benutzer zu geben ein bisschen Spielraum, da die Zeichnung eine 100% gerade Linie ist schwierig.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Edit: ich ursprünglich falsch verstanden, die Frage ist, wie es scheint.
So weit, überprüfen Sie den Pfad: ich denke, es wäre einfacher, nur um eine Funktion, die bestimmt, ob ein Punkt gilt als der Berechnung alle Werte vorher. So etwas wie:
Dann, da zwei Punkte, Sie könnten dies tun:
Dieser Ansatz gibt Ihnen auch eine gewisse Flexibilität—man kann Sie immer ändern Sie die Funktion zu wenig präzise, um Platz für Leute, die nicht ganz eine gerade Linie zeichnen, sind aber ziemlich in der Nähe.
Präzision:
Wie bereits in meinem Kommentar können Sie ändern, wie die Funktion verhält sich, um es weniger anspruchsvoll. Ich denke, ein guter Weg, dies zu tun ist wie folgt:
Momentan sind wir mit dem Formel -
(y - y1) == slope * (x - x1)
. Dies ist das gleiche wie(slope * (x - x1)) - (y - y1) == 0
. Wir können ändern Sie die null, um einige positive Zahl zu machen, akzeptieren-Punkte "in der Nähe" der gültige Zeile etwa so:Hier
n
änderungen, wie nahe der Punkt muss auf die Linie, um zu zählen.Ich bin mir ziemlich sicher, dass dies funktioniert wie beworben und hilft Konto für Menschen zeichnen Sie die Linie ein wenig krumm und schief, aber jemand sollte double check meine Mathe -.
(y - y1)
und(slope * (x - x1))
gleich sind. Dies ist das gleiche wie(slope * (x - x1)) - (y - y1) == 0
. Ich denke, dass können Sie nur so etwas wieMath.abs((slope * (x - x1)) - (y - y1)) <= num
wonum
legt fest, wie ungenau Sie wollen die Funktion zu sein.x1 == x2
.//Mit Tomer Almog