Wie berechne ich den Schnittpunkt zwischen zwei Linien
Ich bin versucht zu berechnen, den Schnittpunkt zwischen den Linien für eine Optical-Flow-Algorithmus mit Hilfe einer Hough-Transformation. Allerdings bin ich nicht immer die Punkte, die ich sein sollte, wenn ich mit meinem Algorithmus zur Berechnung der Schnittpunkte.
Speichere ich die Zeilen, auf die eine Instanz einer Klasse, die ich erstellt namens ImageLine
. Hier ist der code für mein Schnittpunkt-Methode.
Point ImageLine::intersectionWith(ImageLine other)
{
float A2 = other.Y2() - other.Y1();
float B2 = other.X2() - other.X1();
float C2 = A2*other.X1() + B2*other.Y1();
float A1 = y2 - y1;
float B1 = x2 - x1;
float C1 = A1 * x1 + B1 * y1;
float det = A1*B2 - A2*B1;
if (det == 0)
{
return Point(-1,-1);
}
Point d = Point((B2 * C1 - B1 * C2) / det, -(A1 * C2 - A2 * C1) / det);
return d;
}
Ist diese Methode richtig, oder habe ich etwas falsch gemacht? Soweit ich das beurteilen kann, sollte es funktionieren, da es für einen einzigen Punkt, den ich hart codiert durch, allerdings habe ich nicht in der Lage gewesen, um eine gute Kreuzung bei der Verwendung von echten Daten.
InformationsquelleAutor AndrewSchade | 2013-05-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Angesichts der Mathe-Seite: wenn wir zwei line-Gleichungen:
Den Schnittpunkt: (X , Y), der zwei Zeilen beschrieben, die durch die folgenden Gleichungen:
Punkt erfüllt sowohl Gleichung, d.h.:
damit die Schnittpunkt-Koordinaten sind:
Hinweis: c1, m1, c2, m2 berechnet werden, indem man 2 beliebige Punkte einer Zeile und setzen Sie in die Zeile Gleichungen.
InformationsquelleAutor sethi
(det == 0)
ist unwahrscheinlich, um wahr zu sein, wenn Sie mit floating-point-Arithmetik, weil es nicht präzise.Etwas wie
(fabs(det) < epsilon)
wird Häufig verwendet, für einige geeignete Wert von epsilon (sagen wir1e-6
).Wenn das nicht beheben, zeigen einige aktuelle zahlen, zusammen mit dem erwarteten Ergebnis und dem tatsächlichen Ergebnis.
Also, was wird zurückgegeben? Was sind Ihre Beiträge? Was sind die Zwischenwerte?
InformationsquelleAutor Useless
Wenn die Formeln korrekt sind, versuchen Sie deklarieren alle Ihre intermediate-Argumente, die als 'double'. Wobei der Unterschied von fast parallelen Linien führen könnte, die in Ihren Produkten sehr nah an einander, so dass die 'float' kann nicht erhalten genug Präzision.
InformationsquelleAutor NPAssoc
Ausführliche Formel, gehen Sie bitte zu auf dieser Seite.
Aber ich Liebe code so, hier, probiert diesen code (ich bekomme es aus github, also alle Kredit geht an den Autor des Codes):
InformationsquelleAutor 123iamking