Punkt und ellipse (gedreht) position test: Algorithmus
Wie um zu testen, ob ein Punkt P = [xp,yp] innen/außen einige gedrehte ellipse gegeben durch das Zentrum C=[x,y], a, b und phi ( Drehwinkel)?
In diesem moment bin ich mit folgender Lösung: drehen Sie die ellipse und den Punkt durch die Winkel phi und dann der gemeinsame test für eine position von dem Punkt, und "nicht gedreht" ellipse.
Aber es gibt eine Menge der getesteten Punkte (in tausend) und ich finde diese Lösung so langsam. Ist es direkter und effizienter Weg, um eine position der gedrehten ellipse und Punkt?
Brauche ich keinen code, sondern der Algorithmus. Vielen Dank für Ihre Hilfe.
Zeigen Sie uns, was Sie bisher getan haben. Etwas, dass wir Ihnen helfen können.
InformationsquelleAutor justik | 2011-10-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Andere Möglichkeit ist, nur werfen alles in die Gleichung für ein 2D gedrehte ellipse und sehen, ob das Ergebnis kleiner ist als eins.
Also ein Punkt im Innern der ellipse, wenn die folgende Ungleichung wahr ist
Wobei (xp,yp) sind die Punktkoordinaten und (x0, y0) der Mittelpunkt der ellipse.
Implementiert habe ich eine kleine Mathematica Programm demonstriert, dass dies in der Tat funktioniert:
Hier ist es in Aktion:
Und hier ist der code:
InformationsquelleAutor Ajasja
Können Sie einfach füttern Sie Ihre Daten in die Formel oben angegeben. Hier ist eine python-Implementierung, die ich auf Ajasja Empfehlungen:
Verwenden Sie nicht
math.pow(val, 2)
zu Platz etwas. Das ist wirklich langsam. (Zuweisen an eine variable und multiplizieren Sie diese mit sich selbst).InformationsquelleAutor Raoul
Umgang mit Ellipsen, die ich lieber umzuwandeln in ein anderes Koordinatensystem, wo die ellipse ist eine Einheit, Kreis zentriert am Ursprung.
Wenn Sie sehen, das die ellipse eines Einheitskreises (radius 1), skaliert durch (a,b), gedreht von phi und verwandelt durch (x,y), dann wird das Leben viel einfacher.
Wenn Sie, dass die Transformationsmatrix Sie können es verwenden, um einen einfacheren query containment. Wenn Sie transformieren der Punkt im Koordinatensystem, wo die ellipse ist eine Einheit, Kreis, alle Sie tun müssen ist, eine Punkt-in-unit-Kreis test-das ist trivial.
Wenn "transform" ist eine matrix, die es vermag, eine Einheit Kreises in die ellipse, wie beschrieben, dann
InformationsquelleAutor Anders Forsgren
Hier ist der Algorithmus, lasse ich Sie entwickeln code:
Bewertung:
Ellipse parametrischen Formel:
x = a*cos(u)
y = b*sin(u)
gültig für u zwischen -pi und +pi. Hinzufügen phi nach u und drehen Sie Ihre ellipse.
Der obige Algorithmus kann vereinfacht und optimiert werden von ellipse Gleichungen.
Glück!
InformationsquelleAutor rjobidon
Matplotlib ist eine Ellipse-Methode innerhalb der patches der Klasse, der es Ihnen erlaubt, die Frage zu stellen, ob ein Punkt innerhalb oder außerhalb des patch. Überprüfen Sie hier und suchen Sie nach der Methode contains_point(). Erstellen Sie die ellipse mit dem Ellipse-Klasse, und dann, als ob es einen Punkt im inneren.
BTW, matplotlib ist ein Paket für python.
InformationsquelleAutor Jose Sergio Hleap