Ich möchte ein Stück eines Codes wissen, der mir sagen kann, ob 3 Punkte in einem 2D-Raum auf der gleichen Linie sind oder nicht. Ein Pseudo-Code ist auch ausreichend, aber Python ist besser.Überprüfung, ob 3 Punkte auf der gleichen Linie sind
Antwort
können Sie überprüfen, ob die Fläche des Dreiecks ABC ist 0:
[ Ax * (By - Cy) + Bx * (Cy - Ay) + Cx * (Ay - By) ]/2
Natürlich kann man nicht wirklich von 2.
Das ist viel besser, weil es kein Risiko gibt, durch 0 zu teilen. –
Nur um etwas aufzuzeigen ... Dies ist mathematisch äquivalent zu @dcp's Antwort oben (wenn Sie die '/ 2' ignorieren), aber prüfen, ob der Bereich ist 0 macht es einfacher, eine Toleranz hinzuzufügen ... (dh 'stuff
+1 mathematisch ist das gleiche, aber das Konzept ist einfacher/visuell/geradlinig (ich mag das). – joaquin
y - y0 = a(x-x0)
(1) während und a = (y1 - y0)/(x1 - x0)
A(x0, y0)
B(x1, y1)
C(x2, y2)
. Siehe ob C
Statistik (1). Sie ersetzen nur die entsprechenden Werte.
Dies ist C++, aber man kann es an Python anpassen:
bool collinear(int x1, int y1, int x2, int y2, int x3, int y3) {
return (y1 - y2) * (x1 - x3) == (y1 - y3) * (x1 - x2);
}
Grundsätzlich prüfen wir, dass die Steigungen zwischen Punkt 1 und Punkt 2 und Punkt 1 und Punkt 3 Spiel. Slope ist in y Änderung durch Änderung geteilt in x, so haben wir:
y1 - y2 y1 - y3
------- = --------
x1 - x2 x1 - x3
Kreuz Vervielfachungs gibt (y1 - y2) * (x1 - x3) == (y1 - y3) * (x1 - x2)
;
Hinweis, wenn Sie verdoppelt verwenden, können Sie überprüfen, gegen eine epsilon:
bool collinear(double x1, double y1, double x2, double y2, double x3, double y3) {
return fabs((y1 - y2) * (x1 - x3) - (y1 - y3) * (x1 - x2)) <= 1e-9;
}
Was macht es? – dtb
@ dtb - Ich habe eine Erklärung hinzugefügt, lassen Sie mich wissen, wenn Sie noch Fragen haben. – dcp
netter Trick. Das Überprüfen von Gleitkommazahlen auf Gleichheit ist jedoch nicht sicher. Sie könnten die absolute Differenz gegen einen vordefinierten Schwellenwert testen, der von der Auflösung (Empfindlichkeit) abhängt, die Sie erreichen möchten. –
lesen this, und es verwenden, die Gleichung einer Linie, die durch die ersten beiden Punkte zu finden. Folgen Sie den Anweisungen, um m
und b
zu finden. Berechnen Sie dann für Ihren dritten Punkt mx + b - y
. Wenn das Ergebnis Null ist, befindet sich der dritte Punkt in der gleichen Zeile wie die ersten beiden.
Regel 1 teilen müssen: In jedem linearen 2d Raum, zwei Punkte sind immer auf der gleichen Linie.
Nehmen Sie 2 Punkte und erstellen Sie eine Gleichung, die eine Linie durch sie darstellt. Dann überprüfen Sie, ob der dritte Punkt auch in dieser Zeile ist.
Viel Glück.
- 1. finden Sie Kreuzung Linie durch 3 Punkte auf horizontalen Linien
- 2. Überprüfung, ob eingegebene Koordinaten gültig sind
- 3. Regex mehrere Übereinstimmungen auf der gleichen Linie
- 4. Punkte auf einer Linie in jfreechart
- 5. Daumen auf Linie Eckpunkte verschieben keine Punkte
- 6. Überprüfung, ob zwei Zellen leer sind
- 7. eine Linie durch zwei Punkte
- 8. Wie behalte ich zwei Divs auf der gleichen Linie?
- 9. HTML-Tag auf der gleichen Linie Looping Rasiermesser
- 10. Warum sind Punkte langsam
- 11. wie zwei Überschriften auf der gleichen Linie in html haben
- 12. logische Überprüfung der Vektorwerte bei der gleichen Präzession oder nicht
- 13. Float links, Mitte und float rechts 3 div auf der gleichen Linie
- 14. Überprüfen Sie, ob Verzeichnispfade sind die gleichen
- 15. Matplotlib Scatterplot Punkte mit Linie verbinden - Python
- 16. HTML-Tabellenverschachtelung | Ausrichtung - 2 x auf der gleichen Linie
- 17. IP-Adresse und Land auf der gleichen Linie mit AWK
- 18. Suchen und Bearbeiten mehrerer Regex Spiele auf der gleichen Linie
- 19. 3 Punkte java Titel Grenze
- 20. iterieren N Punkte, die auf eine andere Linie, die senkrecht sind
- 21. Linie verbindet die Punkte in der Plot-Funktion in R
- 22. einen Begrenzungsrahmen und eine Linie (zwei Punkte) Gegeben, festzustellen, ob die Zeile der Box
- 23. Überprüfung der UI-bezogenen Probleme
- 24. Überprüfung, ob der Benutzer bereits registriert ist
- 25. Bereich, der Punkte enthält?
- 26. Überprüfung, ob ein ViewController auf dem Navigationsstapel existiert
- 27. Überprüfung, ob ein Java Timer abgebrochen wird
- 28. Ermitteln, ob logische Volumes in VMware auf der gleichen physischen Festplatte sind
- 29. Problem mit der Überprüfung, ob die Zahl in Index Pandas
- 30. CSS 3 Div in der gleichen Zeile -! Fix mit - Andere zwei sind prozentual
Wie ist Ihre Linie definiert? Funktion auf einer 2-D-Ebene? – Daenyth
Was genau hast du? Drei Punkte? oder drei Punkte und eine Linie? –